https://www.cnblogs.com/hunanzp/p/12304622.html
Q:Redis是什么?
A:Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB。
Redis的出色之处不仅仅是性能,Redis最大的魅力是支持保存多种数据结构,此外单个value的最大限制是1GB,不像 memcached只能保存1MB的数据,因此Redis可以用来实现很多有用的功能,比方说用他的List来做FIFO双向链表,实现一个轻量级的高性 能消息队列服务,用他的Set可以做高性能的tag系统等等。
另外Redis也可以对存入的Key-Value设置expire时间,因此也可以被当作一 个功能加强版的memcached来用。 Redis的主要缺点是数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。
狂神说Redis笔记.pdf
maxmemory-policy
noeviction:默认策略,不淘汰,如果内存已满,添加数据是报错。
allkeys-lru:在所有键中,选取最近最少使用的数据抛弃。
volatile-lru:在设置了过期时间的所有键中,选取最近最少使用的数据抛弃。
allkeys-random: 在所有键中,随机抛弃。
volatile-random: 在设置了过期时间的所有键,随机抛弃。
volatile-ttl:在设置了过期时间的所有键,抛弃存活时间最短的数据。
解决方法:
1.将查询不到的数据放入redis中,value=空
2.使用布隆过滤器,在查询redis之前先过滤查询条件
解决方法:
1.热点数据永不过期(缺点:redis存储内存有限,会占用内存)
2.使用分布式锁,在redis中查询不到,去查询数据库的时候,加上分布式锁,只能有一个线程查询数据库,查询的数据再放入redis中。
解决方法:
1.redis高可用,多部署集群机器;或者是异地多活
2.限流降级:等缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量。
3.数据预热:数据加热的含义就是在正式部署之前,我先把可能的数据先预先访问一遍,这样部分可能大量访问的数据就会加载到缓存中。在即将发生大并发访问前手动触发加载缓存不同的key,设置不同的过期时间,让缓存失效的时间点尽量均匀。
配置:
port 26379
sentinel monitor mymaster 127.0.0.1 6379 2
监控主机是否正常运作,如果主机宕机,或者失去联系,则在从机中投票选举master,如果此时之前的master机器恢复运作,则此master机器成为从机。
但是哨兵模式只适用于一主多从,单个主的写并发上限10W,当超过此并发时,不适合使用哨兵模式,而采用集群模式:多个一主多从。单redis的hash槽为16384个(0-16383),当配置集群时候,会给每个集群的master节点分配基本等量的hash槽。
例如 set name zhangsan,这个name会通过一定的hash算法来算出他的hash值(在0-16383之间),然后将这个key/value分配到所属的集群节点的master上
集群模式中,如果存在某个节点master宕机了,则集群也会选举从节点成为主节点,相对哨兵模式,产生的故障会小很多
redis启动之后命令:
redis-cli -a xxx --cluster create --cluster-replicas 2 192.168.10.191:6379 192.168.10.193:6379 192.168.10.203:6379 192.168.10.191:6380 192.168.10.191:6381 192.168.10.193:6380 192.168.10.193:6381 192.168.10.203:6380 192.168.10.203:6381
-a 密码(没有则不输入)
–cluster-replicas 后面加上一个master对应的从节点(slave)数量,一般来说一主一从为:
redis-cli -a xxx --cluster create --cluster-replicas 1 ip:port …
redis79.txtredis80.txtredis81.txt
redis-cli -a xxx -c -h 192.168.xx.xx -p xx
-a 密码
-c 集群模式
-h ip地址
-p 端口号
命令:
info replication
HuobiTradeData.zip
px和ex区别在于 px是millionseconds ,ex是seconds
设置键的过期时间为 second 秒。 SET key value EX second 效果等同于 SETEX key second value 。
设置键的过期时间为 millisecond 毫秒。 SET key value PX millisecond 效果等同于 PSETEX key millisecond value 。
只在键不存在时,才对键进行设置操作。 SET key value NX 效果等同于 SETNX key value 。
只在键已经存在时,才对键进行设置操作。
分析:一致性问题是分布式常见问题,还可以再分为最终一致性和强一致性。数据库和缓存双写,就必然会存在不一致的问题。答这个问题,先明白一个前提。就是如果对数据有强一致性要求,不能放缓存。我们所做的一切,只能保证最终一致性。另外,我们所做的方案其实从根本上来说,只能说降低不一致发生的概率,无法完全避免。因此,有强一致性要求的数据,不能放缓存。
首先,采取正确更新策略,先更新数据库,再删缓存。其次,因为可能存在删除缓存失败的问题,提供一个补偿措施即可,例如利用消息队列。
docker搭建redis集群
参考:
https://blog.csdn.net/weixin_44947701/article/details/128161008