1、无中心化集群

2、redis集群搭建
1、进入/root/myredis文件目录
cd /root/myredis

2、进入redis6378.conf,并添加一下内容
cluster-enabled yes 打开集群模式
cluster-config-file nodes-6379.conf 设定节点配置文件名
cluster-node-timeout 15000 设定节点失联时间,超过该时间(毫秒),集群自动进行主从切换

3、复制配置文件

4、修改配置文件
批量修改命令
:%s/被替换的内容/替换后的内容

5、启动上面配置的六台redis服务

6、将六个节点合成一个集群
组合之前,请确保所有redis实例启动后,node-xxxx.conf文件都生成正常。

7、Redis报错:-bash redis-cli command not found
sudo cp src/redis-cli /usr/local/bin/
sudo cp src/redis-cli /usr/local/bin/
8、执行下面的命令
redis-cli --cluster create --cluster-replicas 1 192.168.18.135:6379 192.168.18.135:6380 192.168.18.135:6381 192.168.18.135:6389 192.168.18.135:6390 192.168.18.135:6391

9、连接redis集群
redis-cli -c -p 6379
10、通过cluster nodes 命令查看集群信息

11、分配原则
分配原则尽量保证每个主数据库运行在不同的IP地址,每个主库和从库不在一个IP地址里面。
127.0.0.1:6379> set k1 v1
-> Redirected to slot [12706] located at 192.168.18.135:6381
OK
底层有一个计算插槽的过程,k1 计算后的插槽值为12706,只要落在6381 【10923-16383】节点所在的区间。所有k1存放到6381这个主节点上。set值后自动切换到6381节点。【这里就体现了去中心化的过程】

12、一次添加多个值
分组添加
mset name{user} lucy age{user} 20
13、查看k插槽的值
cluster keyslot k名称
14、杀掉6379服务,再查看节点情况,发现6390(6379的从机)成为主机。

15、重启6379,再查看节点情况,发现6379从原来的主机变为现在的6390的从机。

如果某一段插槽的主从节点都宕机了,redis集群服务是否还能继续?
-
如果某一段插槽的主从都挂掉,而cluster-require-full-coverage为yes,那么整个集群都挂掉
-
如果某一段插槽的主从都挂掉,而cluster-require-full-coverage为no,那么,该插槽数据全部不能使用,也无法存储。其他插槽依然可以提供服务。
3、Jedis - 通过java代码操作redis
4、应用问题解决
4.1 缓存穿透

(4)进行实时监控:当发现Redis的命中率开始急速降低,需要排查访问对象和访问的数据,和运维人员配合,可以设置黑名单限制服务。
4.2 缓存击穿
现象:

4.3 缓存雪崩

5、分布式锁
(1)redis中使用命令来设置分布式锁
setnx k v

第一次使用setnx设置值时是成功的,但是第二次设置就失败了,说明第一次就加锁了。
(2)如何释放锁
使用命令
del k

使用删除命令后,再设置值成功。
(3)以上的设置锁的方式存在的问题?
当锁一直不释放,那么后面的所有操作将搁置,怎么解决这个问题呢?很简单,就是给该锁加一个过期时间
使用命令【这种方式不是原子操作】
setnx users 10
expire users 10

总结:
(1)使用setnx上锁,通过del释放锁
(2)锁一直没有释放,设置key过期时间,自动释放
(3)上锁之后突然出现异常,无法设置过期时间了
-
上锁时候同时设置过期时间就可以解决这个问题
给users设置值为10 ,并设置过期时间为12秒
127.0.0.1:6379> set users 10 nx ex 12 OK 127.0.0.1:6379> ttl users (integer) 5
6、分布式锁存在的问题
1、问题描述

解决方案:

在设置锁的时候,将锁的值设置为一个随机的uuid值,再在需要释放锁的时候,获取该锁的值并进行比较,如果相等,则说明是同一把锁,再执行释放锁的操作,这样就有效的避免了误删其他的锁。

本文详细介绍了如何搭建Redis无中心化集群,包括配置文件修改、节点组合与故障转移。还讨论了Redis缓存问题如穿透、击穿和雪崩,以及分布式锁的实现与潜在问题。在Java代码操作Redis方面,提到了Jedis的使用,并提出了防止误删锁的解决方案。
1265

被折叠的 条评论
为什么被折叠?



