vlambda博客
学习文章列表

剖析不一样的Redis架构设计(未完待续)


01 什么是缓存


缓存原指CPU上的一种高速缓存器,他先于内存和CPU交换数据,速度很快。

现在泛指在计算机上的原始数据的复制集,便于快速访问。

在互联网技术中,缓存是系统快速响应的关键技术之一。


02 缓存的经典读写模式

Cache Aside Pattern(旁路缓存)

是最经典的缓存+数据库读写模式

读的时候,先读缓存,缓存没有的话,就读数据库,然后取出数据后放入缓存,同时返回响应。



更新的时候,先更新数据库,然后再删除缓存。

剖析不一样的Redis架构设计(未完待续)


为什么是删除缓存,不是更新缓存?

  1. 缓存的值是一个结构,更新数据需要遍历

  2. 懒加载。使用的时候才更新缓存,也可以采用异步的方式填充缓存。

高并发脏读有三种情况:

  1. 先更新数据库,再更新缓存:

        

剖析不一样的Redis架构设计(未完待续)


       update数据和commit之间的时间段,更新缓存,commit失败,则DB与缓存数据不一致。

  1. 先删除缓存,再更新数据库


    update和commit之间,有新的读,缓存空,读DB数据到缓存,数据是旧的数据,则DB与缓存数据不一致。

  2. 剖析不一样的Redis架构设计(未完待续)

  3. 先更新数据库,再删除缓存(推荐使用)

       

剖析不一样的Redis架构设计(未完待续)


     update和commit之间,有新的读,缓存空,读DB数据到缓存,数据是旧的数据,                 commit后DB为新的数据,则DB与缓存数据不一致,采用延时双删策略。




03 Redis可以做什么

  1. 减轻数据库压力,提高并发量,提高系统响应时间

  2. 做seesion分离

    传统的session是由自己的tomcat进行维护和管理的,在集群和分布式情况下,不同的tomcat要管理不同的seesion,只能在各个tomcat之间,通过网络和IO进行session复制,极大影响了系统的性能。

    剖析不一样的Redis架构设计(未完待续)

  3. Redis解决了这个问题,将登录成功后的session信息,存放在Redis中,这样多个tomcat就可以共享session信息。

  4. 做分布式锁

    Redis的setnx命令来实现。

  5. 电商场景的应用

    ●以用户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

    剖析不一样的Redis架构设计(未完待续)

  6. zset集合操作实现排行榜

    1.点击新闻

      ZINCRBY hotnews:20201120 1 台湾回归

    2.展示当日排行前十

       ZREVRANGE hotnews:20201120 0 9 WITHSCORES

未完待续:

04.Redis高性能设计

05.Redis核心设计原理:RedisDB结构、SDS字符串