一、简介
Redis 是一个开放源代码( BSD 许可)的内存中数据结构存储,用作数据库,缓存和消息代理。它支持数据结构,例如字符串,哈希,列表,集合,带范围查询的排序集合,位图,超日志,带有半径查询和流的地理空间索引。Redis 具有内置的复制,Lua 脚本,LRU 驱逐,事务和不同级别的磁盘持久性,并通过 Redis Sentinel 和 Redis Cluster 自动分区提供了高可用性。
1.1 String(字符串)
String 是 redis 最基本的类型,你可以理解成 Memcached 一模一样的类型,一个 key 对应一个 value。String 类型是二进制安全的,意思是 redis 的 string 可以包含任何数据,比如 jpg 图片或者序列化的对象。String 类型是 redis 最基本的数据类型,一个 redis 中字符串 value 最多可以是 512M。
1.2 Hash(哈希)
Redis hash 是一个键值对集合。Redis hash 是一个 String 类型的 field 和 value 的映射表, hash 特别适合用于存储对象。类似 Java 里面的 Map<String,Object>
1.3 List(列表)
Redis 列表是简单的字符串列表,按照插入顺序排序,你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
1.4 Set(集合)
Redis 的 Set 是 String 类型的无序集合,它是通过 HashTable 实现的 !
1.5 Zset(有序集合)
Redis zset 和 set 一样,也是 String 类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个 double 类型的分数。Redis 正是通过分数来为集合中的成员进行从小到大的排序,zset 的成员是唯一的,但是分数(Score)却可以重复。
二、Redis key 通用操作
2.1 查看所有的 key
# keys * 查看所有的 key
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> set name xhf
OK
127.0.0.1:6379> keys *
1) "name"
2.2 判断 key 是否存在
# exists key 的名字,判断某个 key 是否存在
127.0.0.1:6379> exists name
(integer) 1
127.0.0.1:6379> exists name1
(integer) 0
2.3 移动 key 到指定数据库
# move key db ,将 key 移动到指定的库中
127.0.0.1:6379> move name 1
(integer) 1
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> keys *
1) "name"
2.4 设置 key 过期时间
# expire key 秒钟:为指定的 key 设置存活时间,当 key 过期时(生存时间为0),它会被自动删除
127.0.0.1:6379[1]> expire name 10
(integer) 1
2.5 查看 key 过期时间
# ttl key :查看当前 key 还有多少秒过期,-1 表示永不过期,-2 表示已过期
127.0.0.1:6379[1]> ttl name
(integer) 3
127.0.0.1:6379[1]> ttl name
(integer) 2
127.0.0.1:6379[1]> ttl name
(integer) 0
127.0.0.1:6379[1]> ttl name
(integer) -2
127.0.0.1:6379[1]> keys *
(empty array)
2.6 查看 key 类型
# type key:查看你的 key 是什么类型
127.0.0.1:6379[1]> set name xhf
OK
127.0.0.1:6379[1]> type name
string
127.0.0.1:6379[1]>
2.7 删除 key
127.0.0.1:6379> keys *
1) "name2"
2) "name"
3) "name1"
127.0.0.1:6379> del name1 name2
(integer) 2
127.0.0.1:6379> keys *
1) "name"
2.8 key 的结构
Redis 的 key 允许有多个单词形成层级结构,多个单词之间用 ':' 隔开,格式如下:
项目名:业务名:类型:id
这个格式并非固定,也可以根据自己的需求来删除或添加词条。
三、字符串 String
String 数据结构是简单的 key-value 类型,value 其实不仅可以是 String,也可以是数字。
常规 key-value 缓存应用:常规计数:微博数,粉丝数等。
3.1 设置 key 值
127.0.0.1:6379[1]> set key1 value1
OK
3.2 获取 key 值
127.0.0.1:6379[1]> get key1
"value1"
3.3 删除 key 值
127.0.0.1:6379[1]> del key1
(integer) 1
127.0.0.1:6379[1]> keys *
(empty array)
3.4 查看所有的 key 值
127.0.0.1:6379[1]> keys *
(empty array)
3.5 判断 key 是否存在
127.0.0.1:6379[1]> exists key1
(integer) 0
3.6 给 value 值添加元素
# 对不存在的 key 进行 APPEND ,等同于 SET key1 "hello"
127.0.0.1:6379[1]> append key1 "hello"
(integer) 5 # 字符长度
# 对已存在的字符串进行 APPEND
127.0.0.1:6379[1]> append key1 "-world"
(integer) 11 # 长度从 5 个字符增加到 10 个字符
127.0.0.1:6379[1]> get key1
"hello-world"
3.7 获取 value 长度
127.0.0.1:6379[1]> strlen key1
(integer) 11
3.8 给 vlaue 值加1
# incr、decr 一定要是数字才能进行加减,+1 和 -1。
127.0.0.1:6379[1]> set views 0
OK
127.0.0.1:6379[1]> incr views
(integer) 1
127.0.0.1:6379[1]> incr views
(integer) 2
3.9 给 value 值减1
# incr、decr 一定要是数字才能进行加减,+1 和 -1。
127.0.0.1:6379[1]> decr views
(integer) 1
3.10 给 vlaue 值加指定数字
# incrby 命令将 key 中储存的数字加上指定的增量值。
127.0.0.1:6379[1]> incrby views 10
(integer) 11
3.11 给 value 值减指定数字
# decrby 命令将 key 中储存的数字减去指定的增量值。
127.0.0.1:6379[1]> decrby views 10
(integer) 1
3.12 获取 value 的指定范围值
127.0.0.1:6379[1]> set key2 abcd123456
OK
# 获得全部的值
127.0.0.1:6379[1]> getrange key2 0 -1
"abcd123456"
# 获取部分字符串的值
127.0.0.1:6379[1]> getrange key2 0 2
"abc"
3.13 设置 value 的指定范围值
# setrange 设置指定区间范围内的值,格式是 setrange key 值 具体值
127.0.0.1:6379[1]> get key2
"abcd123456"
127.0.0.1:6379[1]> setrange key2 1 xx
(integer) 10
127.0.0.1:6379[1]> get key2
"axxd123456"
3.14 创建 key 并设置过期时间
# setex(set with expire):创建一个 key 并设置过期时间
127.0.0.1:6379[1]> setex key3 30 "hello"
OK
127.0.0.1:6379[1]> ttl key3
(integer) 26
127.0.0.1:6379[1]> ttl key3
(integer) 4
127.0.0.1:6379[1]> ttl key3
(integer) -2
3.15 根据是否存在创建 key
# setnx(set if not exist):如果不存在就创建,存在就不创建
127.0.0.1:6379[1]> setnx mykey "redis"
(integer) 1 # 返回 1 ,表示设置成功
127.0.0.1:6379[1]> setnx mykey "mongodb"
(integer) 0 # 返回 0 ,表示设置失败
127.0.0.1:6379[1]> get mykey
"redis"
3.16 设置多个键值对
# mset 命令用于同时设置一个或多个 key-value 对。
127.0.0.1:6379[1]> mset k1 v1 k2 v2 k3 v3 k4 v4
OK
127.0.0.1:6379[1]> keys *
1) "k2"
2) "k3"
3) "k4"
4) "k1"
3.17 获取多个键值对
# megt 命令返回所有(一个或多个)给定 key 的值。如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil 。
127.0.0.1:6379[1]> mget k1 k2 k3 k4
1) "v1"
2) "v2"
3) "v3"
4) "v4"
3.18 设置所有的 key
# msetnx 当所有 key 都成功设置,返回 1 。如果所有给定 key 都设置失败(至少有一个 key 已经存在),那么返回 0 。原子操作
127.0.0.1:6379[1]> msetnx k1 v111 k3 v333
(integer) 0
127.0.0.1:6379[1]> get k1
"v1"
127.0.0.1:6379[1]> get k3
"v3"
3.19 存储对象
# 设置一个 key 为 user:1 对象,值为 json 字符串来保存一个对象
# 这里的 key 是一个巧妙的设计,user:{id}:{filed},如此涉及在 Redis 中是完全可以的
127.0.0.1:6379[1]> mset user:1:name zhangsan user:1:age 23
OK
127.0.0.1:6379[1]> mget user:1:name user:1:age
1) "zhangsan"
2) "23"
3.20 先 get 后 set
# 先 get 后 set
127.0.0.1:6379[1]> getset db mongodb # 没有旧值,返回 nil
(nil)
127.0.0.1:6379[1]> get db
"mongodb"
127.0.0.1:6379[1]> getset db redis # 返回旧值 mongodb
"mongodb"
127.0.0.1:6379[1]> get db
"redis"
四、列表 List
list 就是链表,略有数据结构知识的人都应该能理解其结构。使用 List 结构,我们可以轻松地实现最新消息排行等功能。List 的另一个应用就是消息队列,可以利用 List 的 PUSH 操作,将任务存在 List 中,然后工作线程再用 POP 操作将任务取出进行执行。Redis 还提供了操作 List 中某一段的 api,你可以直接查询,删除 List 中某一段的元素。
Redis 的 list 是每个子元素都是 String 类型的双向链表,可以通过 push 和 pop 操作从列表的头部或者尾部添加或者删除元素,这样 List 即可以作为栈,也可以作为队列。
4.1 插入值到列表头部
127.0.0.1:6379> lpush list one
(integer) 1
127.0.0.1:6379> lpush list two
(integer) 2
127.0.0.1:6379> lpush list three
(integer) 3
127.0.0.1:6379> lpush list four
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "four"
2) "three"
3) "two"
4) "one"
# 一次插入多个值
127.0.0.1:6379> lpush list3 one two three four
(integer) 4
127.0.0.1:6379> lrange list3 0 -1
1) "four"
2) "three"
3) "two"
4) "one"
4.2 插入值到列表尾部
127.0.0.1:6379> rpush list2 one
(integer) 1
127.0.0.1:6379> rpush list2 two
(integer) 2
127.0.0.1:6379> rpush list2 three
(integer) 3
127.0.0.1:6379> rpush list2 four
(integer) 4
127.0.0.1:6379> lrange list2 0 -1
1) "one"
2) "two"
3) "three"
4) "four"
# 一次插入多个值
127.0.0.1:6379> rpush list4 one two three four
(integer) 4
127.0.0.1:6379> lrange list4 0 -1
1) "one"
2) "two"
3) "three"
4) "four"
4.3 返回列表指定区间的元素
# lrange:返回列表中指定区间内的元素,区间以偏移量 START 和 END 指定。
# 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。
# 也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推
127.0.0.1:6379> lrange list2 0 -1
1) "one"
2) "two"
3) "three"
4) "four"
4.4 移除列表第一个元素
# lpop 命令用于移除并返回列表的第一个元素。当列表 key 不存在时,返回 nil 。返回值为移除的元素
127.0.0.1:6379> lpush list one two three four
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "four"
2) "three"
3) "two"
4) "one"
127.0.0.1:6379> lpop list
"four"
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
4.5 移除列表最后一个元素
# rpop 移除列表的最后一个元素,返回值为移除的元素。
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> rpop list
"one"
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
4.6 按照索引获取下标值
# Lindex:按照索引下标获得元素(-1 代表最后一个,0 代表是第一个)
127.0.0.1:6379> lrange list 0 -1
1) "four"
2) "three"
3) "two"
4) "one"
127.0.0.1:6379> lindex list 0
"four"
127.0.0.1:6379> lindex list -1
"one"
4.7 返回列表长度
# llen:用于返回列表的长度
127.0.0.1:6379> lrange list 0 -1
1) "four"
2) "three"
3) "two"
4) "one"
127.0.0.1:6379> llen list
(integer) 4
4.8 移除指定 value 值
# lrem key 根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素。
127.0.0.1:6379> lrange list 0 -1
1) "four"
2) "four"
3) "three"
4) "two"
5) "one"
127.0.0.1:6379> lrem list 1 one
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "four"
2) "four"
3) "three"
4) "two"
127.0.0.1:6379> lrem list 2 four
(integer) 2
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
4.9 修剪列表
# ltrim key:对一个列表进行修剪,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。
127.0.0.1:6379> lrange list 0 -1
1) "four"
2) "three"
3) "two"
4) "one"
127.0.0.1:6379> ltrim list 1 2
OK
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
4.10 移除元素返回新列表
# rpoplpush 移除列表的最后一个元素,并将该元素添加到另一个列表并返回。
127.0.0.1:6379> lrange list 0 -1
1) "four"
2) "three"
3) "two"
4) "one"
127.0.0.1:6379> rpoplpush list newlist
"one"
127.0.0.1:6379> lrange list 0 -1
1) "four"
2) "three"
3) "two"
127.0.0.1:6379> lrange newlist 0 -1
1) "one"
4.11 根据下标更新值
# lset key index value:将列表 key 下标为 index 的元素的值设置为 value
127.0.0.1:6379> exists list
(integer) 0
127.0.0.1:6379> lpush list one
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "one"
127.0.0.1:6379> lset list 0 newone # 根据指定下标更新值
OK
127.0.0.1:6379> lrange list 0 -1
1) "newone"
127.0.0.1:6379> lset list 1 newtwo # index 超出范围报错
(error) ERR index out of range
4.12 列表前后插入值
# linsert key before/after pivot value 用于在列表的元素前或者后插入元素
# 将值 value 插入到列表 key 当中,位于值 pivot 之前或之后
127.0.0.1:6379> lrange list 0 -1
1) "four"
2) "three"
3) "two"
4) "one"
127.0.0.1:6379> linsert list before two two_point_five
(integer) 5
127.0.0.1:6379> lrange list 0 -1
1) "four"
2) "three"
3) "two_point_five"
4) "two"
5) "one"
# 测试之后插入值
127.0.0.1:6379> linsert list after two one_point_five
(integer) 6
127.0.0.1:6379> lrange list 0 -1
1) "four"
2) "three"
3) "two_point_five"
4) "two"
5) "one_point_five"
6) "one"
五、集合 Set
在微博应用中,可以将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合。Redis 还为集合提供了求交集、并集、差集等操作,可以非常方便的实现如共同关注、共同喜好、二度好友等功能,对上面的所有集合操作,你还可以使用不同的命令选择将结果返回给客户端还是存集到一个新的集合中。
5.1 添加元素
# sadd 将一个或多个成员元素加入到集合中,不能重复,重复也添加不进去
127.0.0.1:6379> sadd myset one two three three
(integer) 3
127.0.0.1:6379> smembers myset
1) "one"
2) "two"
3) "three"
5.2 查看元素
# smembers 返回集合中的所有的成员。
127.0.0.1:6379> smembers myset
1) "one"
2) "two"
3) "three"
5.3 判断是否为集合元素
# sismember 命令判断成员元素是否是集合的成员。返回 1是成员,0不是成员
127.0.0.1:6379> sadd myset one two three
(integer) 3
127.0.0.1:6379> sismember myset one
(integer) 1
127.0.0.1:6379> sismember myset four
(integer) 0
5.4 获取元素个数
# scard:获取集合里面的元素个数
127.0.0.1:6379> scard myset
(integer) 3
5.5 移除元素
# srem key value:用于移除集合中的一个或多个成员元素
127.0.0.1:6379> smembers myset
1) "one"
2) "two"
3) "three"
127.0.0.1:6379> srem myset one
(integer) 1
127.0.0.1:6379> smembers myset
1) "two"
2) "three"
5.6 返回一个随机元素
# srandmember key:命令用于返回集合中的一个随机元素。
127.0.0.1:6379> srandmember myset
"three"
127.0.0.1:6379> srandmember myset
"three"
127.0.0.1:6379> srandmember myset
"two"
# 还可以指定返回多个随机元素
127.0.0.1:6379> smembers myset
1) "two"
2) "three"
3) "one"
4) "four"
5) "five"
127.0.0.1:6379> srandmember myset 2
1) "two"
2) "five"
127.0.0.1:6379> srandmember myset 2
1) "three"
2) "one"
5.7 随机移除元素
# spop 随机删除 myset 集合中的元素
127.0.0.1:6379> smembers myset
1) "two"
2) "three"
3) "one"
4) "four"
5) "five"
127.0.0.1:6379> spop myset
"two"
127.0.0.1:6379> spop myset
"five"
127.0.0.1:6379> spop myset
"one"
127.0.0.1:6379> smembers myset
1) "three"
2) "four"
5.8 元素移动到其他集合
# smove SOURCE DESTINATION MEMBER
# 将指定成员 member 元素从 source 集合移动到 destination 集合。
127.0.0.1:6379> sadd myset one two three four
(integer) 4
127.0.0.1:6379> sadd myset2 five six
(integer) 2
127.0.0.1:6379> smove myset myset2 four
(integer) 1
127.0.0.1:6379> smembers myset
1) "one"
2) "two"
3) "three"
127.0.0.1:6379> smembers myset2
1) "five"
2) "six"
3) "four"
5.9 差集
# 差集: sdiff
127.0.0.1:6379> sadd myset a b c d
(integer) 4
127.0.0.1:6379> sadd myset2 c d e f
(integer) 4
127.0.0.1:6379> sdiff myset myset2
1) "a"
2) "b"
5.10 交集
# 交集: sinter
127.0.0.1:6379> sadd myset a b c d
(integer) 4
127.0.0.1:6379> sadd myset2 c d e f
(integer) 4
127.0.0.1:6379> sinter myset myset2
1) "c"
2) "d"
5.11 并集
# 并集: sunion
127.0.0.1:6379> sadd myset a b c d
(integer) 4
127.0.0.1:6379> sadd myset2 c d e f
(integer) 4
127.0.0.1:6379> sunion myset myset2
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
6) "f"
六、哈希 Hash
Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。存储部分变更的数据,如用户信息等。
6.1 单个字段赋值
# hset 命令用于为哈希表中的字段赋值
127.0.0.1:6379> hset myhash field1 zhangsan
(integer) 1
127.0.0.1:6379> hget myhash field1
"zhangsan"
6.2 查看单个字段值
# hget 命令用于查看哈希表中的字段值
127.0.0.1:6379> hget myhash field1
"zhangsan"
6.3 多个字段赋值
# hmset 同时将多个 field-value 对设置到哈希表中。会覆盖哈希表中已存在的字段。
127.0.0.1:6379> hmset myhash field1 hello field2 world
OK
127.0.0.1:6379> hget myhash field1
"hello"
127.0.0.1:6379> hget myhash field2
"world"
6.4 查看多个字段值
# hmget 命令查看哈希表中的多个字段值
127.0.0.1:6379> hmset myhash field1 zhangsan field2 lisi field3 wangwu
OK
127.0.0.1:6379> hmget myhash field1 field2
1) "zhangsan"
2) "lisi"
6.5 查看所有的字段和字段值
# # hgetall 用于返回哈希表中,所有的字段和字段值。
127.0.0.1:6379> hmset myhash field1 zhangsan field2 lisi field3 wangwu
OK
127.0.0.1:6379> hgetall myhash
1) "field1"
2) "zhangsan"
3) "field2"
4) "lisi"
5) "field3"
6.6 删除字段
# hdel:命令用于删除哈希表 key 中的一个或多个指定字段
127.0.0.1:6379> hgetall myhash
1) "field1"
2) "zhangsan"
3) "field2"
4) "lisi"
5) "field3"
6) "wangwu"
127.0.0.1:6379> hdel myhash field1
(integer) 1
127.0.0.1:6379> hgetall myhash
1) "field2"
2) "lisi"
3) "field3"
4) "wangwu"
6.7 获取字段数量
# hlen:获取哈希表中字段的数量。
127.0.0.1:6379> hlen myhash
(integer) 2
127.0.0.1:6379> hmset myhash field9 test
OK
127.0.0.1:6379> hlen myhash
(integer) 3
6.8 查看指定字段是否存在
# hexists:查看哈希表的指定字段是否存在。
127.0.0.1:6379> hexists myhash field1
(integer) 0
127.0.0.1:6379> hexists myhash field3
(integer) 1
6.9 查看所有的字段
# hkeys 获取哈希表中的所有域(field)
127.0.0.1:6379> hkeys myhash
1) "field2"
2) "field3"
3) "field9"
6.10 查看所有的字段值
# hvals 返回哈希表所有域(field)的值
127.0.0.1:6379> hvals myhash
1) "lisi"
2) "wangwu"
3) "test"
6.11 字段加指定值
# hincrby 为哈希表中的字段值加上指定增量值。
127.0.0.1:6379> hset myhash field 5
(integer) 1
127.0.0.1:6379> hincrby myhash field 1
(integer) 6
127.0.0.1:6379> hincrby myhash field -1
(integer) 5
127.0.0.1:6379> hincrby myhash field -10
(integer) -5
6.12 不存在字段赋值
# hsetnx 为哈希表中不存在的的字段赋值 。
127.0.0.1:6379> hsetnx myhash field1 hello
(integer) 1 # 设置成功,返回 1 。
127.0.0.1:6379> hsetnx myhash field1 world
(integer) 0 # 如果给定字段已经存在,返回 0 。
127.0.0.1:6379> hget myhash field1
"hello"
七、有序集合 Zset
在 set 基础上,加一个 score 值。之前 set 是 k1 v1 v2 v3,现在 zset 是 k1 score1 v1 score2 v2
和 set 相比,sorted set 增加了一个权重参数 score,使得集合中的元素能够按 score 进行有序排列,比如一个存储全班同学成绩的 sorted set,其集合 value 可以是同学的学号,而 score 就可以是其考试得分,这样在数据插入集合的时候,就已经进行了天然的排序。可以用 sorted set 来做带权重的队列,比如普通消息的 score 为 1,重要消息的 score 为 2,然后工作线程可以选择按 score 的倒序来获取工作任务。让重要的任务优先执行。
排行榜应用,取 TOP N 操作 !
7.1 添加一个或多个元素
# zadd 将一个或多个成员元素及其分数值加入到有序集当中。
127.0.0.1:6379> zadd myset 1 one
(integer) 1
127.0.0.1:6379> zadd myset 2 two 3 three
(integer) 2
7.2 查看元素内容
# zrange 返回有序集中,指定区间内的成员
127.0.0.1:6379> zrange myset 0 -1
1) "one"
2) "two"
3) "three"
7.3 排序
# zrangebyscore 返回有序集合中指定分数区间的成员列表。有序集成员按分数值递增(从小到大)次序排列。
127.0.0.1:6379> zadd salary 2500 xiaoming
(integer) 1
127.0.0.1:6379> zadd salary 5000 xiaohong
(integer) 1
127.0.0.1:6379> zadd salary 500 xiehongfa
(integer) 1
# Inf 表示无穷大,同样地,-∞ 可以表示为-Inf。
127.0.0.1:6379> ZRANGEBYSCORE salary -inf +inf # 显示整个有序集
1) "xiehongfa"
2) "xiaoming"
3) "xiaohong"
127.0.0.1:6379> ZRANGEBYSCORE salary -inf +inf withscores # 递增排列并且显示分数
1) "xiehongfa"
2) "500"
3) "xiaoming"
4) "2500"
5) "xiaohong"
6) "5000"
127.0.0.1:6379> ZREVRANGE salary 0 -1 withscores # 递减排列并且显示分数
1) "xiaohong"
2) "5000"
3) "xiaoming"
4) "2500"
5) "xiehongfa"
6) "500"
127.0.0.1:6379> ZRANGEbyscore salary -inf 2500 withscores # 显示工资 <=2500 的所有成员
1) "xiehongfa"
2) "500"
3) "xiaoming"
4) "2500"
7.4 移除元素
# zrem 移除有序集中的一个或多个成员
127.0.0.1:6379> zrange salary 0 -1
1) "xiehongfa"
2) "xiaoming"
3) "xiaohong"
127.0.0.1:6379> zrem salary xiaohong
(integer) 1
127.0.0.1:6379> zrange salary 0 -1
1) "xiehongfa"
2) "xiaoming"
7.5 查看元素数量
# zcard 命令用于计算集合中元素的数量。
127.0.0.1:6379> zrange salary 0 -1
1) "xiehongfa"
2) "xiaoming"
127.0.0.1:6379> zcard salary
(integer) 2
7.6 查看指定区间数量
# zcount 计算有序集合中指定分数区间的成员数量。
127.0.0.1:6379> zadd myset 1 hello
(integer) 1
127.0.0.1:6379> zadd myset 2 world 3 xhf
(integer) 2
127.0.0.1:6379> zcount myset 1 3
(integer) 3
127.0.0.1:6379> zcount myset 1 2
(integer) 2
7.7 从小到大排序
# zrank 返回有序集中指定成员的排名。其中有序集成员按分数值递增(从小到大)顺序排列。
127.0.0.1:6379> zadd salary 2500 xiaoming
(integer) 1
127.0.0.1:6379> zadd salary 5000 xiaohong
(integer) 1
127.0.0.1:6379> zadd salary 500 xhf
(integer) 1
127.0.0.1:6379> zrange salary 0 -1 withscores # 显示所有成员及其 score 值
1) "xhf"
2) "500"
3) "xiaoming"
4) "2500"
5) "xiaohong"
6) "5000"
127.0.0.1:6379> zrank salary xhf # 显示 xhf 的薪水排名是最少的,返回0
(integer) 0
127.0.0.1:6379> zrank salary xiaohong # 显示 xiaohong 的薪水排名,第三
(integer) 2
7.8 从大到小排序
# zrevrank 返回有序集中成员的排名。其中有序集成员按分数值递减(从大到小)排序。
127.0.0.1:6379> zrevrank salary xhf # xhf 第三
(integer) 2
127.0.0.1:6379> zrevrank salary xiaohong # xiaohong 第一
(integer) 0