Redis
基于内存的,缓存数据库,但是也可以持久化。
1.五种数据结构
2.String应用场景
1.对于对象缓存,相对于方法1)使用方法2)的好处为:当只想拿出特定字段的时候,不用拿出所有数据,可以选择只拿想要的字段。
2. SET product:10001 true ex 10 nx 可以保证最多死锁10s.之后可以继续对Key加锁。(然而高并发还是会出问题)
1 全局序列号可以用 incr orderId,每次来一个订单就执行一次,但是有性能问题。对于高并发的情况,可以使用批量增加的方式,比如一次性拿1000个序列号,incrby orderId 1000. 获取1000个id慢慢用,用完后再来拿,可以节省redis的资源。
3.Hash结构
user是一个key,对于这个key得到的value,也是键值对,
设值时:hmset user 1:name zhuge 1:balance 1888.
取值时:hmget user 1:name 1:balance.
“zhuge”
“1888”
以上为哈希的结构和其对象的一个使用场景。
eg:京东的购物车就是用redis的哈希实现的。
电商购物车:
1.以用户id为key
2.商品id为filed
3.商品数量为value.
3.1. Hash结构的优缺点
优点:
1 同类数据归类整合存储,方便数据管理
2 相比 string操作消耗内存与cpu更小
3 相比string储存更节省空间
缺点:
1 过期功能不能使用在field,只能用在key上
2 redis集群架构下不适合大规模使用
List结构
左边表头,右边表尾
LRANGE key start(传索引坐标) stop(传索引坐标)
该结构可以实现多种数据结构,eg:
1.Stack = LPUSH+LPOP
2.Queue = LPUSH+RPOP
3.Blocking MQ(阻塞队列)=LPUSH+BRPOP
对于微博消息和微信公众号消息,消息流(时间线)会把你后发消息的往前放,可以用list场景实现。eg:我关注了LBT和YZ等大V:
1 LBT发微博,消息ID为10018
LPUSH msg:{我-ID} 10018
2 YZ发微博,消息ID为10011
LPUSH msg:{我-ID} 10011
3 查看最新微博消息
LRANGE msg:{我-ID} 0 5 ( 取前五条)
Set结构
微信小程序抽奖场景 :key = 抽奖活动 userID = 1001 使用 SPOP抽奖 会将抽到的人从集合中删去,从而实现抽取一二三等奖。