![](https://img.haomeiwen.com/i2021342/4dcaffaa43a3c168.png)
![](https://img.haomeiwen.com/i2021342/075a9655d8bd379b.png)
redis缓存策略
数据存储策略:核心是,设计key
key格式:数据对象名:数据对象ID:对象属性
例如:
User:10086:password
User:10086:username
Sku:4396:info
Spu:4396:info
分布式缓存一致性
1.hash 取模算法
2.一致性Hash算法
3.虚拟节点
PHP:[https://www.jb51.net/article/137523.htm](https://www.jb51.net/article/137523.htm)
redis常见的问题
1.缓存穿透
正常访问下, 在某一时刻, 有个热点的key,在高并发访问之前,碰巧且突然失效咯,然后就打到db了!
某一个热点key在高并发访问的情况下,突然失效,导致大量的请求打进mysql数据库的情况
解决:排队,加锁,分布式锁
2.缓存击穿
访问不存在的key,打击或攻击MySQL数据库;直接绕过redis缓存访问mysql而制造的DB请求压力!
利用redis和mysql的机制(redis缓存一旦不存在,就直接访问数据库MySQL),直接绕过redis缓存访问mysql而制造的DB请求压力
解决:
可以将不存在的key的value设置为null或空值,
布隆过滤器
3.缓存雪崩
正常访问下,在某一时刻,缓存中很多key同时失效!
缓存时,采用了相投的过期时间,导致缓存在某一时刻同时失效,导致的DB崩溃
解决:
设置不同的过期时间
redis分布式锁
http://ifeve.com/redis-lock/
1.使用redis的set px nx 命令进行实现
SET my_key my_value PX milliseconds NX
2.如果redis中锁已经过期咯,然后锁过期的那个请求又执行完毕,回来删锁,删除咯其他线程的锁,怎么办?
set key uuid(token) px 10000 nx get key === uuid(token) 判断删除的是否为自己的锁
3.如果碰巧在查询redis锁还没删除的时候,正在网络传输时,锁过期了,怎么办?(lua)
if redis.call("get",KEYS[1]) == ARGV[1] then
return redis.call("del",KEYS[1])
else
return 0
end
详解三种缓存过期策略LFU,FIFO,LRU
![](https://img.haomeiwen.com/i2021342/95512483d1bde2a9.png)
1.FIFO(First In First out):先见先出,淘汰最先近来的页面,新进来的页面最迟被淘汰,完全符合队列。
2.LRU(Least recently used):最近最少使用,淘汰最近不使用的页面
3.LFU(Least frequently used): 最近使用次数最少, 淘汰使用次数最少的页面
Redis过期策略和LRU
Redis的缓存淘汰策略LRU与LFU
1.Redis缓存穿透,缓存击穿,缓存雪崩原因+解决方案
2.使用Redis创建分布式锁
3.分布式之Redis的三大衍生数据结构
4.有关 Redis 缓存的一些应用场景及踩过的坑
![](https://img.haomeiwen.com/i2021342/c365b8bb7440a88e.png)
![](https://img.haomeiwen.com/i2021342/9d77c92887a5500c.png)
![](https://img.haomeiwen.com/i2021342/466fcfead5072a4c.png)
1.分布式文件存储 :Nginx和FastDFS
Hadoop、FastDFS、Ceph、NFS、GFS、MFS
2.分布式数据库系统
一个分布式数据库在逻辑上是一个统一的整体,
在物理上则是分别存储在不同的物理节点上。
一个应用程序通过网络的连接可以访问分布在不同地理位置的数据库。
它的分布性表现在数据库中的数据不是存储在同一场地。
更确切地讲,不存储在同一计算机的存储设备上。这就是与集中式数据库的区别。
从用户的角度看,一个分布式数据库系统在逻辑上和集中式数据库系统一样,用户可以在任何一个场地执行全局应用。
就好像那些数据是存储在同一台计算机上,有单个数据库管理系统(DBMS)管理一样,用户并没有什么感觉不一样
分库分表分区,读写分离,我们先分表,再分库,最后分区
3.分布式缓存系统:
1.一致性哈希算法 k/v 缓存服务器
2.取模
![](https://img.haomeiwen.com/i2021342/4ecf11dd4f8d290c.png)
![](https://img.haomeiwen.com/i2021342/7b4e8834f0152353.png)
![](https://img.haomeiwen.com/i2021342/6e7ee328b8baaf1e.png)
![](https://img.haomeiwen.com/i2021342/aa50d839b0a43aaf.png)
![](https://img.haomeiwen.com/i2021342/e3aeb46b24a3d446.png)
![](https://img.haomeiwen.com/i2021342/6e2a11557d13b09f.png)
![](https://img.haomeiwen.com/i2021342/aa087cb84b4176f0.png)
![](https://img.haomeiwen.com/i2021342/aca9d2c217b3aedc.png)
![](https://img.haomeiwen.com/i2021342/7a962f59c7d212f7.png)
![](https://img.haomeiwen.com/i2021342/11cc6190794287db.png)
![](https://img.haomeiwen.com/i2021342/42a99cae0990d410.png)
网友评论