首页 > 数据库 >redis高级-day6——python操作哨兵、python操作集群、缓存优化

redis高级-day6——python操作哨兵、python操作集群、缓存优化

时间:2023-04-23 15:01:58浏览次数:40  
标签:缓存 python redis 哨兵 day6 master sentinel

目录

一 、python操作哨兵

# 高可用架构后---》不能直接连某一个主库了---》主库可能会挂掉,后来它就不是主库了
# 之前学的连接redis的操作,就用不了了
import redis
conn=redis.Redis(host='',port=6379)
conn.set()
conn.close()

# 新的连接哨兵的操作
# 连接哨兵服务器(主机名也可以用域名)
# 10.0.0.101:26379
import redis
from redis.sentinel import Sentinel
# 哨兵的地址和端口
sentinel = Sentinel([('10.0.0.101', 26379),
                     ('10.0.0.101', 26378),
                     ('10.0.0.101', 26377)
         ],socket_timeout=5)

print(sentinel)
# 获取主服务器地址
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操作集群

# 一旦搭建了集群,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"))

三、缓存优化

3.1 redis缓存更新策略

# redis本身,内存存储,会出现内存不够用,放数据放不进去,有些策略,删除一部分数据,再放新的

# LRU/LFU/FIFO算法剔除:例如maxmemory-policy(到了最大内存,对应的应对策略)

LRU -Least Recently Used,没有被使用时间最长的
LFU -Least Frequenty Used,一定时间段内使用次数最少的
FIFO -First In First Out  先进先出

3.2 缓存击穿,雪崩,穿透

###  缓存穿透
#描述:
缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,如发起为id为“-1”的数据或id为特别大不存在的数据。这时的用户很可能是攻击者,攻击会导致数据库压力过大。
#解决方案:
1 接口层增加校验,如用户鉴权校验,id做基础校验,id<=0的直接拦截;
2 从缓存取不到的数据,在数据库中也没有取到,这时也可以将key-value对写为key-null,缓存有效时间可以设置短点,如30秒(设置太长会导致正常情况也没法使用)。这样可以防止攻击用户反复用同一个id暴力攻击
3 通过布隆过滤器实现


### 缓存击穿
#描述:
缓存击穿是指缓存中没有但数据库中有的数据(一般是缓存时间到期),这时由于并发用户特别多,同时读缓存没读到数据,又同时去数据库去取数据,引起数据库压力瞬间增大,造成过大压力
#解决方案:
设置热点数据永远不过期。

 
### 缓存雪崩
#描述:
缓存雪崩是指缓存中数据大批量到过期时间,而查询数据量巨大,引起数据库压力过大甚至down机。和缓存击穿不同的是,        缓存击穿指并发查同一条数据,缓存雪崩是不同数据都过期了,很多数据都查不到从而查数据库。
# 解决方案:
1 缓存数据的过期时间设置随机,防止同一时间大量数据过期现象发生。
2 如果缓存数据库是分布式部署,将热点数据均匀分布在不同搞得缓存数据库中。
3 设置热点数据永远不过期。


标签:缓存,python,redis,哨兵,day6,master,sentinel
From: https://www.cnblogs.com/zhihuanzzh/p/17346560.html

相关文章

  • Python partition使用技巧
    partition()方法用来根据指定的分隔符将字符串进行分割。如果字符串包含指定的分隔符,则返回一个3元的元组,第一个为分隔符左边的子串,第二个为分隔符本身,第三个为分隔符右边的子串。flask源代码的run模块中,出现的代码当做示例defrun():......_host='127.0.0.1'......
  • Python类变量和实例变量,傻傻分不清楚
    今日鸡汤坐看云卷云舒,静听花开花落。大家好,我是Python进阶者。一、前言前几天在Python最强王者交流群有个叫【Chloé】的粉丝问了一个关于Python类变量和实例变量的问题,这里拿出来给大家分享下,一起学习。这个粉丝在法国留学,所以提问是英文的,当然了英文看上去也不难,有点二级英文基......
  • 盘点一份JS逆向代码转换为Python代码的教程
    今日鸡汤云母屏风烛影深,长河渐落晓星沉。大家好,我是Python进阶者。前言前几天在Python星耀和最强王者交流群里边,好几个人都在问JS逆向的视频和相关代码,看来都在学习进阶的知识,真是卷不动了。正好这几天我也在看JS的部分学习资料,看到一个还不错的案例,这里拿出来给大家分享一下,也当记......
  • 每次记歌词——使用Python自动发邮件提醒你记歌词
    今日鸡汤八骏日行三万里,穆王何事不重来。大家好,我是Python进阶者。前言前几天在Python交流群里边,【冫马讠成】大佬分享了一个有趣的代码,用于定时发送歌词到邮箱,觉得挺有意思,这里拿出来给大家分享。实现思路实现思路倒是不难,其一是Python网络爬虫,将网页上的歌词信息抓取到,然后存起......
  • 盘点4种方法用Python批量提取[]括号内的第一个元素
    今日鸡汤葡萄美酒夜光杯,欲饮琵琶马上催。大家好,我是Python进阶者。前言前几天在才哥交流群里边遇到一个叫【上海-数据分析-小粒】的粉丝提了一个小问题,如下:数据如下:咋一看,这个题目倒是也确实不太难,群里提供思路的人也很多,一起来看看吧!思路和实现方法针对这个问题,群里的小伙伴纷纷......
  • 厉害了,Python也能使用动态链接库
    今日鸡汤未谙姑食性,先遣小姑尝。大家好,我是Python进阶者。前言动态链接库(DLL)想必大家都不陌生了吧,C/C++编程经常会用到,那么,它跟我们的Python有什么关系?要说关系恐怕也就是Python是用C写的了,不过,还有一点更重要的关系,那就是Python可以调用C函数,这一点,在Pywin32中有所体现。下面我......
  • Python能不能只选择合并一个excel当中指定的sheet 当中指定的列呢?
    春风桃李花开日,秋雨梧桐叶落时。大家好,我是皮皮。一、前言前几天在Python钻石交流群【不争】问了一个Python自动化办公的基础问题,这里拿出来给大家分享下。二、实现过程这里【瑜亮老师】、【狂吃山楂片】、【一级大头虾选手】给了一个解决思路,如下图所示:方法有很多。【瑜亮老师】......
  • Python正则怎么匹配\啊?
    玉容寂寞泪阑干,梨花一枝春带雨。大家好,我是皮皮。一、前言前几天在Python白银交流群【膨胀西瓜汁】问了一个Python正则表达式的问题,这里拿出来给大家分享下。下面是匹配的结果:二、实现过程这里【论草莓如何成为冻干莓】给了一个思路,在前面加个r,防止转义。后来发现\5不是反斜杠。......
  • 盘点几道Python面试题【ChatGPT作答】
    风吹仙袂飘飖举,犹似霓裳羽衣舞。大家好,我是皮皮。一、前言前几天在Python白银交流群看到了几道Python基础题目,这里拿出来给大家分享下,感兴趣的小伙伴可以学习学习。1、字典、元组、列表、集合的区别是什么?2、什么是装饰器,怎么用?3、为什么要有闭包?4、什么是订阅发布模式,写一个demo5......
  • Python生成requirements.txt方法
    Python生成requirements.txt方法 requirements.txt可以通过pip命令自动生成和安装,这种情况更适用于此项目是单独的虚拟python环境,生成requirements.txt文件。安装requirements.txt依赖:pipinstall-rrequirements.txt1.方法1:生成requirements.txt文件pipfreeze>re......