Redis 常用操作

目录

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
weinxin
我的微信公众号
微信扫一扫
mervyn
批量删除Redis key 数据库

批量删除Redis key

项目开发过程中,有时会用到 redis ,很尴尬的时候经常会忘记给 redis key 设置过期时间,这个时候需要我们通过命令行来操作进行删除。需要使用到如下语句: redis-cli -h 127....
MySQL一个字段同时满足多个条件的查询语句 MySQL

MySQL一个字段同时满足多个条件的查询语句

当我们在使用mysql的时候经常会一对多的关系进行建表。而在实际使用的过程中经常会有一些需要查询子表的某个字段同时满足多个条件的数据。本文就是基于此类场景来介绍如何通过sql语句实现该业务需求。 以订...
批量删除Redis key 数据库

批量删除Redis key

项目开发过程中,有时会用到 redis ,很尴尬的时候经常会忘记给 redis key 设置过期时间,这个时候需要我们通过命令行来操作进行删除。需要使用到如下语句: redis-cli -h 127....
从 mysql 用户的角度使用 Elasticsearch 数据库

从 mysql 用户的角度使用 Elasticsearch

本文主要讲述初次接触ES时,如何以使用MySQL的方式来应用 Elasticsearch 从而达到快速入门的目的。 以下例子均基于 Elasticsearch 6.0 例: order_test 表结...
Elasticsearch-PHP 遇到的坑 PHP

Elasticsearch-PHP 遇到的坑

大数据量分页查询报错 问题详情 在用elasticsearch-php分页查询时,分页几次后报错,错误内容如下: { "error":{ "root_cause"...
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: