首页 > 代码库 > redis(1)
redis(1)
安装redis
wget http://download.redis.io/releases/redis-3.0.7.tar.gz
tar xzf redis-3.0.7.tar.gz
ln -s redis-3.0.7 redis
yum install gcc -y
make
##zmalloc.h:50:31: 致命错误:jemalloc/jemalloc.h:没有那个文件或目录
README
说的是关于分配器allocator, 如果有MALLOC 这个 环境变量, 会有用这个环境变量的 去建立redis。
而且libc 并不是默认的 分配器, 默认的是 jemalloc, 因为 jemalloc 被证明 有更少的 fragmentation problems 比libc。
但是如果你又没有jemalloc 而只有 libc 当然 make 出错。 所以加这么一个参数。
解决办法
make MALLOC=libc
make MALLOC=libc
make
make install
redis-cli -v
redis-server /root/redis/redis.conf & (从配置文件启动)
redis-cli -h 127.0.0.1 -p 6379
redis-cli -h 127.0.0.1 -p 6379 get hello (直接得到命令的返回结果)
#停止redis服务
redis-cli shutdown
##redis关闭的过程:断开与客户端的连接、持久化文件生成
##kill -9 强制杀死redis服务,不但不会做持久化操作,还会造成缓存区资源不能被优雅关闭,极端情况会造成AOF和复制丢失数据的情况
##redis还有一个参数,代表是否在关闭redis前,生成持久化文件;
redis-cli shutdown nosave|save
redis有五种数据结构,他们是键值对中的值,对于键来说有一些通用的命令
1.查看所有键
keys *
2.键总数
dbsize
3.检查键是否存在
exists key
如果键存在返回1,不存在返回0
4.删除键
del keys
del是一个通用的命令,无论值是什么数据结构类型,del命令都可以将其删除。
5.键过期
expire key seconds
ttl命令会返回键的剩余过期时间,他有3种返回值;
大于等于0的整数:键剩余的过期时间
-1:键没设置过期时间
-2:键不存在
6.键的数据结构类型
type key
数据结构和内部编码:
type命令实际返回的就是当前值的数据结构类型,他们分别是:string(字符串)、hash、list(列表)、set(集合)、zset(有序集合)
实际上每种数据结构都有自己底层的内部编码实现,而且是多种实现,这样会在redis会在合适的场景选择合适的内部编码
可以通过object encoding命令查询编码:
object encoding hello
redis这样设计有两个好处:第一,可以改进内部编码,而对外的数据结构和命令没有影响,这样一旦开发出更优秀的内部编码,无需改动外部数据结构和命令。
第二,多种内部编码实现可以在不同场景下发挥各自的优势,例如ziplist比较节省内存,但是在列表元素比较多的情况下,性能会有所下降,这时候redis会根据配置选项将列表类型的内部实现转换为linkedlist.
单线程架构:
redis使用了单线程结构和I/O多路服用的模型来实现高性能的内存数据库服务
为什么单线程还能这么快?
通常来讲,单线程处理能力要比多线程差。
第一,纯内存访问;第二,非阻塞I/O;第三单线程避免了线程切换和竞态产生的消耗。
但是单线程会有一个问题:对于每隔命令的执行时间是有要求的。如果某个命令执行过长,会造成其他命令的阻塞,对于redis这种高性能的服务来说是致命的,所以redis是面向快速执行场景的数据库。
命令:
1、set key value [ex seconds] [px milliseconds] [nx|xx] 设置值
ex seconds:为键设置秒级过期时间
px milliseconds:为键设置毫秒级过期时间
nx:键必须不存在,才可以设置成功,用于添加
xx:与nx相反,键必须存在,才可以设置成功,用于更新
2、get key 获取值
如果要获取的键不存在,则返回nil(空)
3.批量设置值
mset key value [key value ...]
4.批量获取值
mget key [key ...]
5.计数
incr key
incr命令用于对值做自增操作,返回结果分为三种情况:
值是不是整数,返回错误
值是整数,返回自增后的结果
键不存在,按照值为0自增,返回结果为1
不常用命令
1.追加值
append key value
append可以向字符串尾部追价值
2.字符串长度
strlen key
3.设置并返回原值
getset key value
getset和set一样会设置值,但是不同的是,他同时会返回键原来的值
4.设置指定位置的字符
setrange key offeset value
5.获取部分字符串
getrange key start end
内部编码
字符串类型的内部编码有3种
int:8个字节的长整型
embstr:小宇等于39个字节的字符串
raw:大于39个字节的字符串
本文出自 “李生贵的博客” 博客,转载请与作者联系!
redis(1)