搜文章
推荐 原创 视频 Java开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发
Lambda在线 > 二进制跳动 > 剖析不一样的Redis架构设计(未完待续)

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

二进制跳动 2020-11-22

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字符串

版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《剖析不一样的Redis架构设计(未完待续)》的版权归原作者「二进制跳动」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注二进制跳动微信公众号

二进制跳动微信公众号:gh_6fead375a876

二进制跳动

手机扫描上方二维码即可关注二进制跳动微信公众号

二进制跳动最新文章

精品公众号随机推荐