这是我参与8月更文挑战的第29天,活动详情查看:8月更文挑战
前言
Redis中支持五种数据结构,String、Hash、List、Set、ZSet,开发中最长用的就是String类型。
String 字符串类型
是
Redis中最基本的数据类型,一个key对应一个value。Redis的String类型是二进制安全的,意味着Redis的String可以包含任何数据。比如数字类型、json字符串。
应用场景
- 缓存
- 秒杀
- 分布式锁
- 配置中心
- 对象序列化
- 计数器
操作指令
| 命令 | 示例 | 说明 |
|---|---|---|
| get | get hello | 获得key=hello结果 |
| set | set hello world | 设置key=hello,value=world |
| mset | mset name tom age 18 | 一次性设置多个kv |
| mget | mget name age | 一次性获取多个kv |
| del | del hello | 删除key=hello |
| incr/decr | incr/decr count | key值自增/自减1 |
| incrby/decrby | incrby/decrby count 99 | 自增自减指定步长 |
Hash 键值类型
Hash类型用于存储结构化数据Hash可以看做是Map中的Map
应用场景
- 缓存用户信息 和String类型存结构化数据对比 | 类型 | 优点 | 缺点 | | :---: | :---: | :---: | | String-JSON | 编程简单,节约内存 | 1. 序列化带来开销
2. 无法做到部分属性更新 | | Hash | 直观,可部分更新 | 1. 多层嵌套实现困难
2. 序列化反序列化编程麻烦|
操作指令
| 命令 | 示例 | 说明 |
|---|---|---|
| hget | hget user:1:info age | 获得``hash中key=age`的值 |
| hset | hset user:1:info age 19 | 设置hash中key=age的值 |
| hmset | hmset user:1:info name tom age 18 | 一次性设置hash多个kv |
| hmget | hmget user:1:info name age | 一次性获取hash多个kv |
| hmgetall | hmgetall user:1:info | 一次性获取hash所有kv |
| hdel | hdel user:1:info name | 删除user:1:info中的name |
| hexists | hexists user:1:info name | 检查是否存在 |
| hlen | hlen user:1:info | 获取指定长度 |
提示:reids hash key的命名规则 对象类型:id:属性
List 列表
List列表是简单的字符串列表,按照插入顺序排序。可以在头部或尾部插入数据- 一个列表最多可以包含
2的32次方-1个元素(超过40亿个元素)
应用场景
时间轴数据缓存,类似于博客的归档。按照时间顺序存储。
操作指令
| 命令 | 示例 | 说明 |
|---|---|---|
| rpush | rpush list c b a | 右侧插入 结果c b a |
| lpush | lpush list e f g | 左侧插入 结果g f e |
| rpop | rpop list | 右侧弹出 |
| lpop | lpop list | 左侧弹出 |
| llen | llen list | 获取长度 |
| lrange | lrange list 0 2 | 获取范围数据,当尾部为负数时表示从后往前数,-1 代表最后一个元素 |
Set 集合
Redis的Set是String类型的唯一的无序集合。Redis中集合是通过哈希表实现的,所以添加、删除、查询的速度极快- 最多可以包含
2的32次方-1个元素(超过40亿个元素)
应用场景
- 共同关注(利用交集 sinter)
- 抽奖(利用随机弹出 srandmember spop)
操作指令
| 命令 | 示例 | 说明 |
|---|---|---|
| sadd/srem | sadd/srem element | 添加/移除集合中的元素 |
| scard | scard user:1:follow | 计算几何数量 |
| smember | smember user:1:follow | 获取所有集合元素(不推荐) |
| srandmember | srandmember user:1:follow 3 | 随机挑选3个元素 |
| spop | spop user:1:follow | 随机弹出元素 |
| sdiff | sdiff set1 set2 | 差集 |
| sinter | sinter set1 set2 | 交集 |
| sunion | sunion set1 set2 | 并集 |
Zset 集合
Redis的ZSet是String类型的唯一的有序集合。
应用场景
排行榜数据缓存
操作指令
| 命令 | 示例 | 说明 |
|---|---|---|
| zadd/zrem | zadd/zrem element | 添加/移除集合中的元素 |
| zscore | zscore key | 得到分数 |
| zcard | zcard key element | 元素总数 |
| zrank | zrank key element | 获得排名 |
| zrange | zrange key scope withscores | 获得排序索引数据 |
| zcount | zcount key scope | 获得排序数据总量 |
| zrangebyscore | zrangebyscore key | 获得按分数排序元素 |