Redis数据结构&命令手册
Redis数据结构&命令手册
Redis数据结构
Redis可以存储键与5种不同数据结构之间的映射,这五种数据结构类型分别为STRING(字符串)、LIST(列表)、SET(集合)、HASH(散列)、ZSET(有序集合)。
STRING字符串
LIST列表
SET集合
HASH散列
Order-set有序集合
STRING字符串
1.set
set key value [ex 秒数]/[px 毫秒数] [nx]/[xx]
作用:创建string类型数据类型键值对 例子: Set a 1 ex 10:10秒有效 Set a 1 px 9000:9秒有效 注:ex,px不要同时写,否则以后面的有效期为准 Set a 1 ex 10 px 9000:实际有效期为9秒 nx:表示key不存在时,执行操作 Xx:表示key存在时,执行操作
2.mset
mset multi set :一次性设置多个键值
作用:一次设置多个键值对 例子:mset key1 v1 key2 v2...
3.get
get key
作用获取单个key的值
4.mget
mget key1 key2 ...
作用获取多个key的值
5.append
append key value
作用:把value追加到key的原值上
6.setrange
setrange key offset value
作用把字符串的offset偏移字节改成value(替换) set word hello get word hello setrange word 2 ?? get word he??o 注意:如果偏移量》字符长度,该字符自动补0x00 set word hello setrange word 6 ! get word hello\x00!
7.getrange
getrange key start stop 作用:获取字符串中【start,sop】范围的值 注意:对于字符串的下标,左数从0开始,右数从-1开始 set area chinese getrange area 1 4 hine getrange area 0 -3 Chine 注意: 1.start>=length,则返回空字符串 2.stop>=length,则截取至字符结尾 3.如果start所处位置在stop右边,返回空字符串
8.getset
getset key newvalue 作用:获取并返回旧值,设置新值 set status sleep getset status wakeup Sleep get status wakeup getset status working
9.incr
incr key
作用:增加key的大小,增加1
10.decr
decr key
作用:减少key的大小,减少1
11.decrby
decrby key value
作用:减少key的大小,减少value
12.incrby
incrby key value
作用:增加key的大小,增加value
13.incrbyfloat&decrbyfloat
incrbyfloat key value
作用:增加key的大小,增加value,value为float类型
14.setbit
setbit key offset value 设置offset对应二进制位上的值 返回:该位上的旧值 注意:如果offset过大,则会在中间填充0 Offset最大为2^32-1,可以推算出字符串的值最大为512M set char A setbit char 2 1 get char a set char a setbit char 2 0
get char
A
15.bitop
bitop operation destkey key1 [key2 ...]
作用:对key1,key2、keyN左operation,并将结果保存到destkey上
operation可以是AND、OR、NOT、XOR
LIST列表
Redis对链表(linked-list)结构的支持使得它在键值存储的世界中独树一帜。一个列表可以有序地存储多个字符串。
1.lpush
lpush key value
作用:在链表头部插入数据
lpush character a
2.rpush
rpush key value
作用:在尾部插入数据
rpush character b
3.lpop&rpop
lpop key
作用:返回并删除链表头的元素
rpop key
作用:返回并删除链表尾的元素
4.lrange
lrange key start stop
作用:返回链表中【start stop】的元素 注:左数从0开始,右数从-1开始
例子: lrange character 1 3
5.lrem
lrem key count value:从key链表中删除value值 注:删除count的绝对值个value后结束 Count>0 从表头删除 Count<0 从表尾删除 lrem key 2 a:从头开始删除两个a lrem key -2 a:从尾开始删除两个a
6.ltrim
ltrim key start stop
作用:剪切key对应的链接剪切【start,stop】一段,并把该段重新赋给key
7.lindex
lindex key index
作用:返回index索引上的值
例子: lindex key 2
8.llen
llen key
作用:返回链表长度
9.linsert
linsert key after|before search value 在key链表中寻找search,并在search值前后,插入value 注:如果在链表中有多个相同的值,一旦找到一个search后,命令就结束了,因此不会插入多个value rpush num 1 3 6 8 9 linsert num before 3 2 1 2 3 6 8 9 linsert num after 6 7 1 2 3 6 7 8 9
10.rpoppush
rpoplpush source dest
作用:将一个(source)链表尾部的元素删除并添加到另一个链表(dest)的头部
例子: rpush task a b c d rpush job rpoplpush task job 场景:task+job完成安全的队列 1.rpoplpush task job 2.接收返回值,并做业务处理 3.如果成功,rpop job清除任务,如果不成功,下次从job里再次取任务
11.brpop&blpop
brpop,blpop key timeout 等待弹出key的尾/头元素 Timeout为等待超时时间 如果timeout为0,一直等待 场景:长轮询Ajax在线聊天
SET集合
Redis地集合和列表都可以存在多个字符串,它们之间的不同在于,列表可以存储多个相同的字符串,而集合则通过使用散列来保证自己存储的每个字符串都是各不相同的(这些散列表只有键,但没有与键相关联的值)
Redis集合使用无序方式存储元素,所以用户不能使用列表那样,将元素推入集合的某一端,或者从集合的某一端弹出元素。
集合的性质:
- 无序性
- 确定性:
- 唯一性
注:在string和link的命令中,可以通过range来访问string中的某个字符或某几个元素,但,因为集合的无序性,无法通过下标或范围来访问部分元素
因此想访问元素,要么随机选一个,要么都选
1.sadd
sadd key value1 value2
作用:创建集合并往集合key中增加元素
2.srem
srem value1 value2
作用:删除集合中集为value1 value2的元素
返回值:忽略不存在的元素后,真正删除掉的元素的个数
3.spop
spop key
作用:返回并删除集合key中1个随机元素
4.srandmember
srandmember key
作用:返回集合key中随机的1一个元素
5.sismember
sismember key value
作用:判断value是否key集合
是返回1,否返回0
6.srandmember
srandmember key
作用:返回集合key中随机的一个元素
7.sismember
sismember key value
作用:判断value是否在key集合中
是返回1,否返回0
8.smembers
smembers key
作用:返回集合中的所有元素
9.scard
scard key
作用:返回集合中元素的个数
10.smove
smove source dest value
作用:把source中的value删除,并添加到dest集合中
11.sinter
Sinter key1 key2 key3 作用::求出key1 key2 key3 三个集合中的交集,并返回 例子: sadd s1 0 2 3 4 sadd s2 0 5 8 9 sadd s3 0 2 4 7 sinter s1 s2 s3 0
12.sinterstore
sinterstore dest key1 key2 key3
作用:求出key1,key2,key3 三个集合中的交集,并赋值给dest
13.suion
suion key1 key2...keyn
作用:求出key1,key2,keyn的并集,并返回
14.sdiff
sdiff key1 key2 key3
作用:求出key1与key2,key3的差集
HASH散列
Redis的散列可以存储多个键值对之间的映射,和字符串一样,散列存储既可以是字符串又可以是数字值,并且用户同样可以对散列的数字值执行自增操作或者自减操作。
1.hset
hset key field value
作用:把key中 field域的值设为value
注:如果没有field域,直接添加,如果有,则覆盖原field域的值
2.hmset
hmset key field1 value1 [field2 value2 field3 value3 ......fieldn valuen]
作用:设置field1->N个域。对应的值是value->N
3.hget
hget key field
作用:返回key中的field域的值
4.hmget
hmget key field1 field2 fieldN
作用:返回key中的field fieldN域的值
5.hgetall
hgetall key
作用:返回key中所有域与其值
6.hdel
hdel key field
作用:删除key中field域
7.hlen
hlen key
作用:返回key中元素的数量
8.hexists
hexists key field
作用:判断key中有没有field域
9.hincrby
hincrby key field value
作用:是把key中的field域的值增长整型值value
10.hincrbyfloat
hincrbyfloat key field value
作用:是把key中的field域增长浮点值value
11.hkeys
hkeys key
作用:返回key中所有field
12.kvals
kvals key
作用:返回key中所有value
Order-set 有序集合
有序集合和散列一样,都用于存储键值对:有序集合的键被称为成员(member),每个成员都是各不相同的;而有序集合的值则被称为分值(socre),分值必须为浮点数。
有序集合是redis里面唯一一个既可以根据成员访问元素(这一点和散列一样),又可以根据分值以及分值的排列顺序来访问元素的结构。
1.zadd
zadd key score1 value1 score2 value2... 作用:创建并添加元素
例子: zadd class 12 lily 13 lucy 18 lie
2.zrem
zrem key value1 value2...
作用:删除集合钟的元素
3.zremrangebyscore
zremrangebyscore key min max
作用:按照socre来删除元素,删除score在[min,max]之间的元素
4.zremrangebyrank
zremrangebyrank key start end
作用:按排名删除元素,删除名次[start,end]之间的元素
5.zrank
zrank key member
作用:查询member的排名(升序0名开始)
6.zrevrank
zrevrank key memeber
作用:查询member的排名(降序0名开始)
7.zrange
zrange key start stop [withscores]
作用:把集合排序后,返回名次[start stop]的元素
默认是升序排列
withscores:是把score也打印出来
8.zrevrange
zrevrange key start stop
作用:把集合降序排序取名字[start,stop]之间的元素
9.zrangbyscore
zrangbyscore key min max [withscores] [limit offset N]
作用:集合(升序)排序后取socre在[min,max]内的元素
并跳过offset个,取出N个
10.zcard
zcard key
作用:返回元素个数
11.zcount
zcount key min max
作用:返回[min,max]区间内元素的数量
12.zinterstore
zinterstore destination numkeys key1 [key2...] [WEIGHTS weight [weight ...]] [aggreagte sum|min|max] 求key1,key2的交集,key1,key2的权重分别是weight1,weight2 聚合方法:sum、min、max 聚合的结果保存在dest集合内 Numkeys:计算交集的key的个数 weights,aggregate如何理解? 如果有交集,交集元素又有score,score怎么处理? zadd lisi 3 cat 5 dog 6 horse zadd wang 2 cat 4 dog 8 horse 1 donkey zinterstore result 2 lisi wang zrange result 0 -1 [withscores] zinterstore result 2 lisi wang aggregate min zrange result 0 -1 [withscores] zinterstore result 2 lisi wang aggregate max zrange result 0 -1 [withscores]