Redis实战管理
  DcpJeOZ6VzTX 2023年11月02日 55 0
Redis的数据类型
  • string 字符串类型
  • Hash 哈希类型(最接近数据库表的类型)
  • List 列表类型 (消息队列)
  • Set 集合类型
  • Sorted set 有序集合

redis通用操作

# 查看key类型
用法:TYPE key名字
	127.0.0.1:6379> TYPE name
	string

# 查询所有key(危险,不要给别人看见)
127.0.0.1:6379> keys *
1) "age"
2) "name"

# 查询指定key是否存在(别人想看时只给看指定key)
用法:KEYS 指定key名
	127.0.0.1:6379> keys name
	1) "name"

# redis库的操作(redis总共16个库:0-15)
127.0.0.1:6379> SELECT 1
OK
(想退出这个库就直接quit然后重新登录)

# 修改key名字
用法:RENAME 旧名字 新名字
	127.0.0.1:6379> KEYS *
	1) "age"
	2) "name"
	127.0.0.1:6379> RENAME age ages
	OK
	127.0.0.1:6379> KEYS *
	1) "ages"
	2) "name"

# 删除key
用法:del key名
	127.0.0.1:6379> KEYS *
	1) "ages"
	2) "name"
	127.0.0.1:6379> del ages
	(integer) 1
	127.0.0.1:6379> KEYS *
	1) "name"
	127.0.0.1:6379> 
	
# 设置生存时间(秒)
用法:EXPIRE key名 倒计时
	127.0.0.1:6379> EXPIRE name 20
	(integer) 1
	127.0.0.1:6379> TTL name
	(integer) 15
	127.0.0.1:6379> TTL name
	
# 查看指定key的倒计时
用法:TTL key名
	127.0.0.1:6379> EXPIRE name 20
	(integer) 1
	127.0.0.1:6379> TTL name
	(integer) 15
	127.0.0.1:6379> TTL name

# 查看key的生存周期/key是否存在/key倒计时
-#key不存在或生存周期到期(-2)
	127.0.0.1:6379> KEYS *
	1) "name"
	127.0.0.1:6379> TTL age
	(integer) -2

-#key存在,且无生存周期(-1)
	127.0.0.1:6379> KEYS *
	1) "name"
	127.0.0.1:6379> TTL name
	(integer) -1

# 设置生存时间(毫秒)
用法:PEXPIRE key名 毫秒(1000开始)
	127.0.0.1:6379> PEXPIRE age 9000
	(integer) 1
	127.0.0.1:6379> TTL age
	(integer) 7

# 取消生存时间
用法:PERSIST key名字
	127.0.0.1:6379> ttl fensi
	(integer) 94
	127.0.0.1:6379> PERSIST fensi
	(integer) 1
	127.0.0.1:6379> keys *
	1) "fensi"

string(字符串)类型操作

应用场景:微博数、粉丝数、直播平台

# 创建一个key
用法:set key名字 key的值
	127.0.0.1:6379> set age 18
	OK
	127.0.0.1:6379> KEYS *
	1) "age"

# 创建一个key并设置生存周期
用法:SET hhh 22 ex 100
	127.0.0.1:6379> SET hhh 22 ex 100
	OK
	127.0.0.1:6379> TTL hhh
	(integer) 95
	127.0.0.1:6379> keys hhh
	1) "hhh"

# 创建多个key
用法:MSET key名字1 值1 key名字2 值2 key名字3 值3
	127.0.0.1:6379> MSET wls 18 lls 22 gender m
	OK
	127.0.0.1:6379> keys 8
	(empty array)
	127.0.0.1:6379> keys *
	1)"gender"
	2) "wls"
	3) "lls"

# 先查看某个key然后修改key值,key不存在就创建
用法:GETSET key名字 key值
-#不存在则创建
	127.0.0.1:6379> keys *
	1) "name"
	127.0.0.1:6379> GETSET new zzz
	(nil)
	127.0.0.1:6379> keys *
	1) "new"
	2) "name"
-#存在则修改
	127.0.0.1:6379> keys *
	1) "new"
	2) "name"
	127.0.0.1:6379> get name
	"wxk"
	127.0.0.1:6379> GETSET name whh
	"wxk"
	127.0.0.1:6379> get name
	"whh"

# 计数器(递增,默认步长为1)
用法:incr key名字(这个key可存在可不存在,不存在就会创建)
	127.0.0.1:6379> incr fensi
	(integer) 1
	127.0.0.1:6379> incr fensi
	(integer) 2
	127.0.0.1:6379> incr fensi
	(integer) 3
	127.0.0.1:6379> keys *
	1) "new"
	2) "fensi"
	3) "name"
	127.0.0.1:6379> get fensi
	"3"

# 计数器(递减,默认步长为1)
用法:decr key名字(这个key一定是存在的)
	127.0.0.1:6379> decr fensi
	(integer) 102
	127.0.0.1:6379> decr fensi
	(integer) 101
	127.0.0.1:6379> decr fensi
	(integer) 100
	127.0.0.1:6379> get fensi
	"100"

# 指定步长递增
用法:incrby key名字 数字(步长)
	127.0.0.1:6379> incrby fensi 100
	(integer) 103
	127.0.0.1:6379> get fensi
	"103"

# 指定步长递减
用法:decrby key名字 数字(步长)
	127.0.0.1:6379> get fensi
	"100"
	127.0.0.1:6379> decrby fensi 50
	(integer) 50
	127.0.0.1:6379> get fensi
	"50"

# 计数器,浮点型(递增)(新版本有点bug,太大不好使)
用法:incrbyfloat key名字 浮点型数字(带小数点的)
	127.0.0.1:6379> get fensi
	"50"
	127.0.0.1:6379> incrbyfloat fensi 0.3
	"50.3"
	127.0.0.1:6379> incrbyfloat fensi 0.3
	"50.6"
	127.0.0.1:6379> incrbyfloat fensi 0.3
	"50.9"
# 删除key
用法:del key名字
	127.0.0.1:6379> keys *
	1) "new"
	2) "fensi"
	3) "name"
	127.0.0.1:6379> del new
	(integer) 1
	127.0.0.1:6379> keys *
	1) "fensi"
	2) "name"

----------贼拉危险!!!----------------------
# 删除所有key
用法:flushdb
# 删除所有库
用法:flushall
# 修改key值
用法:set key名字 新值
	127.0.0.1:6379> get fensi
	"51.2"
	127.0.0.1:6379> set fensi 100
	OK
	127.0.0.1:6379> get fensi
	"100"

# 根据下标修改字符串内容(下标位置从0开始算)
用法:setrange key名字 下标位置 新值
	127.0.0.1:6379> get name
	"whhabcdzfg"
	127.0.0.1:6379> setrange name 1 q
	(integer) 10
	127.0.0.1:6379> get name
	"wqhabcdzfg"

# 查看从某位开始到最后的key值
用法:GETRANGE key名字 某个下标开始位 -1
	127.0.0.1:6379> get name
	"wqhabcdzfg"
	127.0.0.1:6379> GETRANGE name 3 -1
	"abcdzfg"

# 字符串追加拼接
用法:append key名字 新加内容
	127.0.0.1:6379> get name
	"whh"
	127.0.0.1:6379> append name abcdzfg
	(integer) 10
	127.0.0.1:6379> get name
	"whhabcdzfg"
# 查看key的值
用法:get key名字
	127.0.0.1:6379> get name
	"wqhabcdzfg"

# 查看多个key的值
用法:mget key名字1 key名字2
	127.0.0.1:6379> mget fensi name
	1) "115"
	2) "wqhabcdzfg"

# 查看字符串长度
用法:strlen key名字
	127.0.0.1:6379> mget fensi name
	1) "115"
	2) "wqhabcdzfg"
	127.0.0.1:6379> strlen fensi
	(integer) 3
	127.0.0.1:6379> strlen name
	(integer) 10

# 查看字符串类型
用法:type key名字
	127.0.0.1:6379> type name
	string

# 查看生存时间(秒)
用法:ttl key名字
	127.0.0.1:6379> EXPIRE name 60
	(integer) 1
	127.0.0.1:6379> TTL name
	(integer) 54

# 查看生存时间(毫秒)
用法:ptll key名字
	127.0.0.1:6379> EXPIRE name 60
	(integer) 1
	127.0.0.1:6379> pttl name
	(integer) 44004

hash(字典)数据类型

hash字典类型

应用场景:存储部分变更的数据,如用户信息,商品信息等。 最接近表结构的一种类型。

# 创建hash类型数据
用法:hset stu_1 name wxk age 18 gender m
	127.0.0.1:6379> hset stu_1 name wxk age 18 gender f
	(integer) 3
	127.0.0.1:6379> hgetall stu_1
	1) "name"
	2) "wxk"
	3) "age"
	4) "18"
	5) "gender"
	6) "f"
# 删除整个key
用法:del key名字
	127.0.0.1:6379> del fensi
	(integer) 1

# 删除key里面的某个字段
用法:hdel key名字 字段名
	127.0.0.1:6379> hdel stu_2 name
	(integer) 1
	127.0.0.1:6379> hgetall stu_2
	1) "age"
	2) "22"
	3) "gender"
	4) "m"
# 修改,如果没有相同字段则追加,有则修改
用法:hset key名字 字段名字 值
-#没有相同字段,追加
	127.0.0.1:6379> hgetall stu_2
	1) "age"
	2) "22"
	3) "gender"
	4) "m"
	127.0.0.1:6379> hset stu_2 name whh
	(integer) 1
	127.0.0.1:6379> hgetall stu_2
	1) "age"
	2) "22"
	3) "gender"
	4) "m"
	5) "name"
	6) "whh"
-#有相同字段,修改
	127.0.0.1:6379> hgetall stu_2
	1) "age"
	2) "22"
	3) "gender"
	4) "m"
	5) "name"
	6) "whh"
	127.0.0.1:6379> hset stu_2 age 100
	(integer) 0
	127.0.0.1:6379> hgetall stu_2
	1) "age"
	2) "100"
	3) "gender"
	4) "m"
	5) "name"
	6) "whh"
	
# hash计算类型
用法:hincrby key名字 字段名 步长(指定步长)
	127.0.0.1:6379> hincrby myhash fensi 1
	(integer) 1
	127.0.0.1:6379> hincrby myhash fensi 1
	(integer) 2
	127.0.0.1:6379> hincrby myhash fensi 1
	(integer) 3
	127.0.0.1:6379> hget myhash fensi
	"3"
# 查看单个字段
用法:hget key名字 字段名
	127.0.0.1:6379> hget stu_1 name
	"wxk"

# 查看多个指定字段
用法:hmget key名字1 字段名1 字段名2  
	127.0.0.1:6379> hmget stu_1 name age
	1) "wxk"
	2) "18"
	
# 查看所有字段
用法:hgetall key名字
	127.0.0.1:6379> hgetall stu_1
	1) "name"
	2) "wxk"
	3) "age"
	4) "18"
	5) "gender"
	6) "f"

list(列表)类型

应用场景: 消息队列系统 比如sina微博:在redis中我们的最新微博ID使用了常驻缓存,这是一直更新的。 但是做了限制不能超过5000个ID,因此获取ID的函数会一只询问redis。 系统不会像传统方式那样“刷新”缓存,redis实例中的信息永远是一致的。 SQL数据库(或是硬盘上的其他类型数据)只是在用户需要获取“很远”的数据时才会被触发,而主页或第一个评论页是不会麻烦到硬盘上的数据库了。

队列:先进的先出(扶梯)

127.0.0.1:6379> lpush duilie 1 2 3 4 5
(integer) 5
127.0.0.1:6379> lrange duilie 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
127.0.0.1:6379> rpop duilie
"1"
127.0.0.1:6379> lrange duilie 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
-#lpush是往左插入(向上),1是第一个写入的所以rpop时先被消费

堆栈:先进的后出(直梯)

127.0.0.1:6379> lpush duizhan a b c d e
(integer) 5
127.0.0.1:6379> lrange duizhan 0 -1
1) "e"
2) "d"
3) "c"
4) "b"
5) "a"
127.0.0.1:6379> lpop duizhan 
"e"
127.0.0.1:6379> lrange duizhan 0 -1
1) "d"
2) "c"
3) "b"
4) "a"
-#lpush是往左插入(向上),e是最后一个写入的所以lpop时先被消费
# 从左边开始创建数据(生产者)(向上写入)
用法:lpush key名字 值1 值2 值3
	127.0.0.1:6379> lpush test1 1 2 3
	(integer) 3
	127.0.0.1:6379> lrange test1 0 -1
	1) "3"
	2) "2"
	3) "1"

# 从右边开始创建数据(生产者)(向下写入)
用法:rpush key名字 值4 值5 值6
	127.0.0.1:6379> rpush test2 4 5 6
	(integer) 3
	127.0.0.1:6379> lrange test2 0 -1
	1) "4"
	2) "5"
	3) "6"
	
# 写入队列(该key必须存在)
用法:lpushx key名字 值1 值2 值3
-#key不存在(没用)
	127.0.0.1:6379> lpushx tomcat 1 2 3
	(integer) 0
	127.0.0.1:6379> lrange tomcat 0 -1
	(empty array)
-#key存在
	127.0.0.1:6379> lpush test1 a b c
	(integer) 6
	127.0.0.1:6379> lrange test1 0 -1
	1) "c"
	2) "b"
	3) "a"
	4) "3"
	5) "2"
	6) "1"
	
# 插入数据到指定位置(这个位置是某个具体的值)
-# 在某个值前面插入
用法:linsert key名字 before 某个值 插入值
	127.0.0.1:6379> linsert test2 before 4 whh
	(integer) 4
	127.0.0.1:6379> lrange test2 0 -1
	1) "whh"
	2) "4"
	3) "5"
	4) "6"
-#在某个值后面插入
	127.0.0.1:6379> linsert test2 after 6 aaa
	(integer) 5
	127.0.0.1:6379> lrange test2 0 -1
	1) "whh"
	2) "4"
	3) "5"
	4) "6"
	5) "aaa"
	
# 从指定列表的右边消费数据,写入后边列表的左边
用法:rpoplpush key名字1 key名字2
	127.0.0.1:6379> lrange test2 0 -1
	1) "whh"
	2) "4"
	3) "5"
	4) "6"
	5) "aaa"
	127.0.0.1:6379> lrange test1 0 -1
	1) "c"
	2) "b"
	3) "a"
	4) "3"
	5) "whh"
	6) "2"
	7) "1"
	127.0.0.1:6379> rpoplpush test1 test2(从test1右边消费数据,然后从test2的左边写入)
	"1"
	127.0.0.1:6379> lrange test2 0 -1
	1) "1"
	2) "whh"
	3) "4"
	4) "5"
	5) "6"
	6) "aaa"
	127.0.0.1:6379> lrange test1 0 -1
	1) "c"
	2) "b"
	3) "a"
	4) "3"
	5) "whh"
	6) "2"
# 从左边删除两个2(即便还有更多的重复值2,也只会删除从左边开始删除两个)
用法:lrem key名字 2 值2
	127.0.0.1:6379> lrange test1 0 -1
	1) "2"
	2) "c"
	3) "b"
	4) "a"
	5) "3"
	6) "whh"
	7) "2"
	127.0.0.1:6379> lrem test1 2 2
	(integer) 2
	127.0.0.1:6379> lrange test1 0 -1
	1) "c"
	2) "b"
	3) "a"
	4) "3"
	5) "whh"
	
# 按照索引(下标从0开始)漂流数据,其他删除
用法:ltrim key名字 指定开始索引 指定结束索引
	127.0.0.1:6379> lrange test1 0 -1
	1) "e"
	2) "d"
	3) "c"
	4) "b"
	5) "a"
	6) "3"
	7) "whh"
	127.0.0.1:6379> ltrim test1 0 -4
	OK
	127.0.0.1:6379> lrange test1 0 -1
	1) "e"
	2) "d"
	3) "c"
	4) "b"
	--------------------------
	127.0.0.1:6379> lrange test1 0 -1
	1) "e"
	2) "d"
	3) "c"
	4) "b"
	127.0.0.1:6379> ltrim test1 2 3
	OK
	127.0.0.1:6379> lrange test1 0 -1
	1) "c"
	2) "b"
# 按照索引修改数据
用法:lset key名字 索引 新值
	127.0.0.1:6379> lrange test1 0 -1
	1) "c"
	2) "b"
	127.0.0.1:6379> lset test1 1 a(把索引位置1的b改成a)
	OK
	127.0.0.1:6379> lrange test1 0 -1
	1) "c"
	2) "a"
# 从左边取出数据
用法:lpop key名字
127.0.0.1:6379> lrange test1 0 -1
1) "c"
2) "a"
127.0.0.1:6379> lpop test1
"c"
127.0.0.1:6379> lrange test1 0 -1
1) "a"

# 从右边取出数据
用法:rpop key值
	127.0.0.1:6379> lrange test2 0 -1
	1) "1"
	2) "whh"
	3) "4"
	4) "5"
	5) "6"
	6) "aaa"
	127.0.0.1:6379> rpop test2
	"aaa"
	127.0.0.1:6379> lrange test2 0 -1
	1) "1"
	2) "whh"
	3) "4"
	4) "5"
	5) "6"
	
# 查看指定索引(从0开始)
用法:lindex key名字 索引
	127.0.0.1:6379> lrange test2 0 -1
	1) "1"
	2) "whh"
	3) "4"
	4) "5"
	5) "6"
	127.0.0.1:6379> lindex test2 1
	"whh"
	
# 指定范围查看
用法:lrange key名字 指定开始索引 指定结束索引
	127.0.0.1:6379> lrange test2 0 -1 (查看全部内容)
	1) "1"
	2) "whh"
	3) "4"
	4) "5"
	5) "6"
	127.0.0.1:6379> lrange test2 1 3(查看部分)
	1) "whh"
	2) "4"
	3) "5"
	
# 查看列表长度(索引个数)
用法:llen key名字
	127.0.0.1:6379> lrange test1 0 -1
	1) "a"
	127.0.0.1:6379> llen test1
	(integer) 1
	127.0.0.1:6379> lrange test2 0 -1
	1) "1"
	2) "whh"
	3) "4"
	4) "5"
	5) "6"
	127.0.0.1:6379> llen test2
	(integer) 5

Set集合数据类型

应用场景: 在微博应用中,可以将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合。Redis还 为集合提供了求交集、并集、差集等操作,可以非常方便的实现如共同关注、共同喜好、二度好友等 功能,对上面的所有集合操作,你还可以使用不同的命令选择将结果返回给客户端还是存集到一个新 的集合中 。

# 1.创建集合
用法:sadd key名字 值1 值2 值3 值4
	127.0.0.1:6379> sadd whh_stu wxk lsx cy ld
	(integer) 4
	127.0.0.1:6379> sadd whh2_stu aaa lsx bbb wxk 
	(integer) 4
# 随机删除一个值
用法:spop key名字
	127.0.0.1:6379> SMEMBERS whh_stu
	1) "wxk"
	2) "lsx"
	3) "cy"
	127.0.0.1:6379> spop whh_stu
	"lsx"
	127.0.0.1:6379> SMEMBERS whh_stu
	1) "wxk"
	2) "cy"
	127.0.0.1:
# 1.将key1里的某个值移到key2
用法:smove key名字1 key名字2 指定值
	127.0.0.1:6379> SMEMBERS whh_stu
	1) "wxk"
	2) "lsx"
	3) "cy"
	4) "ld"
	127.0.0.1:6379> SMEMBERS whh2_stu
	1) "aaa"
	2) "lsx"
	3) "bbb"
	4) "wxk"
	127.0.0.1:6379> SMOVE whh_stu whh2_stu ld(将whh_stu里的ld移到whh2_stu里)
	(integer) 1
	127.0.0.1:6379> SMEMBERS whh_stu
	1) "wxk"
	2) "lsx"
	3) "cy"
	127.0.0.1:6379> SMEMBERS whh2_stu
	1) "aaa"
	2) "lsx"
	3) "bbb"
	4) "wxk"
	5) "ld"
# 1.查看集合中的所有值
用法:smembers key名字
	127.0.0.1:6379> SMEMBERS whh_stu
	1) "wxk"
	2) "lsx"
	3) "cy"
	
# 2.前面集合有后面集合没有的值
用法:sdiff key名字1 key名字2
	127.0.0.1:6379> SMEMBERS whh_stu
	1) "wxk"
	2) "cy"
	127.0.0.1:6379> SMEMBERS whh2_stu
	1) "aaa"
	2) "lsx"
	3) "bbb"
	4) "wxk"
	5) "ld"
	127.0.0.1:6379> SMEMBERS whh_stu
	1) "wxk"
	2) "cy"
	127.0.0.1:6379> sdiff whh_stu whh2_stu
	1) "cy"
	127.0.0.1:6379> sdiff whh2_stu whh_stu
	1) "aaa"
	2) "lsx"
	3) "bbb"
	4) "ld"
	
# 3.交集(共同好友)
用法:sinter key名字1 key名字2
	127.0.0.1:6379> SMEMBERS whh_stu
	1) "wxk"
	2) "cy"
	127.0.0.1:6379> SMEMBERS whh2_stu
	1) "aaa"
	2) "lsx"
	3) "bbb"
	4) "wxk"
	5) "ld"
	127.0.0.1:6379> sinter whh_stu whh2_stu
	1) "wxk"
	
# 4.并集
用法:sunion key名字1 key名字2
	127.0.0.1:6379> SMEMBERS whh_stu
	1) "wxk"
	2) "cy"
	127.0.0.1:6379> SMEMBERS whh2_stu
	1) "aaa"
	2) "lsx"
	3) "bbb"
	4) "wxk"
	5) "ld"
	127.0.0.1:6379> sunion whh_stu whh2_stu
	1) "wxk"
	2) "cy"
	3) "aaa"
	4) "lsx"
	5) "bbb"
	6) "ld"
	
# 5.判断一个成员是否在一个集合里
用法:sismembers key名字1 指定值(成员)
	127.0.0.1:6379> SISMEMBER whh_stu ld
	(integer) 0   (不在)
	127.0.0.1:6379> SISMEMBER whh2_stu ld
	(integer) 1    (在)

#6.查看集合的成员数量
用法:SCARD key名字
	127.0.0.1:6379> SCARD whh_stu
	(integer) 2
	127.0.0.1:6379> SCARD whh2_stu
	(integer) 5

# 7.随机抽取一名幸运观众
用法:SRANDMEMBER key名字
	127.0.0.1:6379> SRANDMEMBER whh2_stu
	"ld"
	
# 8.随机抽取n名幸运观众
用法:SRANDMEMBER key名字 n
	127.0.0.1:6379> SRANDMEMBER whh2_stu 2
	1) "bbb"
	2) "ld"
	
# 9.取出第一个集合有第二个集合没有的数据放到第三个集合里
用法:SDIFFSTORE key名字3 key名字1 key名字2
	127.0.0.1:6379> SMEMBERS whh_stu
	1) "wxk"
	2) "cy"
	127.0.0.1:6379> SMEMBERS whh2_stu
	1) "aaa"
	2) "lsx"
	3) "bbb"
	4) "wxk"
	5) "ld"
	127.0.0.1:6379> SDIFFSTORE disanzhe whh_stu whh2_stu
	(integer) 1
	127.0.0.1:6379> SMEMBERS disanzhe
	1) "cy"
# 10.取出交集放到第三个集合里
用法:SINTERSTORE key名字3(交集集合) key名字1 key名字2
	127.0.0.1:6379> SMEMBERS whh_stu
	1) "wxk"
	2) "cy"
	127.0.0.1:6379> SMEMBERS whh2_stu
	1) "aaa"
	2) "lsx"
	3) "bbb"
	4) "wxk"
	5) "ld"
	127.0.0.1:6379> SINTERSTORE jiaoji whh_stu whh2_stu
	(integer) 1
	127.0.0.1:6379> SMEMBERS jiaoji 
	1) "wxk"
# 11.取出并集放到第三个集合里
用法:SUNIONSTORE key名字3(并集集合) key名字1 key名字2
	127.0.0.1:6379> SMEMBERS whh_stu
	1) "wxk"
	2) "cy"
	127.0.0.1:6379> SMEMBERS whh2_stu
	1) "aaa"
	2) "lsx"
	3) "bbb"
	4) "wxk"
	5) "ld"
	127.0.0.1:6379> SUNIONSTORE bingji whh_stu whh2_stu
	(integer) 6
	127.0.0.1:6379> SMEMBERS bingji
	1) "wxk"
	2) "cy"
	3) "aaa"
	4) "lsx"
	5) "bbb"
	6) "ld"

Sorted-Set有序集合

应用场景: 排行榜应用,取TOP N操作。 这个需求与上面需求的不同之处在于,前面操作以时间为权重,这个是以某个条件为权重,比如按顶 的次数排序,这时候就需要我们的sorted set出马了,将你要排序的值设置成sorted set的score,将具 体的数据设置成相应的value,每次只需要执行一条ZADD命令即可。

# 创建有序集合
用法:zadd key名字 值1 成员1 值2 成员2 值3 成员3
语法:ZADD key score member [score member ...]
	127.0.0.1:6379> zadd chengji 62 whh 86 lsx 92 ld 101 cy
	(integer) 4
# 1.删除指定分数范围内的成员
用法:ZREMRANGEBYSCORE ket名字 指定最小分数 指定最大分数
	127.0.0.1:6379> ZREMRANGEBYSCORE chengji 60 90
	(integer) 2
	
# 2.根据索引删除成员
用法:zremrangebyrank key名字 开始索引 结束索引
	127.0.0.1:6379> zrange chengji 0 -1
	1) "ld"
	2) "cy"
	127.0.0.1:6379>  zremrangebyrank chengji 0 0
	(integer) 1
	127.0.0.1:6379> zrange chengji 0 -1
	1) "cy"
# 1.查看所有成员
用法:zrange key值 0 -1
	127.0.0.1:6379> zrange chengji 0 -1
	1) "whh"
	2) "lsx"
	3) "ld"
	4) "cy"
# 2.查看所有成员和他们的分数(默认正序)
用法:zrange key值 0 -1 withscores
	127.0.0.1:6379> ZRANGE chengji 0 -1 withscores
	1) "whh"
	2) "62"
	3) "lsx"
	4) "86"
	5) "ld"
	6) "92"
	7) "cy"
	8) "101"
	
# 3.查看所有成员和他们的分数(倒序)(rev:reverse倒序,反转)
用法:zrange key值 0 -1 rev withscores
	127.0.0.1:6379> zrange chengji 0 -1 rev withscores
	1) "cy"
	2) "101"
	3) "ld"
	4) "92"
	5) "lsx"
	6) "86"
	7) "whh"
	8) "62"
	
# 4.查看指定成员的索引(默认从0开始)
用法:zrank key名字 成员
	127.0.0.1:6379> zrank chengji lsx
	(integer) 1
	127.0.0.1:6379> zrange chengji 0 -1
	1) "whh"
	2) "lsx"
	3) "ld"
	4) "cy"
	------------带上值--------
	127.0.0.1:6379> zrank chengji lsx withscore
	1) (integer) 1
	2) "86"

# 5.查看有序集合的成员数量
用法:ZCARD key名字
	127.0.0.1:6379> ZCARD chengji
	(integer) 4
	
# 6.查看在指定范围分数的成员个数
用法:ZCOUNT key名字 指定开始范围 指定结束范围
	127.0.0.1:6379> ZCOUNT chengji 60 90
	(integer) 2
	
# 7.查看指定成员分数
用法:zscore key名字 成员
	127.0.0.1:6379> zscore chengji lsx
	"86"
	
# 8.查看在指定范围分数的成员名字
用法:zrangebyscore key名字 指定开始范围 指定结束范围
	127.0.0.1:6379> zrangebyscore chengji 60 90
	1) "whh"
	2) "lsx"
	
# 9.按照偏移量取出指定数量的成员(从全部成员里的指定开始下标取出n位成员)
用法:zrangebyscore key名字 -inf +inf limit 指定开始索引 n位成员
	127.0.0.1:6379> zrangebyscore chengji -inf +inf limit 0 3(从全部成员里的下标0开始取出3位成员)
	1) "whh"
	2) "lsx"
	3) "ld"
	127.0.0.1:6379> zrangebyscore chengji -inf +inf limit 1 2(从全部成员里的下标1开始取出3位成员)
	1) "lsx"
	2) "ld"
	
# 10.指定索引倒序排序
用法:zrevrange key名字 指定开始索引 指定结束索引 withscores
	 127.0.0.1:6379> zrevrange chengji 0 -1 withscores
	 1) "cy"
	 2) "101"
	 3) "ccc"
	 4) "92"
	 5) "bbb"
	 6) "80"
	 7) "aaa"
	 8) "70"
	 9) "wxk"
 	10) "60"

# 11.指定分数范围倒序排序
用法:zrevrangebyscore key名字 指定范围最大值 指定范围最小值
	127.0.0.1:6379> zrevrangebyscore chengji 99 70
	1) "ccc"
	2) "bbb"
	3) "aaa"

# 12.指定分数倒序排序,看top10
用法:zrevrangebyscore key名字 指定范围最大值 指定范围最小值 withscores limit 0 10
	127.0.0.1:6379> zrevrangebyscore chengji 99 60 withscores limit 0 10
	1) "ccc"
	2) "92"
	3) "bbb"
	4) "80"
	5) "aaa"
	6) "70"
	7) "wxk"
	8) "60"

拓展

Redis实战管理_Redis的数据类型

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  DcpJeOZ6VzTX   2023年11月02日   56   0   0 Redis的数据类型