redis过期策略+事务+分布式锁+单redis服务器锁
过期策略
相关知识:redis 内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略。redis 提供 6种数据淘汰策略:
- voltile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰
- volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰
- volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰
- allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
- allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰 no-enviction(驱逐):禁止驱逐数据
事务
|
import redis pool = redis.ConnectionPool(host = '10.211.55.4' , port = 6379 ) conn = redis.Redis(connection_pool = pool) # transaction默认为False,只可以完成批量提交的作用,节省网络延时 # 改为True后可以实现事务功能 # pipe = r.pipeline(transaction=False) pipe = conn.pipeline(transaction = True ) # 开始事务 pipe.multi() pipe. set ( 'name' , 'alex' ) pipe. set ( 'role' , 'sb' ) pipe.lpush( 'roless' , 'sb' ) # 提交 pipe.execute() |
单redis服务器锁
|
import redis conn = redis.Redis(host = '127.0.0.1' ,port = 6379 ) # conn.set('count',1000) val = conn.get( 'count' ) print (val) with conn.pipeline(transaction = True ) as pipe: # 监视,自己的值没有被修改过 conn.watch( 'count' ) # 执行操作 pipe.multi() old_count = conn.get( 'count' ) count = int (old_count) print ( '现在剩余的商品有:%s' ,count) input ( "问媳妇让不让买?" ) pipe. set ( 'count' , count - 1 ) # 执行,把所有命令一次性推送过去 pipe.execute() |
分布式锁
在不同进程需要互斥地访问共享资源时,分布式锁是一种非常有用的技术手段。
原理 : 设置一个值并设置过期时间,当其他的连接要修改数据时会去读取那个值,如果有说明是被锁住的.(需要注意过期时间, 防止加锁时,或者数据没有修改完成锁就失效)
成功条件 : 超过一半的redis实例设置成功
官方提供的包下载解压缩,切换到文件中
- python setup.py build
- python setup.py install
使用 :
|
from redlock import Redlock dlm = Redlock( [ { "host" : "localhost" , "port" : 6379 , "db" : 0 }, { "host" : "localhost" , "port" : 6379 , "db" : 0 }, { "host" : "localhost" , "port" : 6379 , "db" : 0 }, ] ) # 加锁,acquire my_lock = dlm.lock( "my_resource_name" , 10000 ) # 第一个参数就是设置的键 if my_lock: # 进行操作 # 解锁 dlm.unlock(my_lock) else : print ( '获取锁失败' ) |
redis过期策略+事务+分布式锁+单redis服务器锁的更多相关文章
- redis过期策略设置
中6中过期策略的具体方式. redis 中的默认的过期策略是volatile-lru .设置方式 可以通过命令直接设置 config set maxmemory-policy volatile-lru ...
- 老司机带你玩转面试(2):Redis 过期策略以及缓存雪崩、击穿、穿透
前文回顾 建议前一篇文章没看过的同学先看下前面的文章: 「老司机带你玩转面试(1):缓存中间件 Redis 基础知识以及数据持久化」 过期策略 Redis 的过期策略都有哪些? 在聊这个问题之前,一定 ...
- Redis过期策略(转)
1.设置过期时间 expire key time(以秒为单位)--这是最常用的方式 setex(String key, int seconds, String value)--字符串独有的方式 具体的 ...
- 第九章 Redis过期策略
注:本文主要参考自<Redis设计与实现> 1.设置过期时间 expire key time(以秒为单位)--这是最常用的方式 setex(String key, int seconds, ...
- redis过期策略、内存淘汰策略、持久化方式、主从复制
原文链接:https://blog.csdn.net/a745233700/article/details/85413179 一.Redis的过期策略以及内存淘汰策略:1.过期策略:定期删除+惰性删除 ...
- redis 过期策略你知道多少,看完文章你会不自觉说喔哦
Redis 所有的数据结构都可以设置过期时间,时间一到,就会自动删除.你可以想象 Redis 内部有一个死神,时刻盯着所有设置了过期时间的 key,寿命一到就会立即收割. 你还可以进一步站在死神的角度 ...
- Redis过期策略
一.设置过期时间 expire key time(以秒为单位) -- 这是最常用的方式 setex(String key, int seconds, String value) -- 字符串独有的方式 ...
- 了解Redis过期策略及实现原理
我们在使用redis时,一般会设置一个过期时间,当然也有不设置过期时间的,也就是永久不过期. 当我们设置了过期时间,redis是如何判断是否过期,以及根据什么策略来进行删除的. redis设置过期时间 ...
- redis过期策略和内存淘汰机制
目录 常见的删除策略 redis使用的过期策略:定期删除+惰性删除 定期删除 惰性删除 为什么要采用定期删除+惰性删除2种策略呢? redis内存淘汰机制 常见的删除策略 1.定时删除:在设置键的过期 ...
随机推荐
- (转)C系程序员面试必知必会之大端小端
C程序员经常被问及的一道面试题是:什么是大端/小端,怎么样判断是大端/小端?大端小端问题对于嵌入式程序员绝对不会陌生(否则,别告诉我你是搞嵌入式的),它与CPU体系结构有关.比如常见的X86处理器 ...
- Hashed Indexes Geospatial Index
Indexes — MongoDB Manual https://docs.mongodb.com/manual/indexes/ 地理索引 哈希索引
- jQuery整理笔记九----功能性表格开发
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/hai_cheng001/article/details/27536965 演示样例中用到的一些图片. ...
- (C)inline关键字
背景(C&C++中) 一.inline关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中表达式形式的宏定义. 表达式形式的宏定义一例:#define ExpressionNam ...
- java性能时间与空间消耗
Java性能时间与空间消耗 一.减少时间消耗 标准代码优化 (1) 将循环不变量的计算移出循环 例如:for (int i=0; i<size()*2; i++) { ... } ------& ...
- Oracle :修改数据库服务器字符集
最近,有现场反应,程序显示乱码.感觉很奇怪,该系统已经卖出去无数了.肯定是现场数据库字符集有问题,经过查看, 现场环境: window系统,oracle10g. 我们要求的数据库字符集是AL32UTF ...
- codeforces 690C3 C3. Brain Network (hard)(lca)
题目链接: C3. Brain Network (hard) time limit per test 2 seconds memory limit per test 256 megabytes inp ...
- LRU原理和Redis实现——一个今日头条的面试题
看了评论,发现有些地方有问题,更新了图和一些描述,希望可以更清晰一些,也欢迎关注,还会有干货文章 -------- 很久前参加过今日头条的面试,遇到一个题,目前半部分是如何实现 LRU,后半部分是 R ...
- Android应用开发完全退出程序的通用方法
在开发一个android应用时,有可能有N个Activity,而在每个Activity里的菜单里有个"退出程序"菜单,这里就要完全退出程序了,所以今天给大家分享的是Android应 ...
- 详细的Ajax使用
1. ajax对xml的接收和处理 xml主要作用: 主要保存和传输数据 1. xml文档结构 dom操作xml getElementsByTagName(); //根据标签名获取元素 childNo ...