python操作哨兵与集群,缓存优化,穿透,击穿,雪崩

python操作哨兵与集群

哨兵

​ 做了高可用架构后,不能直接连某一个主库了,主库可能会挂掉,后来他就不是主库了。

之前连接redis的操作需要变更了

import redis
conn = redis.Redis(host='',port=6379)
conn.set()
conn.close()

# 现在用的
import redis
from redis.sentinel import Sentinel
sentinel = Sentinel([('10.0.0.101',26379),
              ('10.0.0.102',26380),
              ('10.0.0.102',26381)],socket_timeout=5)

# 获取主服务器地址
master = sentinel.discover_master('mymaster')
print(master)

# 获取从服务器地址
slave = sentinel.discover_slaves('mymaster')
print(slave)


# 读写分离
# 获取主服务器进行写入
master = sentinel.master_for('mymaster', socket_timeout=0.5)
w_ret = master.set('foo', 'bar')

slave = sentinel.slave_for('mymaster', socket_timeout=0.5)
r_ret = slave.get('foo')
print(r_ret)
"注意:要写机器的ip地址,不要写127.0.0.1,想在公网用,就写公网ip,python要是在内网中使用,要写内网ip"

集群

搭建好集群后需要用python操作集群,需要下载模块

rediscluster

pip3 install redis-py-cluster
from rediscluster import RedisCluster
startup_nodes = [{"host":"127.0.0.1", "port": "7000"},{"host":"127.0.0.1", "port": "7001"},{"host":"127.0.0.1", "port": "7002"}]

# rc = RedisCluster(startup_nodes=startup_nodes,decode_responses=True)
rc = RedisCluster(startup_nodes=startup_nodes)
rc.set("foo", "bar")
print(rc.get("foo"))

redis缓存优化

1.缓存更新策略

redis本身是使用内存存储,内存会出现不够用,新数据就会存不进去,redis有些策略会删除一些旧数据,再存新数据。
LRU 没有被使用时间最长的
LFU 一定时间段内使用次数最少的
FIFO 先进先出

2.缓存穿透

	缓存穿透是指缓存中和数据库中都没有的数据,而用户不断发起请求。此用户很有可能是攻击者,发起查询id小于0或过大的数据,会导致数据库压力过大
解决方案:
	1.接口层增加校验,用户做权限校验,id做基础校验,不合法的直接拦截
   2. 缓存中取不到的数据在 数据库中也查询不到可以在缓存中存一个key=null并设置过期时间
   3. 使用布隆过滤器

3.缓存击穿

	是指缓存中没有的数据数据库中有,同一时间并发量过大,导致数据库压力瞬间增大
解决方案:
	设置热点数据永不过期
  

4.缓存雪崩

	是指缓存中数据大批量到期,查询数据量巨大,落在了数据库上,导致数据库压力过大
解决方案:
	随机设置过期时间
    使用分布式部署 将热点数据均匀分给不同的缓存数据库中
    设置热点数据永不过期
posted @ 2023-04-23 15:40  李阿鸡  阅读(36)  评论(0编辑  收藏  举报
Title