剖析不一样的Redis架构设计(未完待续)
01 什么是缓存
缓存原指CPU上的一种高速缓存器,他先于内存和CPU交换数据,速度很快。
现在泛指在计算机上的原始数据的复制集,便于快速访问。
在互联网技术中,缓存是系统快速响应的关键技术之一。
02 缓存的经典读写模式
Cache Aside Pattern(旁路缓存)
是最经典的缓存+数据库读写模式
读的时候,先读缓存,缓存没有的话,就读数据库,然后取出数据后放入缓存,同时返回响应。
更新的时候,先更新数据库,然后再删除缓存。
为什么是删除缓存,不是更新缓存?
缓存的值是一个结构,更新数据需要遍历
懒加载。使用的时候才更新缓存,也可以采用异步的方式填充缓存。
高并发脏读有三种情况:
先更新数据库,再更新缓存:
update数据和commit之间的时间段,更新缓存,commit失败,则DB与缓存数据不一致。
先删除缓存,再更新数据库
update和commit之间,有新的读,缓存空,读DB数据到缓存,数据是旧的数据,则DB与缓存数据不一致。
先更新数据库,再删除缓存(推荐使用)
update和commit之间,有新的读,缓存空,读DB数据到缓存,数据是旧的数据, commit后DB为新的数据,则DB与缓存数据不一致,采用延时双删策略。
03 Redis可以做什么
减轻数据库压力,提高并发量,提高系统响应时间
做seesion分离
传统的session是由自己的tomcat进行维护和管理的,在集群和分布式情况下,不同的tomcat要管理不同的seesion,只能在各个tomcat之间,通过网络和IO进行session复制,极大影响了系统的性能。
Redis解决了这个问题,将登录成功后的session信息,存放在Redis中,这样多个tomcat就可以共享session信息。
做分布式锁
Redis的setnx命令来实现。
电商场景的应用
●以用户id为key
●以商户id为filed
●商品数量为value
电商购物车操作:
1.添加商品:hset cart:wengyifei 9527 1
2.增加数量:hincrby car:wengyifei 9527 1
3.商品总数:hlen cart:wengyifei
4.删除商品:hdel cart:wengyifei
5.获取购物车所有商品:hgetall cart:wengyifei
zset集合操作实现排行榜
1.点击新闻
ZINCRBY hotnews:20201120 1 台湾回归
2.展示当日排行前十
ZREVRANGE hotnews:20201120 0 9 WITHSCORES
未完待续:
04.Redis高性能设计
05.Redis核心设计原理:RedisDB结构、SDS字符串