* `zadd key score1 member1 score2 member2`:将一个或多个元素(`member`)及其`score`添加到有序集合`key`中。
* `zscore key member`:返回有序集合`key`中`member`成员的`score`。
* `zincrby key num member`:将有序集合`key`中的`member`加上`num`,`num`可以为负数。
* `zcount key min max`:返回有序集合`key`中`score`值在`[min,max]`区间的`member`数量。
* `zrange key start stop`:返回有序集合`key`中`score`**从小到大排列后**在`[start,stop]`区间的所有`member`。
* `zrevrange key start stop`:返回有序集合`key`中`score`**从大到小排列后**在`[start,stop]`区间的所有`member`。
* `zrangebyscore key min max`:返回有序集合中按`score`从小到大排列后在`[min,max]`区间的所有元素。注意这里**默认是闭区间,但是可以在`max`和`min`的数值前面加上`(`或者`[`来控制开闭区间**。
* `zrevrangebyscore key max min`:返回有序集合中按`score`从大到小排列后在`[min,max]`区间的所有元素。注意这里**默认是闭区间,但是可以在`max`和`min`的数值前面加上`(`或者`[`来控制开闭区间**。
* `zrank key member`:返回有序集合中`member`中元素排名(从小到大),返回的结果从`0`开始计算。
* `zrevrank key member`:返回有序集合中`member`中元素排名(从大到小),返回的结果从`0`开始计算。
* `zlexcount key min max`:返回有序集合中`min`和`max`之间的`member`数量。注意这个命令中的`min`和`max`前面**必须加`(`或者`[`来控制开闭区间**,特殊值`-`和`+`分别表示负无穷和正无穷。
了解了操作有序集合对象的常用命令,我们就可以来验证下前面提到的哈希对象的类型和编码了,在测试之前为了防止其它`key`值的干扰,我们先执行`flushall`命令清空`Redis`数据库。
在执行命令之前,我们先把配置文件中的参数`zset-max-ziplist-entries`修改为`2`:
1. 执行`exit`命令退出当前客户端。
2. 执行`sudo vim /etc/redis/redis.conf`进入编辑器,然后找到下图所示参数`zset-max-ziplist-entries`,将`128`修改为`2`,表示当有序集合对象中的键值对大于`2`时,就会转换为`skiplist`编码进行存储:
![](https://img.kancloud.cn/42/8f/428fd18347b280d6cd863c9f158200e1_607x289.png)
修改之后再重启`Redis`服务,然后重新连接上客户端。
接下来依次执行如下命令:
~~~sql
zadd name 1 zs 2 lisi //设置 2 个元素会使用 ziplist
type name //查看类型
object encoding name //查看编码
zadd address 1 beijing 2 shanghai 3 guangzhou 4 shenzhen //设置4个元素则会使用 skiplist编码
type address //查看类型
object encoding address //查看编码
~~~
得到如下效果:
![](https://img.kancloud.cn/90/ca/90ca072a6169eb1f044613794d16dbec_662x285.png)
- Redis 为什么这么快
- 什么是 Redis
- Redis 的安装
- Redis 到底有多快
- Redis 是单线程还是多线程
- Redis 为什么选择使用单线程来执行请求
- 什么是 IO 多路复用机制
- Redis 中 I/O 多路复用的应用
- 一个简单的字符串,为什么 Redis 要设计的如此特别
- Redis 的 9 种数据类型
- 二进制安全字符串
- sds 空间分配策略
- sds 和 C 语言字符串区别
- sds 是如何被存储的
- type 属性
- encoding 属性
- 通过牺牲速度来节省内存,Redis 是觉得自己太快了吗
- 什么是压缩列表
- ziplist 的存储结构
- entry 存储结构
- ziplist 数据示例
- ziplist 连锁更新问题
- 为了加快速度,Redis 都做了哪些“变态”设计
- 列表对象
- linkedlist
- linkedlist 和 ziplist 的选择
- quicklist
- 列表对象常用操作命令
- Redis 中哈希分布不均匀该怎么办
- 哈希对象
- hashtable
- ziplist
- ziplist 和 hashtable 的编码转换
- 哈希对象常用命令
- 同一份数据,Redis 为什么要存”两次”
- 五种基本类型之集合对象
- intset 编码
- 集合对象常用命令
- 五种基本类型之有序集合对象
- skiplist 编码
- ziplist 编码
- ziplist 和 skiplist 编码转换
- 有序集合对象常用命令
- 要想用活 Redis,Lua 脚本是绕不过去的坎
- 发布与订阅
- 基于频道的实现
- 基于模式的实现
- Lua 脚本
- Lua 脚本的调用
- Lua 脚本中执行 Redis 命令
- Lua 脚本摘要
- Lua 脚本文件
- 脚本异常
- 作为一款内存数据库,为什么断电后 Redis 数据不会丢失
- Redis 持久化机制
- RDB 持久化机制
- AOF 持久化机制
- 内存耗尽后 Redis 会发生什么
- 内存回收
- 过期策略
- 8 种淘汰策略
- LRU 算法
- LFU 算法
- 不能回滚的 Redis 事务还能用吗
- Redis 有事务吗
- Redis 事务实现原理
- Redis 事务 ACID 特性
- watch 命令
- watch 命令的作用
- watch 原理分析
- Redis 为什么不直接用 master-slave 集群
- Redis 集群方案
- 主从复制
- 配置一主两从 master-slave 集群
- 主从复制原理分析
- 主从服务的不足之处
- Sentinel(哨兵)机制为什么从神坛滑落
- 哨兵 Sentinel 机制
- Sentinel 原理分析
- 配置 Sentinel 集群
- Sentinel 机制实战
- Sentinel 机制的不足之处
- Redis Cluster 集群凭什么成为了最终的胜利者
- Redis 分布式集群方案
- 客户端实现分片
- 中间代理服务实现分片
- Redis Cluster 方案
- 手动配置一个 Redis Cluster 集群
- Redis Cluster 集群常用命令
- 客户端如何使用 Redis Cluster 集群
- Redis Cluster 的不足
- 如何从 10 亿数据中快速判断是否存在某一个元素
- 缓存雪崩
- 缓存击穿
- 缓存穿透
- 布隆过滤器(Bloom Filter)
- 布隆过滤器的 2 大特点
- 布隆过滤器的实现(Guava)
- 布隆过滤器的如何删除