1.Redis介绍
redis是一个key-value形式的非关系型数据库 默认端口号是6379
与MySQL数据库不同的是,Redis的数据是存在内存中的。它的读写速度非常快,每秒可以处理超过10万次读写操作。因此redis被广泛应用于缓存,另外,Redis也经常用来做分布式锁。除此之外,Redis支持事务、持久化、LUA 脚本、LRU 驱动事件、多种集群方案。
好处:1.速度快,数据都是存在内存中
2.支持丰富的数据类型,如string,list,set,hash
3.支持事务,操作都是原子性的,对数据的更改要么全部执行,要不全部不执行
4.丰富的特性,可用作缓存,消息,按照key设置的过期时间,过期将自动删除
2.缓存淘汰策略
Redis服务器繁忙时,有大量信息要保存
如果Redis服务器内存全满,再要往Redis中保存新的数据,就需要淘汰老数据,才能保存新数据
noeviction:返回错误**(默认)**
allkeys-random:所有数据中随机删除数据
volatile-random:有过期时间的数据库中随机删除数据
volatile-ttl:删除剩余有效时间最少的数据
allkeys-lru:所有数据中删除上次使用时间最久的数据
volatile-lru:有过期时间的数据中删除上次使用时间最久的数据
allkeys-lfu:所有数据中删除使用频率最少的
volatile-lfu:有过期时间的数据中删除使用频率最少的
3.缓存击穿
突发热点访问时,热点数据在Redis缓存中不存在或已过期。大量的对热点数据的访问,都直接访问数据库,造成数据库访问压力短时激增造成故障
解决方案 :提前预设热门数据缓存
实时调整过期时间
使用锁 缓存数据不存在时,把数据库数据放入缓存
4.缓存穿透
数据在Redis缓存和数据库中都不存在。大量访问这种数据时,数据库频繁查找数据,造成压力过大产生故障
如:- 非正常数据访问 - 黑客攻击
解决方案: 对不存在的数据缓存空值
设置白名单 可访问的数据id作为偏移值存入bitmaps 访问时先检查bitmaps
使用布隆过滤器
对黑客攻击进行实时监控
5.缓存雪崩
大量key集中过期,数据库短时访问量激增
解决方案:多级缓存架构(Nginx-本地缓存(ehcache/guava)-Redis)
锁或队列对并发访问进行序列化
Key设置过期标志,对即将过期数据提前进行更新,自动续期
数据的过期时间用随机值,分散过期时间
6.Redis持久化
Redis将信息保存在内存
内存的特征就是一旦断电,所有信息都丢失,Redis来讲,所有数据丢失,就需要从数据库从新查询所有数据,这个是慢的
更有可能,Redis本身是有新数据的,还没有和数据库同步就断电了
所以Redis支持了持久化方案,在当前服务器将Redis中的数据保存在当地硬盘上