写点什么

缓存的弊端,你了解吗

用户头像
卢卡多多
关注
发布于: 1 小时前
缓存的弊端,你了解吗

现在大多数的分布式系统中,都会采用缓存。作为一大利器。对于用户来说,可能直观的就是这个网站用起来比较快,刷新比较流畅;用户反馈比较好。本质原因--就是因为


高并发,高性能


但是加入缓存中。肯定会有好处,也会有弊端。


先来谈谈他的好处吧。缓存现在作为系统中不可或缺的一部分,在于普通的验证码登录 token,


以及数据的暂存。查询数据的存储。对于特定需求。比如说点赞数、评论数、排名、等数字的需求。


我们举一个实例的场景。例如,我现在要做一个。购物系统类似于京东这种特别庞大的分布式系统。

用最简单的方式做出一个比较全面的购物车。你需要怎么做?

我可能有两种方法,第一种购物车的实际场景中。主要要点。有以下几种。


购物车中的商品。排列是不能重复的。但是数量可以增加。也就是说他有一个标准的 spu;


又要考虑。购物车中需求商品比较大。而且查询。以及添加的速度。比较迅速,我们可以选用 linkedHashmap,LinkHashSet;


主要说的就是第二种。用 redis 的数据结构。就可以。简单的完成一个购物车的主要功能。


Redis 现在的数据结构。有很多是特殊的。而且经过有原则性的命令操作。可以更好地发挥出缓存的高性能。对于查询和访问来说,这是莫大的能力。


  • REDIS6.0.8 是目前最稳定的版本 ,缓存中需要可以将业务直接选在,我们需要的过程中\

  • 一、Redis(九大数据类型)

  • 1.基础数据类型(现在都有公司直接 SSR)

  • String

  • 命令实战


  • 1.常用的取值,赋值

  • set key value


  • get key


  • 2.同时设置多个 key,value 的键值对值

  • mset k1 v1 k2 v2 k3 v3


  • mget k1 k2 k3


  • 3.数值增减

  • 递增数字(评论,点赞)

  • INCR key


  • 增加指定的整数(每次增加整数 1,最常用的就是点赞数)

  • INCRBY key increment


  • 递减数字(评论,点赞)

  • DECR key


  • 减少指定的整数(每次增加整数 1,最常用的就是点赞数)

  • IDECRBY key decrement


  • 3.获取字符串长度

  • STRLEN KEY


  • 4.分布式锁

  • setnx key value(存在锁不创建了,如果没有就创建)


  • set key value [ EX SECONDS] [PX SECONDS] [NX|XX]

  • EX: KEY 在多少秒之后过期

  • PX: KEY 在多少毫秒之后过期

  • NX: 当 key 不存在的时候,创建 key,效果等同于 setnx

  • XX: 当 key 存在时,覆盖 key

  • 实例: set lock pay ex 10 NX (10 秒之后就会创建或者覆盖)


  • 5.String 应用场景

  • 场景 1:用户喜欢的商品,歌曲,饭菜,文章,点赞,踩一下

  • INCR orderCode increment (给商品,订单编号加 1)


  • 喜欢的文章,阅读数都是 INCR 命令生成


  • list

  • list 数据类型,


  • hash

  • Redis 的 hash,在 Java 相对应的是 Map<String,MAP<object,object>>\


  • 命令实战:

  • 1.一次设置一个字段值

  • HSET key field value


  • HGET key field


  • 2.一次设置多个字段值(hmset lucas id 1 name lucas score 99)

  • HMSET key field value [field value]


  • HMGET key field [filed....]


  • 3.获取所有的字段值 (遍历)(hgetall lucas)

  • hgetall key


  • 4.删除某个 key 内的全部数量

  • heln


  • 5.删除一个 key

  • hdel


  • 6.应用场景

  • 1.购物车 Redis 的 hash,促销那种,早起可以使用


  • 购物车中 projectID ,incr number increment(产品数量),最后集中全选,就是 hgetall 用户 ID /名称

  • 表示自己名下的所有产品 ID 和数量


  • 对于购物车的实际操作

  • 1.新增 Lucas 用户下的产品,放入购物车

  • hset shopcar lucas 10086 3 110110 4


  • hest 购物车 用户 ID 商品 ID 商品数量


  • 2.对于当前产品的,点击新增,或者是点击减少

  • hincrby shopcar lucas 商品 ID 1

  • 表示当前可以增加一个点击数量


  • 3.商品总数(当前用户下,购物车数量)

  • hlen shopcar Lucas


  • 4.全部选择(清空购物车开始使用)

  • hgetall shopcar lucas


  • 获取在此名称下的所有数据


  • set


  • zest


  • 2.新增的数据类型

  • bitMaps 位图


  • hyperloglogs


  • geospatial(地理空间)


  • Stream


缓存的弊端:

既然他有很多的好处,用来支持系统的可用性。


其中也有很多。我们需要解决的问题,第一个就是热点数据的失效问题?


  • 缓存穿透。

  • 缓存雪崩。

  • 缓存击穿。


如果说缓存在服务过程中突然宕机。其中的持久化操作。也是必要的,你需要具体的配置,根据业务。去盯着话的分析。


  • 定制化的确定缓存的淘汰策略。


举一个最简单的例子,如果说我现在需要一个唯一的 id 作为我数据表中主键其实用 redis 就可以实现,但是没必要。


缓存的维护。是比较大的开销。如果我们在用的过程中。考虑定制化的需求。以及扩展的要求。我相信那会是更好的。

发布于: 1 小时前阅读数: 6
用户头像

卢卡多多

关注

努力寻找生活答案的旅途者 2020.04.12 加入

公众号:卢卡多多,欢迎一起交流学习

评论

发布
暂无评论
缓存的弊端,你了解吗