目录
Key的相关命令
Redis是key-value数据库。key使用字符串存储,但是key中不能出现空格或者换行符“\n”(仅限于key)。尽量使用较短的key文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
exists key
测试指定key是否存在,返回1表示存在,返回0表示不存在文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
del key1 key2 ...keyN
删除指定key,返回删除key的数目,返回0表示给定key都不存在文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
type key
返回给定key的value类型。返回none表示不存在key,String为字符类型,List为链表类型...文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
keys pattern
返回匹配指定模式的所有key文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
expire key seconds
设置给定key的过期时间文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
randomkey
返回从当前数据库中随机选择的一个key,如果当前数据库是空的,返回空串文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
rename oldkey newkey
重命名key,如果newkey存在,将被覆盖,返回1表示成功,返回0表示失败。若失败,则可能是oldkey不存在或者newkey相同文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
renamenx oldkey newkey
同上,如果newkey存在返回失败
ttl key 返回设置过期时间key的剩余秒数, -1表示key不存在或者没有设置过期时间文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
move key db-index
将key从当前数据库移动到指定数据库。返回1成功,返回0表示key不存在或者已经在指定数据库中文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
Redis数据类型
Redis支持的数据类型:String、List、Set、Sorted Set、Hash等。文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
String
String类型支持的命令
set key value
设置key对应String类型的值,返回1表示成功,返回0表示失败文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
setnx key value
如果key不存在,设置key对应String类型的值。如果key已经存在,返回0文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
get key
获取key对应的String值,如果key不存在返回nil文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
getset key value
先获取key的值,再设置key的值,如果key不存在返回nil文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
mget key1 key2 ... keyN
一次获取多个key的值,如果对应key不存在,则对应返回nil文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
mset key1 value1 ... keyN valueN
一次设置多个key的值,成功返回1,表示所有的值都设置;失败返回0,表示没有任何值被设置文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
msetnx key1 value1 ... keyN valueN
一次设置多个key的值,但不会覆盖已经存在的key文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
incr key
向key对应的值加1,并返回新的值。注意incr一个不是int的value会返回错误
incr一个不存在的key,则设置key值为1文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
decr key
向key对应的值做减1,decr一个不存在的key,则设置key值为-1文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
incrby key integer
向key对应的值加上一个指定整数integer,key不存在时会设置key,并认为原来的value是0文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
decrby key integer
向key对应的值减去一个指定整数integer。decrby完全是为了可读性,通过incrby一个负值实现同样效果,反之一样 可以用String类型缓存一些静态文件,如图片文件、CSS文件等。同时String支持incr操作,可以用作统计计算,如统计网站访问次数、博客访问次数等。文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
例:文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
redis 127.0.0.1:6379> set s1 v1 //设置s1的值为 v1,类似MySQL的replace操作
OK
redis 127.0.0.1:6379> get s1 //获取s1的值
"v1"
redis 127.0.0.1:6379> setnx s1 vv1 //设置s1的值为vv1,s1如果存在不更新
(integer) 0
redis 127.0.0.1:6379> get s1
"v1"
redis 127.0.0.1:6379> set s1 vvv1
OK
redis 127.0.0.1:6379> get s1
"vvv1"
//获取key(s1)的值,并重新设置s1的值为v1。返回重新设置前的key的值,如果key不存在则返回(nil)
redis 127.0.0.1:6379> getset s1 v1
"vvv1"
redis 127.0.0.1:6379> get s1
"v1"
redis 127.0.0.1:6379> getset s6 s6
(nil)
redis 127.0.0.1:6379> get s6
"s6"
redis 127.0.0.1:6379> set s2 v2
OK
redis 127.0.0.1:6379> set s3 v3
OK
redis 127.0.0.1:6379> mget s1 s7 s2 s3 //获取s1、s2、s3的值,如果某个key不存在则返回(nil)
1) "v1"
2) (nil)
3) "v2"
3) "v3"
redis 127.0.0.1:6379> mset s1 vv1 s4 v4 //同时设置s1、s4的值,设置值类似replace操作
OK
redis 127.0.0.1:6379> mget s1 s2 s3
1) "vv1" //设置之前是 "v1"
2) "v2"
3) "v3"
redis 127.0.0.1:6379> incr s1 //key对应的value的类型必须为integer,否则报错
(error) ERR value is not an integer or out of range
redis 127.0.0.1:6379> incr s5
(integer) 1
redis 127.0.0.1:6379> get s5
"1"
redis 127.0.0.1:6379> incr s5 //对s5加1,返回新的s5的值
(integer) 2
redis 127.0.0.1:6379> get s5
"2"
redis 127.0.0.1:6379> decr s1 //key对应的value的类型必须为integer,否则报错
(error) ERR value is not an integer or out of range
redis 127.0.0.1:6379> decr s5 //对s5减1,返回新的s5的值
(integer) 1
redis 127.0.0.1:6379> get s5
"1"
redis 127.0.0.1:6379> incrby s5 2 //对s5加2,返回新的s5的值
(integer) 3
redis 127.0.0.1:6379> get s5
"3"
redis 127.0.0.1:6379> incrby s1 2
(error) ERR value is not an integer or out of range
redis 127.0.0.1:6379> decrby s5 -2 //对s5减-2,返回新的s5的值
(integer) 5
redis 127.0.0.1:6379> get s5
"5"
List类型
List数据类型指key对应的是一个双向链表结构
文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
List类型支持的命令
lpush key string
向key对应List头部添加一个字符串元素,成功返回1,失败返回0文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
rpush key string
向key对应List尾部添加一个字符串元素,成功返回1,失败返回0文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
llen key
返回key对应List的长度,如果key不存在返回0,如果key对应类型不是List返回错误文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
lrange key start end
返回指定区间内(start~end)的元素,下标从0开始,负值表示从链表尾部开始计算,-1表示倒数第一个元素,
key不存在返回空列表文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
ltrim key start end
截取List指定区间(start~end)元素,成功返回1,key或者下标不存在返回错误文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
lset key index value
设置List中指定下标的元素值,成功返回1,key或者下标不存在返回错误文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
lrem key count value
从List头部(count正数)或尾部(count负数)删除一定数量(count绝对值)的匹配value的元素,返回删除的元素数量。
count为0时删除全部文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
lpop key
从List头部删除并返回删除元素。如果key对应List不存在或者是空返回nil,如果key对应值不是List返回错误文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
rpop key
从List尾部删除并返回删除元素文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
blpop key1...keyN timeout
从左到右扫描key1...keyN,对第一个非空List进行lpop操作并返回。如果所有List都是空或不存在,阻塞timeout秒,
timeout为0表示一直阻塞。阻塞时,如果有其他client对key1...keyN中任意一个key进行push操作,阻塞解除并返回。
如果超时发生,则返回nil文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
brpop key1...keyN timeout
功能与blpop相似,不同的是blpop从头部删除,而brpop从尾部删除
可以用List类型存放微博中的”我关注的列表“,或者论坛中所有回帖ID。使用List还可以实现消息队列功能,减轻数据库的压力。文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
例:
redis 127.0.0.1:6379> lpush list1 1 //从list1头部插入一个元素,value为1,返回list1的长度
(integer) 1
redis 127.0.0.1:6379> lpush list1 2 //从list1头部插入一个元素,value为2,返回list1的长度,此时list1为: [2] [1]
(integer) 2
redis 127.0.0.1:6379> llen list1 //返回list1的长度
(integer) 2
redis 127.0.0.1:6379> lrange list1 0 -1 //返回list1 从头到尾所有的元素
1) "2"
2) "1"
redis 127.0.0.1:6379> rpush list1 3 //从list1尾部插入一个元素,value为3, 返回list1的长度,此时list1为: [2] [1] [3]
(integer) 3
redis 127.0.0.1:6379> lrange list1 0 -1
1) "2"
2) "1"
3) "3"
redis 127.0.0.1:6379> lrange list1 1 6 //列出list1的元素,从下标为1开始,到下标为6结束
1) "1"
2) "3"
redis 127.0.0.1:6379> rpush list1 4 //从list1尾部插入一个元素,value为4
(integer) 4
redis 127.0.0.1:6379> rpush list1 5 //从list1尾部插入一个元素,value为5
(integer) 5
redis 127.0.0.1:6379> rpush list1 6 //从list1尾部插入一个元素,value为6,此时list1为: [2] [1] [3] [4] [5] [6]
(integer) 6
redis 127.0.0.1:6379> ltrim list1 0 1 //截取list1的元素,只保留下标0~1的元素,此时list1为: [2] [1]
OK
redis 127.0.0.1:6379> lrange list1 0 -1
1) "2"
2) "1"
redis 127.0.0.1:6379> rpush list1 3
(integer) 3
redis 127.0.0.1:6379> rpush list1 4
(integer) 4
redis 127.0.0.1:6379> rpush list1 5 //此时list1为: [2] [1] [3] [4] [5]
(integer) 5
redis 127.0.0.1:6379> lset list1 0 22 //设置List1中下标为0的值为22,此时list1为:[22] [1] [3] [4] [5]
redis 127.0.0.1:6379> lset ss 0 1 //设置ss中下标为0的值为1,因为key(22)不存在,报错
(error) ERR no such key
redis 127.0.0.1:6379> lrange list1 0 -1
1) "22"
2) "1"
3) "3"
4) "4"
5) "5"
redis 127.0.0.1:6379> lset list1 5 6 //设置ss中下标为0的值为1,因为key(list1)的下标 5 不存在,报错
(error) ERR index out of range
例2:
redis 127.0.0.1:6379> lrange list1 0 -1 //从头到尾列出list1的所有元素
1) "22"
2) "1"
3) "3"
4) "4"
5) "55"
6) "3"
7) "3"
8) "3"
9) "22"
10) "3"
11) "4"
redis 127.0.0.1:6379> lrem list1 0 1 //删除list1中所有值为1的元素,此时list1为:[22] [3] [4] [55] [3] [3] [3] [22] [22] [3] [4]
(integer) 1
redis 127.0.0.1:6379> lrem list1 -1 3 //从尾部开始删除list1中的1个值为3的元素,返回删除元素的数量
(integer) 1
redis 127.0.0.1:6379> lrange list1 0 -1
1) "22"
2) "3"
3) "4"
4) "55"
5) "3"
6) "3"
7) "3"
8) "22"
9) "4"
redis 127.0.0.1:6379> lrem list1 1 3 //从头部开始删除list1中的1个值为3的元素,返回删除元素的数量
(integer) 1
redis 127.0.0.1:6379> lrange list1 0 -1
1) "22"
2) "4"
3) "55"
4) "3"
5) "3"
6) "3"
7) "22"
8) "4"
redis 127.0.0.1:6379> lpop list1 //从list1头部删除一个元素,并返回该元素的value值,此时list1为:[4] [55] [3] [3] [3] [22] [4]
"22"
redis 127.0.0.1:6379> rpop list1 //从list1尾部删除一个元素,并返回该元素的值
"4"
redis 127.0.0.1:6379> rpop list1 //从list1尾部删除一个元素,并返回该元素的值,此时list1为:[4] [55] [3] [3] [3]
"22"
client1 >> redis 127.0.0.1:6379> blpop list f1 f2 0 //从左到右扫描f1、f2,返回对第一个非空List进行lpop操作并返回。因为f1、f2都不存在,所以一直阻塞。
client2 >> redis 127.0.0.1:6379> lpush f1 1 //此时有一个客户端push进了一个元素
(integer) 1
client1 >> redis 127.0.0.1:6379> blpop list f1 f2 0 //该阻塞的进程结束阻塞,并进行lpop操作
1) "l1"
2) "1"
(40.47s)
redis 127.0.0.1:6379> lrange list1 0 -1
1) "4"
2) "55"
3) "3"
4) "3"
5) "3"
redis 127.0.0.1:6379> lpush list2 1
(integer) 1
redis 127.0.0.1:6379> lpush list2 2
(integer) 2
redis 127.0.0.1:6379> lpush list2 3 //此时list2为: [3] [2] [1]
(integer) 3
redis 127.0.0.1:6379> blpop list1 list2 0 //从左到右扫描list1、list2,对第一个非空List进行lpop操作并返回。即删除并返回list1的第一个元素
1) "list1"
2) "4"
redis 127.0.0.1:6379> lrange list1 0 -1
1) "55"
2) "3"
3) "3"
4) "3"
redis 127.0.0.1:6379> brpop list1 list2 0 //从左到右依次扫描list1、list2,对第一个非空List进行rpop操作。即删除并返回list1的最后一个元素
1) "list1"
2) "3"
redis 127.0.0.1:6379> lrange list1 0 -1
1) "55"
2) "3"
3) "3"
redis 127.0.0.1:6379> lrange list2 0 -1
1) "3"
2) "2"
3) "1"
redis 127.0.0.1:6379> lrange list1 0 -1
1) "55"
2) "3"
3) "3"
redis 127.0.0.1:6379> ltrim list1 3 6 //截取并保留list1的下标(3~6)的部分值
OK
redis 127.0.0.1:6379> lrange list1 0 -1
(empty list or set)
例3:
redis 127.0.0.1:6379> lrange list1 0 -1
1) "22"
2) "3"
3) "4"
4) "5"
5) "3"
6) "3"
7) "3"
8) "22"
9) "3"
10) "4"
redis 127.0.0.1:6379> lrem list1 -2 3 //从尾部开始删除list1中的2个值为3的元素,返回删除元素的数量
(integer) 2
redis 127.0.0.1:6379> lrange list1 0 -1
1) "22"
2) "3"
3) "4"
4) "5"
5) "3"
6) "3"
7) "22"
8) "4"
Set类型
Set数据类型的优点是快速查找元素是否存在,用于记录一些不能重复的数据。例如,在网站注册账号时用户名不能重复,使用Set记录注册用户,如果注册的用户名已经存在于Set中,则拒绝此用户登录。
文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
Set类型支持的命令
sadd key number
添加一个String元素到key对应的set集合中,成功返回1,如果元素在集合中返回0,
key对应的Set不存在返回错误文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
srem key number
从key对应set中移除给定元素,成功返回1,如果member在集合中不存在或者key不存在返回0,
如果key对应的不是set类型的值返回错误文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
spop key
删除并返回key对应set中随机的一个元素,如果set是空或者key对应的set不存在返回nil文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
srandmember key
同spop,随机取set中的一个元素,但是不删除元素文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
smove srckey dstkey member
从srckey对应set中移除member并添加到dstkey对应set中,整个操作是原子的。成功返回1,如果member在
srckey总不存在返回0,如果key对应的值不是set类型,返回错误文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
scard key
返回set的元素个数,如果set是空或者key不存在返回0文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
sismember key member
判断member是否在set中,存在返回1,不存在或者key对应的set集合不存在返回0文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
sinter key1 key2...keyN
返回所有给定key的交集文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
sinterstore dstkey key1 key2...keyN
同sinter,同时将交集存到dstkey对应set集合中文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
sunion key1 key2...keyN
返回所有给定key的并集文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
sunionstore dstkey key1 key2 ...keyN
同sunion,同时把并集保存到dstkey对应的set集合中文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
sdiff key1 key2...keyN
返回所有给定key的差集文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
sdiffstore dstkey key1 key2...keyN
同sdiff,同时把差集保存到dstkey对应的set集合中文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
smembers key
返回key对应set的所有元素,结果是无序的文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
Set类型通常用于记录做过某些事情。例如在某些投票系统中,每个用户一天只能投票一次那么可以使用Set来记录某个用户的投票情况,只需要以日期作为Set的key,则将用户ID作为number即可。要查看某一个用户今天是否投过票,只需以今天的日期作为key去查询此用户ID是否存在。文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
例:
redis 127.0.0.1:6379> sadd set1 1 //向集合set1中添加一个元素,值为1。类似MySQL的Insert操作
(integer) 1
redis 127.0.0.1:6379> sadd set1 2
(integer) 1
redis 127.0.0.1:6379> sadd set1 1 //向集合set1中添加一个元素,值为1。因为1已经在集合set1中,所以返回0
(integer) 0
redis 127.0.0.1:6379> sadd set1 3
(integer) 1
redis 127.0.0.1:6379> sadd set1 4
(integer) 1
redis 127.0.0.1:6379> smembers set1 //返回set1集合中的所有元素
1) "1"
2) "2"
3) "3"
4) "4"
redis 127.0.0.1:6379> srandmember set1 //随机返回set1集合中的一个元素
"1"
redis 127.0.0.1:6379> srandmember set1
"4"
redis 127.0.0.1:6379> srem set1 ss //移除set1集合中的元素ss,因为该元素不存在所以返回0
(integer) 0
redis 127.0.0.1:6379> srem set3 ss //移除set1集合中的元素ss,因为该key(set3)不存在所以返回0
(integer) 0
redis 127.0.0.1:6379> srem set1 3 //移除set1集合中的元素3,返回1
(integer) 1
redis 127.0.0.1:6379> spop set1 //删除并返回set1对应集合中随机的一个元素,如果set是空或者key对应的set不存在返回nil
"2"
redis 127.0.0.1:6379> spop set1
"1"
redis 127.0.0.1:6379> spop set1
"4"
redis 127.0.0.1:6379> spop set1
(nil)
redis 127.0.0.1:6379> spop set4
(nil)
redis 127.0.0.1:6379> sadd set1 1
(integer) 1
redis 127.0.0.1:6379> sadd set1 4
(integer) 1
redis 127.0.0.1:6379> smembers set1
1) "1"
2) "4"
redis 127.0.0.1:6379> smembers set2
1) "2"
redis 127.0.0.1:6379> smove set1 set2 1 //从set1移除值为1的元素并添加到set2中,返回1。
(integer) 1
redis 127.0.0.1:6379> smove set3 set2 1 //从set1移除值为1的元素并添加到set2中,因为set3不存在所以返回0
(integer) 0
redis 127.0.0.1:6379> smove set1 set2 1 //从set1移除值为1的元素并添加到set2中,因为set1中不存在值为1的元素,所以返回0
(integer) 0
redis 127.0.0.1:6379> smembers set2
1) "1"
2) "2"
redis 127.0.0.1:6379> smembers set1
1) "4"
redis 127.0.0.1:6379> scard set2 //返回set2集合的元素个数
(integer) 2
redis 127.0.0.1:6379> scard set3 //返回set2集合的元素个数,set3不存在,所以返回0
(integer) 0
redis 127.0.0.1:6379> smembers set1
1) "4"
redis 127.0.0.1:6379> sismember set1 2 //判断值为2的元素是否在集合set1中,不存在返回0
(integer) 0
redis 127.0.0.1:6379> sismember set1 4 //判断值为4的元素 是否在set中,存在返回1,存在返回1
(integer) 1
redis 127.0.0.1:6379> sinter set1 set2 //返回所有给定key的交集
(empty list or set)
redis 127.0.0.1:6379> sadd set1 1
(integer) 1
redis 127.0.0.1:6379> sinter set1 set2 //返回所有给定key的交集
1) "1"
redis 127.0.0.1:6379> smembers set3
(empty list or set)
redis 127.0.0.1:6379> sinterstore set3 set1 set2 //返回所有给定key(set1、set2)的交集,并将结果添加到set3中,覆盖添加
(integer) 1
redis 127.0.0.1:6379> smembers set3
1) "1"
redis 127.0.0.1:6379> sunion set1 //返回所有给定key的并集
1) "1"
2) "4"
redis 127.0.0.1:6379> sunion set1 set2 //返回所有给定key的并集
1) "1"
2) "2"
3) "4"
redis 127.0.0.1:6379> sunionstore set3 set1 set2 //返回所有给定key的并集,并将结果添加到set3中,覆盖添加
(integer) 3
redis 127.0.0.1:6379> smembers set3
1) "1"
2) "2"
3) "4"
redis 127.0.0.1:6379> sdiff set1 set2 //返回所有给定key的差集
1) "4"
redis 127.0.0.1:6379> sdiffstore set3 set1 set2 //返回所有给定key的差集,并将结果添加到set3中,覆盖添加
(integer) 1
redis 127.0.0.1:6379> smembers set3
1) "4"
Sorted Set类型
Sorted Set类型与Set类型相似,都是String类型元素的集合,不同的是Sorted Set属于有序集合,而Sorted Set通过一个double类型的整数score进行排序。
Set能做的事Sorte Set也可以做。而Sorted Set还可以完成一些Set不能做的事情,如使用Sorted Set构建一个具有优先级的队列,这也是List类型不能实现的。文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
Sorted Set类型支持的命令
zadd key score member
添加元素member到集合,元素在集合中存在则更新对应score文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
zrem key member
删除指定元素,1表示成功,如果元素不存在则返回0文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
zincrby key incr member
增加对应member的score值,并且重新排序,返回更新后的score文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
zrank key member
返回指定元素在集合中的排名(下标),集合中元素按score从小到大排序的文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
zrevrank key member
同上,但是集合中元素按score从大到小排序文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
zrange key start end
从集合中指定区间的元素,返回结果按score顺序排列文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
zrevrange key start end
同上,返回结果按score逆序排列文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
zrangebyscore key min max
返回集合中score在给定区间的元素文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
zcount key min max
返回集合中score在给定区间的数量文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
zcard key
返回集合中元素的个数文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
zscore key element
返回给定元素对应的score文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
zremrangebyrank key min max
删除集合中排名在给定区间的元素文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
zremrangebyscore key min max
删除集合中score在给定区间的元素文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
Sorted Set类型在Web应用中非常有用。如排行榜应用中按”顶贴“次数排序,方法是:将排序的值设置成Sorted Set的score值,将具体数据设置成相应的value,用户每次按”顶贴“按钮时,只需执行zadd命令修改score值。文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
例:
redis 127.0.0.1:6379> zadd ss1 1 11 //添加元素11到集合ss1,按score指定下标
(integer) 1
redis 127.0.0.1:6379> zadd ss1 1 22
(integer) 1
redis 127.0.0.1:6379> zadd ss1 1 11 //添加元素11到集合ss1,因为11已存在所以只是更新11的score值
(integer) 0
redis 127.0.0.1:6379> zrange ss1 0 -1
1) "11"
2) "22"
redis 127.0.0.1:6379> zrem ss1 11 //删除ss1中值为11的元素
(integer) 1
redis 127.0.0.1:6379> zrange ss1 0 -1 //返回ss1 从头到尾所有的元素,按照score排列
1) "22"
redis 127.0.0.1:6379> zrevrange ss1 0 -1
1) "22"
redis 127.0.0.1:6379> zadd ss1 1 11
(integer) 1
redis 127.0.0.1:6379> zrevrange ss1 0 -1 //返回ss1 从头到尾所有的元素,按照score逆序排列
1) "22"
2) "11"
redis 127.0.0.1:6379> zrank ss1 11 //返回值为11的元素在Sorted Set中的下标,集合中元素按score从小到大排序的
(integer) 0
redis 127.0.0.1:6379> zrank ss1 2 //返回值为2的元素在Sorted Set中的下标,不存在返回(nil)
(nil)
redis 127.0.0.1:6379> zrank ss1 22 //返回值为22的元素在Sorted Set中的下标
(integer) 1
redis 127.0.0.1:6379> zincrby ss1 1 11 //增加值为11的元素的score值,并且重新排序,返回更新后的score,此时值为11的元素的score为2
"2"
redis 127.0.0.1:6379> zincrby ss1 2 11
"4"
redis 127.0.0.1:6379> zrange ss1 0 -1 //返回ss1 从头到尾所有的元素,按照score排列
1) "22"
2) "11"
redis 127.0.0.1:6379> zrevrange ss1 0 -1 //返回ss1从头到尾所有的元素,按照score逆序排列
1) "11"
2) "22"
redis 127.0.0.1:6379> zrevrank ss1 11 //返回值为11的元素在Sorted Set中的下标,集合中元素按score从大到小排序的
(integer) 0
redis 127.0.0.1:6379> zrevrank ss1 22
(integer) 1
redis 127.0.0.1:6379> zrange ss1 0 -1
1) "22"
2) "11"
redis 127.0.0.1:6379> zrevrange ss1 0 -1
1) "11"
2) "22"
redis 127.0.0.1:6379> zrank ss1 11
(integer) 1
redis 127.0.0.1:6379> zrevrank ss1 11
(integer) 0
redis 127.0.0.1:6379> zrangebyscore ss1 0 0 //返回集合中score在给定区间的元素,即列出ss1中score值在0 ~ 0之间的元素
(empty list or set)
redis 127.0.0.1:6379> zrangebyscore ss1 0 1
1) "22"
redis 127.0.0.1:6379> zrangebyscore ss1 1 1
1) "22"
redis 127.0.0.1:6379> zrangebyscore ss1 1 4 //返回集合中score在给定区间的元素,即列出ss1中score值在 1 ~ 4 之间的元素
1) "22"
2) "11"
redis 127.0.0.1:6379> zrangebyscore ss1 1 3
1) "22"
redis 127.0.0.1:6379> zcount ss1 0 0 //返回集合中score在给定区间的数量,即列出ss1中元素score值0 ~ 0之间的元素的数量
(integer) 0
redis 127.0.0.1:6379> zcount ss1 0 1
(integer) 1
redis 127.0.0.1:6379> zcount ss1 0 2
(integer) 1
redis 127.0.0.1:6379> zcount ss1 0 4
(integer) 2
redis 127.0.0.1:6379> zcard ss1 //返回集合ss1中元素的个数
(integer) 2
redis 127.0.0.1:6379> zscore ss1 11 //返回给定元素11对应的score
"4"
redis 127.0.0.1:6379> zscore ss1 2 //返回给定元素2对应的score,不存在则返回(nil)
(nil)
redis 127.0.0.1:6379> zscore ss1 22
"1"
redis 127.0.0.1:6379> zremrangebyrank ss1 0 1 //删除集合中排名在给定区间的元素,即删除ss1中下标为0~1之间的元素,返回删除的个数
(integer) 2
redis 127.0.0.1:6379> zrange ss1 0 -1
(empty list or set)
redis 127.0.0.1:6379> zadd ss1 1 11
(integer) 1
redis 127.0.0.1:6379> zadd ss1 2 33
(integer) 1
redis 127.0.0.1:6379> zadd ss1 4 22
(integer) 1
redis 127.0.0.1:6379> zadd ss1 3 44
(integer) 1
redis 127.0.0.1:6379> zrange ss1 0 -1
1) "11"
2) "33"
3) "44"
4) "22"
redis 127.0.0.1:6379> zremrangebyrank ss1 0 1 //删除集合中排名在给定区间的元素,即删除ss1中下标为0~1之间的元素,返回删除的个数
(integer) 2
redis 127.0.0.1:6379> zrange ss1 0 -1
1) "44"
2) "22"
redis 127.0.0.1:6379> zadd ss1 2 55
(integer) 1
redis 127.0.0.1:6379> zadd ss1 1 66
(integer) 1
redis 127.0.0.1:6379> zrange ss1 0 -1
1) "66"
2) "55"
3) "44"
4) "22"
redis 127.0.0.1:6379> zremrangebyrank ss1 1 2
(integer) 2
redis 127.0.0.1:6379> zrange ss1 0 -1
1) "66"
2) "22"
redis 127.0.0.1:6379> zscore ss1 66
"1"
redis 127.0.0.1:6379> zscore ss1 22
"4"
redis 127.0.0.1:6379> zrange ss1 0 -1
1) "66"
2) "22"
redis 127.0.0.1:6379> zadd ss1 2 77
(integer) 1
redis 127.0.0.1:6379> zadd ss1 3 88
(integer) 1
redis 127.0.0.1:6379> zrange ss1 0 -1
1) "66"
2) "77"
3) "88"
4) "22"
redis 127.0.0.1:6379> zremrangebyscore ss1 0 1 //删除ss1中元素score值在0~1之间的元素的数量,返回删除元素的个数
(integer) 1
redis 127.0.0.1:6379> zrange ss1 0 -1
1) "77"
2) "88"
3) "22"
redis 127.0.0.1:6379> zremrangebyscore ss1 1 3 //删除集合中score在给定区间的元素,即删除ss1中元素score值在1~3之间的元素的数量
(integer) 2
redis 127.0.0.1:6379> zrange ss1 0 -1
1) "22"
Hash类型
Hash类型适合应用于存储对象,例如用户信息对象。把用户ID做为key,可把用户保存到Hash类型中。文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
Hash类型支持的命令
hset key field value
设置key对应的Hash对象中指定域的值。如果key对应的Hash对象不存在,将创建此Hash对象。
如果指定的域已经存在,其值将被重置文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
hget key field
返回与field域关联的值,如果该域不存在或者key对应的Hash对象不存在,返回值nil文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
hmget key field1...fieldN
返回存储在key对应的Hash对象中各个指定域相关关联的值。对于在Hash对象中不存在的域,返回值为nil文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
hmset key field1 value1 ... fieldN valueN
设置存储在key对应的Hash对象中指定域的值。该命令会复写Hash已经存在的域。如果key对应的Hash对象
不存在,将创建此对象文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
hincrby key field integer
将存储在key对应的Hash对象中field域相关联的值加上由integer指定的值。如果key对应的Hash对象不存在,
则创建此Hash对象。如果field域不存在或者具有一个不能表示为整型的字符串值,在执行该操作前设置为0文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
hexists key field
查看指定field域是否已经存在文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
hdel key field
删除指定的field域,返回1。如果指定的域或者key不存在,返回0文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
hlen key
返回key对应的Hash对象中field数,如果key不存在,返回0文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
hkeys key
返回key对应的Hash对象中所有field名称文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
hvals key
返回key对应的Hash对象中所有值文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
hgetall key
返回key对应的Hash对象中所有域和相关联的值。在返回值中,每个域名称后面跟着相关联的值
例:文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
redis 127.0.0.1:6379> hset h1 name tang //设置h1的“name”域的值为“tang”,返回1
(integer) 1
redis 127.0.0.1:6379> hset h1 age 24 //设置h1的“age”域的值为“24”,返回1
(integer) 1
redis 127.0.0.1:6379> hset h1 sex male //设置h1的“sex”域的值为“male”,返回1
(integer) 1
redis 127.0.0.1:6379> hget h1 name //返回h1的“name”域的值
"tang"
redis 127.0.0.1:6379> hget h1 age
"24"
redis 127.0.0.1:6379> hset h1 name tie //设置h1的“name”域的值为“tie”,因为h1的“name”域已经存在,所以其值被重新复制,并返回0
(integer) 0
redis 127.0.0.1:6379> hget h1 name
"tie"
redis 127.0.0.1:6379> hmget h1 name age sex //返回h1的“name”、“age”、“sex”域的值
1) "tie"
2) "24"
3) "male"
redis 127.0.0.1:6379> hmset h2 name tang age 24 sex male //设置h2的“name”、“age”、“sex”域的值,分别为“tang”、“24”、“male”
OK
redis 127.0.0.1:6379> hmget h2 name age sex
1) "tang"
2) "24"
3) "male"
redis 127.0.0.1:6379> hincrby h1 age 2 //将存储在h1对应的Hash对象中“age”域相关联的值加上2,返回新的“age”域的值
(integer) 26
redis 127.0.0.1:6379> hincrby h1 name 2
(error) ERR hash value is not an integer
redis 127.0.0.1:6379> hget h1 age
"26"
redis 127.0.0.1:6379> hexists h1 age //查看存储在h1对应的Hash对象中指定的"age"域是否已经存在
(integer) 1
redis 127.0.0.1:6379> hexists h3 age //查看存储在h3对应的Hash对象中指定的"age"域是否已经存在,h3不存在,返回0
(integer) 0
redis 127.0.0.1:6379> hexists h1 age1 //查看存储在h1对应的Hash对象中指定的"age1"域是否已经存在,age1不存在,返回0
(integer) 0
redis 127.0.0.1:6379> hdel h1 age //删除h1中指定的"age"域,返回1
(integer) 1
redis 127.0.0.1:6379> hdel h1 age //删除h1中指定的"age"域,age域不存在,返回0
(integer) 0
redis 127.0.0.1:6379> hget h1 age
(nil)
redis 127.0.0.1:6379> hlen h1 //返回h1对应的Hash对象中field数
(integer) 2
redis 127.0.0.1:6379> hkeys h1 //返回h1对应的Hash对象中所有field名称
1) "name"
2) "sex"
redis 127.0.0.1:6379> hvals h1 //返回h1对应的Hash对象中所有值
2) "male"
redis 127.0.0.1:6379> hgetall h1 //返回h1对应的Hash对象中所有域和相关联的值.一个域、一个值的返回,即“name”为域,“tie”为值
1) "name"
2) "tie"
3) "sex"
4) "male"
文章源自编程技术分享-https://mervyn.life/ebd12a5f.html
评论