目录
- 概述
- 详解
1、概述
Redis反对五种数据类型:String(字符串)、Hash(哈希)、List(列表)、Set(汇合)、Zset(有序汇合)。
2、详解
1、String(字符串)
定义: String 是 redis 最根本的类型,一个 key 对应一个 value。String 类型是二进制平安的。因为 string 底层的实现是简略动静字符串 sds,是能够批改字符串。
利用场景: 单值缓存、对象缓存、分布式锁、惯例计数(粉丝数量、评论数量)、分布式session共享、分布式全局序列号。
具体实现:单值缓存:
set key value get key
对象缓存:
set user:1 value(json格局数据) mset user:1:name tsingli user:1:balance 1888 mget user:1:name user:1:balance
惯例计数器:
incr article:readcount:{文章id} get article:readcount:{文章id}
分布式系统全局序列号:
incrby orderid 1000 # redis批量生成序列号晋升性能
分布式锁:
# 相干操作 线程1: setnx product:1001 true # 返回1代表获取锁胜利 线程2: setnx product:1001 true # 返回0代表获取锁失败 。。。执行业务操作 del product:1001 # 执行完业务开释锁 set product:1001 true ex 10 nx # 避免程序意外终止导致死锁 # 案例 setnx product:1001 true 1.查问商品1001的库存 2.减库存 3.从新把减完残余的库存更新回数据库 del product:1001
setnx 如果插入的key一样不会对数据有任何操作,如果第二次对库存再进行减对的话就返回谬误。
2、Hash(哈希)
定义: Hash是一个键值对汇合。他相当于java中的双重map。<key,<filed,value>>。
利用场景: 购物车。
具体实现:购物车:
# 阐明: # 用户id为1001,商品的编码是10088。 # 用户id为key,商品id为field,商品数量为value。 # 案例: # 增加商品: hset cart:1001 10088 1 # 减少数量: hincrby cart:1001 10088 1 # 商品总数: hlen cart:1001 # 删除商品: hdel cart:1001 10088 # 获取购物车所有商品: hgetall cart:1001
3、List(列表)
定义: 列表是简略的字符串列表,依照插入程序排序,能够增加一个元素在列表的头部或者尾部。
利用场景: Stack(栈)= LPUSH + LPOP -> FILO //先进后出
、Queue(队列)= LPUSH + RPOP //先进先出
、Blocking MQ(阻塞队列)= LPUSH + BRPOP //音讯队列
、微博
、微信公众号音讯流
。
具体实现:微博和微信公众号音讯流:
# 李雷发微博,音讯id为10018 lpush msg:111111 10018 # 韩梅梅车发微博,音讯id为10086 lpush msg:111111 10086 # 查看最新微博音讯 lrange msg:11111 0 5 //0至5条微博音讯。
4、Set(汇合)
定义: Set 是 string 类型的无序汇合。
利用场景: 微信抽奖小程序、微信微博点赞、珍藏、标签
、关注模型,就是可能意识的人的关系。
具体实现:微信抽奖:
# 点击参加抽奖退出汇合 sadd key {userId} # 查看参加抽奖的所有用户 smembers key # 抽取count名中奖者(1) // srandmember不会将元素从汇合中删除 srandmember key [count] //抽取两名中奖者 srandmember act:1008 2 # 抽取count名中奖者(2) // SPOP会将元素从汇合中删除 spop key 2
微信微博点赞、珍藏、标签:
# 点赞 sadd like:{音讯ID} {用户id} # 勾销点赞 srem like:{音讯ID} {用户id} # 检查用户是否点过赞 sismember like:{音讯ID} {用户id} # 获取点赞的用户列表 smembers like:{音讯ID} # 获取点赞的用户树 scard like:{音讯ID}
5、Zset(有序汇合)
定义: zset和set一样也是string类型元素的汇合,且不容许反复的成员。不同的是每个元素都会关联一个dobule类型的分数,redis正是通过分数为汇合成员进行从小到大的排序,zset的成员是惟一的然而分数能够反复。