Redis—— Remote Dictionary Server,它是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API,我们可使用它构建高性能,可扩展的Web应用程序。
具有以下特点:
首先是在ubuntu下的安装:
下载:
root@localhost:~# wget http://download.redis.io/releases/redis-3.0.0.tar.gz
解压:
root@localhost:~# tar zxvf redis-3.0.tar.gz
编译安装:
root@localhost:~#cd redis-3.0.0 && make && make install
查看安装版本:
root@localhost:~# src/redis-server -v
基本组件:
组件 | 用途 |
---|---|
redis-server | Redis服务器的启动程序。 |
redis-cli | Redis命令行操作工具。当然,你也可以用telnet根据其纯文本协议来操作。 |
redis-benchmark | Redis性能测试工具,测试Redis在你的系统及你的配置下的读写性能。 |
redis-stat | Redis状态检测工具,可以检测Redis当前状态参数及延迟状况。 |
启动redis服务:
root@localhost:~# src/redis-server
连接redis:
root@localhost:~# src/redis-cli
127.0.0.1:6379>
基本参数配置:
参数 | 作用 |
---|---|
daemonize | 是否以后台daemon方式运行redis服务。 |
port | redis服务端口,默认6379。 |
timeout | 请求超时时间。 |
requirepass | 连接数据库密码。 |
redis.config中daemonize参数默认为no,为了让redis服务在后台运行,我们需要将daemonize参数设置为yes。
SET指令:
redis> SET key value //如果key值相同则覆盖原值,并且清除原值的保存时间
redis> SETEX key seconds value //添加生存时间,以秒为单位
redis> GET key //如果key不存在,则返回nil(并非null),如果value非字符串,则报错,因为GET命令仅能获取string类型数据
redis> APPEND key appendValue // 对已存在的字符串进行追加,如果key不存在,则相当于set直接赋值
redis> MSET key value [key1 value1...] //同时set多个,存在则覆盖
redis> MGET key key1... //同时获取多个key值,如果某个key不存在,则当前key返回nil
例如:
127.0.0.1:6379> mget age gender sex
1) "12"
2) "man"
3) (nil)
redis> SETRANGE key offset value //用value覆盖当前key,从偏移量offset开始,如果offset大于原value长度,则中间每个空白均采用用零字节"\x00"填充
redis> STRLEN key //返回当前key存储的string的长度,value非string时,报错
其它指令:
指令 | 用途 |
---|---|
GETSET | 设置键的字符串值,并返回旧值。 |
GETRANGE | 得到字符串的子字符串存放在一个键。 |
GETBIT | 对 key 所储存的字符串值,获取指定偏移量上的位(bit)。 |
SETBIT | 对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。 |
SETNX | 将 key 的值设为 value ,当且仅当 key 不存在。 |
MSETNX | 同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。 |
PSETEX | 和 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间,而不是像 SETEX 命令那样,以秒为单位。 |
INCR | 将 key 中储存的数字值增一。 |
INCRBY | 将 key 所储存的值加上指定增量。 |
INCRBYFLOAT | 为 key 中所储存的值加上指定浮点数增量。 |
DECR | 将 key 中储存的数字值减一。 |
DECRBY | 将 key 所储存的值加上指定增量。 |
HSET指令:
使用HSET命令来将哈希表 key 中的域 field 的值设为 value(即每个key存储的是很多键值对):
redis> HSET key field value # 设置一个新域
设置多个:
HMSET key field value [field value ...] //如果 key 不存在,将会创建一个空的哈希表并执行HMSET操作,如果添加的域已存在哈希表中,那么它将被覆盖。
获取指定key下的指定field值:
redis> HGET key field
获取多个:
redis> HMGET key field1 field2 field3... # 返回值的顺序和传入参数的顺序一样,如果field不存在,则返回nil
获取该key下全部field对应的field及value值(返回值格式为field1 value1然后是field2 value2...),所以返回值长度是field长度的2倍:
redis> HGETALL key
验证给定key下的field是否存在:
redis> HEXISTS key field //存在返回1,不存在返回0
返回当前key下所有field:
redis> HKEYS key // 当 key 不存在时,返回一个空表
返回当前key下所有field的长度和:
redis> HLEN key //当 key 不存在时,返回 0
删除给定key下的field:
redis> HDEL key field //如果是不存在的域,那么它将被忽略掉
LIST:
list首先是字符串列表,list相关命令:
左插入:
redis> LPUSH key value1 values2 //依次插入value1,value2,先插入的value在list的越下方
将列表 key 下标为index的元素的值设置为 value:
redis>LSET key index value //列表 key 必须是已存在的,而且index不能超出列表长度范围
获取到指定位置的 value:
redis>LINDEX key index //index为0表示第一个元素即list结构最低层的数据,1表示第二个元素;-1表示倒数第一个
将值 value 插入到列表 key 当中,位于值 pivot 之前或之后:
redis> LINSERT key BEFORE|AFTER value1 value //在value1之前或之后插入数据value,当 value1不存在于列表 key 时,不执行任何操作。当 key 不存在时, key 被视为空列表,不执行任何操作。如果 key 不是列表类型,返回一个错误
移除列表中与参数 value 相等的元素:
redis> LREM key count value
count 的值可以是以下几种:
获取列表的长度:
redis> LLEN key //如果 key 不存在,返回 0;如果 key 不是列表类型,返回一个错误
让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除:
redis> LTRIM key start stop
无序集合操作:
redis中的集合是一个无序的字符串集合,可以快速进行增、删、改、查、等操作:
插入:
redis> SADD key member1 member2... //已经存在member会被忽略,key不存在则创建key并插入该key集合
随机取出当前集合中的某个元素:
redis> SPOP key //如果所有数据均已pop出去,则返回nil
获取集合中全部的元素:
redis> SMEMBERS key
查看set集合中的数量:
redis>SCARD key
获取key1集合中key2不包含的数据:
redis> SDIFF key1 key2
获取集合的交集:
redis> SINTER key1 key2
返回给定集合的并集:
redis> SUNION key1 key2
判断集合是否包含某个元素:
redis> SISMEMBER key member //为1则存在member,0则不存在
将 member 元素从 source 集合移动到 destination 集合:
redis> SMOVE source destination member //如果 source 集合不存在或不包含指定的 member 元素,则SMOVE命令不执行任何操作,仅返回 0 。否则, member 元素从 source 集合中被移除,并添加到 destination 集合中去;当 destination 集合已经包含 member 元素时,SMOVE命令只是简单地将 source 集合中的 member 元素删除
将元素从集合中移除:
redis> SREM key member1 member2..
有续集合:
有序集合与普通集合非常相似,是一个没有重复元素的字符串集合。不同之处是有序集合的每个成员都关联了一个评分,这个评分(score)被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的,但评分可以重复。
有序集合可以以非常快的速度进行 访问、 添加、 删除 和 更新 元素。
将一个或多个 member 元素及其 score 值加入到有序集 key 当中:
redis> ZADD key score value //score 值可以是整数值或双精度浮点数
移除指定成员:
redis> ZREM key member1 member2...
获取成员评分:
redis> ZSCORE key member //注意返回值是字符串
获取集合成员:
redis > ZRANGE key start stop [WITHSCORES] //显示整个有序集成员
查看集合成员的数量:
redis > ZCARD key
根据score值范围,查看集合成员的数量:
redis> ZCOUNT key min max
获取到给定元素在集合中的排名:
redis> ZRANK key member
为给定的成员评分值加上增量:
redis> ZINCRBY key increment member
KEYS指令:
keys指令用于获取所有的key值:
redis> KEYS pattern //pattern正则表达式匹配
判断指定key是否存在:
redis> EXISTS key //存在返回 1 ,否则返回 0
将当前数据库的 key 移动到给定的数据库 db 当中:
redis> MOVE key db //redis默认db为0,即使用第一个数据库,这里可以随意指定
修改key名:
redis> RENAME key newKey //当 key 和 newkey 相同,或者 key 不存在时,返回一个错误
实现排序:
redis> SORT key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [ASC | DESC] [ALPHA] [STORE destination]
序列化给定key的值:
redis> DUMP key
为key设置生存时间:
redis> EXPIRE key seconds
获取给定 key 剩余生存时间(TTL, time to live):
redis> TTL key //当 key 不存在时,返回 -2 。 当 key 存在但没有设置剩余生存时间时,返回 -1 。 否则,以秒为单位,返回