Redis数据结构
String
操作命令
字符串常用操作
| | | | —- | —- | | SET key value | 存入字符串键值对 | | MSET key value [key value …] | 批量存储字符串键值对 | | SETNX key value | 存入一个不存在的字符串键值对 | | GET key | 获取一个字符串键值 | | MGET key [key …] | 批量获取字符串键值 | | DEL key [key …] | 删除一个键 | | EXPIRE key seconds | 设置一个键的过期时间(秒) |原子加减
| | | | —- | —- | | INCR key | 将key中储存的数字值加1 | | DECR key | 将key中储存的数字值减1 | | INCRBY key increment | 将key所储存的值加上increment | | DECRBY key decrement | 将key所储存的值减去decrement |
应用场景
- 单值缓存
SET key value
GET key - 对象缓存
- SET user:1 value(json格式数据)
- MSET user:1:name zhuge user:1:balance 1888
- MGET user:1:name user:1:balance
- 分布式锁
- SETNX product:10001 true //返回1代表获取锁成功
- SETNX product:10001 true //返回0代表获取锁失败
。。。执行业务操作
- DEL product:10001 //执行完业务释放锁
- SET product:10001 true ex 10 nx //防止程序意外终止导致死锁
- 计数器
- INCR article:readcount:{文章id}
- GET article:readcount:{文章id}
- Web集群session共享
- spring session + redis实现session共享
- 分布式系统全局序列号
- INCRBY orderId 1000 //redis批量生成序列号提升性能
Hash
操作命令
- Hash常用操作
| | | | —- | —- | | HSET key field value | 存储一个哈希表key的键值 | | HSETNX key field value | 存储一个不存在的哈希表key的键值 | | HMSET key field value [field value …] | 在一个哈希表key中存储多个键值对 | | HGET key field | 获取哈希表key对应的field键值 | | HMGET key field [field …] | 获取哈希表key对应的field键值 | | HDEL key field [field …] | 删除哈希表key中的field键值 |
应用场景
- 对象缓存
- HMSET user {userId}:name zhuge {userId}:balance 1888
- HMSET user 1:name zhuge 1:balance 1888
- HMGET user 1:name 1:balance
- 电商购物车
- 1)以用户id为key
- 2)商品id为field
- 3)商品数量为value
- 购物车操作
- 1)添加商品
hset cart:1001 10088 1
- 2)增加数量
hincrby cart:1001 10088 1
- 3)商品总数
hlen cart:1001
- 4)删除商品
hdel cart:1001 10088
- 5)获取购物车所有商品
hgetall cart:1001
- 1)添加商品
优点
1)同类数据归类整合储存,方便数据管理
2)相比string操作消耗内存与cpu更小
3)相比string储存更节省空间
缺点
1)过期功能不能使用在field上,只能用在key上
2)Redis集群架构下不适合大规模使用
List
- 常用数据结构
- Stack(栈) = LPUSH + LPOP
- Queue(队列)= LPUSH + RPOP
- Blocking MQ(阻塞队列)= LPUSH + BRPOP
Set
- 微信抽奖小程序
- 点击参与抽奖加入集合
SADD key {userID} - 查看参与抽奖的所有用户
SEMMEBERS key - 抽取count名中奖者
SRANDMEMBER key [count]
- 点击参与抽奖加入集合
- 微信微博点赞、收藏、标签
- 点赞
SADD like:{消息ID} {用户ID} - 取消点赞
SREM like:{消息ID} {用户ID} - 检查用户是否点过赞
SISMEMBER like:{消息ID} {用户ID} - 获取点赞的用户列表
SMEMBERS like:{消息ID} - 获取点赞用户数
SCARD like:{消息ID}
- 点赞
- 集合操作实现微博微信关注模型
- 集合操作实现电商商品筛选
Zset
- Zset集合操作实现排行榜