上一篇我们聊了Redis的String类型,我们都知道Redis有五大类型,除了String,还剩list、hash、set、sorted_set。同时,Redis命令的首字母很多都是和类型直接相关的,比如list中的 l ,一部分表示是list类型(除了表示left的 l )、hash的 h、set的 s,那为啥sorted_set就直接是 z 了呢,很简单,s 不是已经表示set了吗,Redis就直接取26个字母的最后一个 z来表示sorted_set(是不是简单粗暴)。
一、list
Redis中的 list 和Java中的list类似,元素允许重复,并且是有序的,这个顺序表示里面元素的顺序和你元素插入的顺序相同。
1、lpush key value [value…]:在一个key前面插入一个或多个值
2、rpush key value [value…]:给一个key追加一个或多个值
3、lpop key:移除并得到key的第一个元素
4、rpop key:移除并得到key的最后一个元素
5、lrange key start stop:得到key start到stop之间的元素
6、lindex key index:得到key下标index处的值
7、lset key index value:把key下标为index的值设置为value
8、lrem key count value:从key删除count个value;count值为正数从前往后删,负数从后往前删,count为0删除所有value。
9、linsert key before|after pivot value:在key中值为pivot的前或后插入value
10、llen key:得到key的长度
11、blpop key [key …] timeout:移除并得到key第一个元素,阻塞等待timeout直到有一个元素。timeout为0则会一直等待。
12、ltrim key start stop:删除key中start和stop两端的元素
通过不同命令的组合使用,我们可以使用list完成如下的功能:
lpush和lpop,rpush和rpop:同向命令,功能类似于栈
lpush和rpop,rpush和lpop:反向命令,功能类似于队列
lindex和lset:可以实现数组的功能
blpop:阻塞,单播队列(FIFO)
二、hash
Redis中的 hash 类型表示value也为键值对。
1、hset key field value:给key中field设置值为value
2、hmset key field value [field value …]:给key中多个字段设置值
3、hget key field:得到key中field字段的值
4、hmget key field [field …]:得到key中多个filed字段的值
5、hkeys key:得到key中所有的字段
6、hvals key:得到key中所有字段对应的值
7、hgetall key:得到key中所有的字段及对应的值
8、hincrbyfloat key field increment:给key中field字段加increment(也可以做减法)
三、set
Redis中的 set 类型也可以类比于Java中的set类型,表示里面的元素是去重的,无序的。
1、sadd key member [member …]:增加一个或多个值到set中
2、smembers key:得到set中所有的值(客户端调用此方法比较消耗主机网卡IO)
3、srem key member [member …]:删除set中的一个或多个值
4、sinter key [key …]:取多个set的交集
5、sinterstore destination key [key …]:取多个set的交集,结果存储于destination
6、sunion key [key …]:取多个set的并集
7、sunionstore destination key [key …]:取多个set的并集,结果存储于destination
8、sdiff key [key …]:取多个set的差集,以左边集合为主
9、sdiffstore destination key [key …]:取多个set的差集,结果存储于destination
10、srandmember key [count]:从key中随机取count个值,count为正表示取出结果不能重复,count为负表示取出结果可以重复(count默认为1)
11、spop key [count]:从key中随机删除count个值,返回删除的值(count默认为1)
从set的特点,以及srandmember 或spop的功能,可以想到一个应用场景是:抽奖。
四、sorted_set
我们知道list中元素重复,并且有序;set中元素是去重,并且无序。而这个sorted_set有点像是二者的结合体,它表示元素去重、但有序。但是这个顺序是表示里面的元素已经排好序的意思,和list中有序表示的概念是有区别的。
1、zadd key score member[score member …]:增加一个或多个值到member中,如果存在则更新分数
2、zrange key start stop[withscores]:正序返回start到stop之间的值
3、zrevrange key start stop [withscores]:按分数从高到低返回start到stop之间的值
4、zrangebyscore key min max [withscores]:按分数返回min到max之间的值
5、zscore key member:得到member的分数
6、zrank key member:返回member在sorted_set中的索引值
7、zincrby key increment member:给member的score值加increment
8、zunionstore destination numkeys key [key …] [weights weight] [aggregate sum|min|max]:多个sorted_set求并集,结果赋值给destination
从sorted_set的特点可以想到有一个比较合适的应用场景就是各种各样的排行榜,比如歌曲排行榜。
以上仅列举了部分比较常见的各个类型的命令,关于更多的命令可以使用help @xxx ,查看xxx 组的所有帮助信息。