缓存的弊端,你了解吗

现在大多数的分布式系统中,都会采用缓存。作为一大利器。对于用户来说,可能直观的就是这个网站用起来比较快,刷新比较流畅;用户反馈比较好。本质原因--就是因为快。
高并发,高性能
但是加入缓存中。肯定会有好处,也会有弊端。
先来谈谈他的好处吧。缓存现在作为系统中不可或缺的一部分,在于普通的验证码登录 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 就可以实现,但是没必要。
缓存的维护。是比较大的开销。如果我们在用的过程中。考虑定制化的需求。以及扩展的要求。我相信那会是更好的。
版权声明: 本文为 InfoQ 作者【卢卡多多】的原创文章。
原文链接:【http://xie.infoq.cn/article/aa23900b1c66d718b086be1ef】。文章转载请联系作者。












 
    
评论