简介
全局命令
- keys * 查看所有键
- dbsize 查看键总数
- exists 检查键是否存在
- del 删除键
- expire 键过期
- type 键的数据类型
数据结构和内部编码
五种数据结构类型分别是:string(字符串-键值对)、hash(哈希-键值对集合)、list(列表-可重复有序值)、set(集合-不可重复无序值)、zset(有序列表-可重复有序值-关联分数)
每种数据类型都有自己的内部编码实现,而且是多种实现。
单线程架构
Redis 使用了单线程架构和 I/O 多路复用模型来实现高性能的内存数据库服务。
Redis 是面向快速执行场景的数据库。
五种基本数据结构
String 字符串
字符串,最基础的数据结构
单个的键值对
常用命令
- set 设置值
- get 获取值
- mset 批量设置值
- mget 批量获取值
- incr 自增 decr 自减 incrby 自增指定数字 decrby 自减指定数字 incrbyfloat 自增浮点数
不常用命令
- append 追加值,向字符串的末尾追加值
- strlen 字符串长度
- getset 设置并返回原值
- setrange 设置指定位置的字符
- getrange 获取部分字符串
内部编码
字符串类型的内部编码有 3 种,可以使用 object encoding 查看
- int 8 个字节的长整型
- embstr 小于等于 39 个字节的字符串
- raw 大于 39 个字节的字符串
注: 3.2 版本之前 39 个字节,3.2 之后的版本 44 个字节
典型使用场景
- 缓存功能
- 计数
- 共享 Session
- 限速
Hash 哈希
哈希,也称散列、字典、关联数组
存储多个键值对,无顺序,键不能重复,值可以重复
常用命令
- hset 设置值
- hget 获取值
- hdel 删除 field
- hlen 计算 field 个数
- hmset hmget 批量设置或获取 field - value
- hexists 判断 field 是否存在
- hkeys 获取所有 field
- hvals 获取所有 value
- hgetall 获取所有的 field - value
- hincrby hincrbyfloat 类 incrby 和 incrbyfloat,作用域为 field
- hstrlen 计算 value 的字符串长度
内部编码
哈希类型的内部编码有 2 种
- ziplist 压缩列表
- hashtable 哈希表
List 列表
列表,用来存储多个有序的字符串
类似一个水平的管道,列表内的值有顺序,可以通过 Lpush、Rpush 向管道左右两端插值,读取值时从左往右,值可以重复
-1 表示列表最后一位的索引
常用命令
- rpush 从右端插入元素
- lpush 从左端插入元素
- linsert 向某个元素前或者后插入元素
- lrange 获取指定范围内的元素列表
- lindex 获取指定索引下标的元素
- llen 获取列表长度
- lpop 从列表左侧弹出元素
- rpop 从列表右侧弹出元素
- lrem 删除指定元素
- ltrim 按照索引范围修剪列表
- lset 修改指定索引下标的元素
内部编码
列表类型的内部编码有 2 种
- ziplist 压缩列表
- linkedlist 链表
典型使用场景
- 消息队列
- 文章列表
Set 集合
集合
集合内值无顺序,不能索引下标获取元素,不能通过操作向集合的某一端插值,只能通过 Sadd、Srem 添加或移除元素,元素不可以重复
常用命令
- sadd 添加元素
- srem 删除元素
- scard 计算元素个数
- sismember 判断元素是否在集合中
- srandmember 随机从集合返回指定个数元素
- spop 随机从集合弹出元素
- smembers 获取所有元素
- sinter 求多个集合的交集
- sunion 求多个集合的并集
- sdiff 求多个集合的差集
- sinterstore | sunionstore | sdiffstore destination key 将交集、并集、差集的结果保存
内部编码
集合类型的内部编码有 2 种
- intset 整数集合
- hashtable 哈希表
ZSet 有序集合
有序集合
ZSet 类似 Set ,但是添加元素之前,要赋一个分值,分值必须为浮点数,无索引顺序,有范围,元素不能重复,分值可以重复
常用命令
- zadd 添加元素
- zcard 计算元素个数
- zscore 查看某个元素分值
- zrank zrevrank 计算元素排名,rank 低到高,revrank 高到低,从 0 开始
- zrem 删除元素
- zincrby 增加元素的分数
- zrange zrevrange 返回指定排名范围的元素,默认低到高,rev 高到低
- zrangebyscore zrevrangebyscore 返回指定分数范围的元素
- zcount 返回指定分数范围成员个数
- zremrangebyrank 删除指定排名内的升序元素
- zremrangebyscore 删除指定分数范围的元素
- zinterstore | zunionstore destination numskey weights aggregate 交集、并集,参数有权重、汇总
内部编码
有序集合类型的内部编码有 2 种
- ziplist 压缩列表
- skiplist 跳跃表
List、Set、ZSet 三者比较
数据结构 | 是否重复 | 有序 | 有序实现方式 | 应用场景 |
---|---|---|---|---|
List 列表 | 是 | 是 | 索引下标 | 时间轴、消息队列等 |
Set 集合 | 否 | 否 | 无 | 标签、社交等 |
ZSet 有序集合 | 否 | 是 | 分值 | 排行榜系统、社交等 |
键管理
单个键管理
- rename 重命名键
- randomkey 随机返回一个键
- expire expireat 键在 x 秒后过期,键在秒级时间戳后过期
- pexpire pexpireat 键在 x 毫秒后过期,键在毫秒级时间戳后过期
- ttl pttl 查看键剩余过期时间
- persist 清除键的过期时间
遍历键
- keys 全量遍历键
- scan 渐进式遍历
数据库管理
- select 切换数据库,一般不用
- flushdb flushall 清除数据库,清除当前、清除所有