Redis搭建和学习笔记

一.redis安装:

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

二.Redis淘汰机制(Eviction policies)

maxmemory-policy
noeviction:默认策略,不淘汰,如果内存已满,添加数据是报错。
allkeys-lru:在所有键中,选取最近最少使用的数据抛弃。
volatile-lru:在设置了过期时间的所有键中,选取最近最少使用的数据抛弃。
allkeys-random: 在所有键中,随机抛弃。
volatile-random: 在设置了过期时间的所有键,随机抛弃。
volatile-ttl:在设置了过期时间的所有键,抛弃存活时间最短的数据。

三.Redis缓存穿透,击穿,雪崩

Redis 缓存穿透(redis中查不到,例如userid = -1,直接去查询数据库)

解决方法:
1.将查询不到的数据放入redis中,value=空
2.使用布隆过滤器,在查询redis之前先过滤查询条件

Redis 缓存击穿(热点数据过期时,大量请求查询数据库,造成数据库宕机)

解决方法:
1.热点数据永不过期(缺点:redis存储内存有限,会占用内存)
2.使用分布式锁,在redis中查询不到,去查询数据库的时候,加上分布式锁,只能有一个线程查询数据库,查询的数据再放入redis中。

Redis 缓存雪崩(缓存数据集体失效,或者redis宕机)

解决方法:
1.redis高可用,多部署集群机器;或者是异地多活
2.限流降级:等缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量。
3.数据预热:数据加热的含义就是在正式部署之前,我先把可能的数据先预先访问一遍,这样部分可能大量访问的数据就会加载到缓存中。在即将发生大并发访问前手动触发加载缓存不同的key,设置不同的过期时间,让缓存失效的时间点尽量均匀。

四.哨兵模式(一主二从三哨兵)(内存不够)

配置:
port 26379

哨兵sentinel监控的redis主节点的 ip port

master-name 可以自己命名的主节点名字 只能由字母A-z、数字0-9 、这三个字符".-_"组成。

quorum 配置多少个sentinel哨兵统一认为master主节点失联 那么这时客观上认为主节点失联了

sentinel monitor

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

1.集群验证:

redis-cli -a xxx -c -h 192.168.xx.xx -p xx
-a 密码
-c 集群模式
-h ip地址
-p 端口号

命令:
info replication

2.redis主从/哨兵/集群demo

HuobiTradeData.zip

六.EX,PX,NX,XX的区别

px和ex区别在于 px是millionseconds ,ex是seconds

1.EX second

设置键的过期时间为 second 秒。 SET key value EX second 效果等同于 SETEX key second value 。

2.PX millisecond

设置键的过期时间为 millisecond 毫秒。 SET key value PX millisecond 效果等同于 PSETEX key millisecond value 。

3.NX

只在键不存在时,才对键进行设置操作。 SET key value NX 效果等同于 SETNX key value 。

4.XX

只在键已经存在时,才对键进行设置操作。

七.redis和数据库双写一致性问题

分析:一致性问题是分布式常见问题,还可以再分为最终一致性和强一致性。数据库和缓存双写,就必然会存在不一致的问题。答这个问题,先明白一个前提。就是如果对数据有强一致性要求,不能放缓存。我们所做的一切,只能保证最终一致性。另外,我们所做的方案其实从根本上来说,只能说降低不一致发生的概率,无法完全避免。因此,有强一致性要求的数据,不能放缓存。

首先,采取正确更新策略,先更新数据库,再删缓存。其次,因为可能存在删除缓存失败的问题,提供一个补偿措施即可,例如利用消息队列。

docker搭建redis集群
参考:
https://blog.csdn.net/weixin_44947701/article/details/128161008

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值