redis watch使用场景_[Redis] 常用类型及应用场景
主要类型字符串(strings,bitmaps)
散列(hashes)
列表(lists)
集合(sets)
有序集合(sorted sets)
hyperloglogs
发布订阅(pub/sub)
地理空间(geospatial)
Stream(5.0版本新增)
关于命令我推荐看这两个:
应用场景
strings缓存
分布式锁(setnx)
签到统计(setbit)
计数(incr)
hashes缓存
用户标签
lists队列
sets交集并集
数据去重
zset排行榜
延时任务(score存储执行时间戳)
限流
hyperloglogsuv统计(ip统计、id统计)
pub/sub发布订阅(不是特别可靠)
geospatial附近的人
Stream队列
发布订阅
其他
利用事务实现秒杀
以php代码为例:WATCH命令可以监控一个或多个键,一旦其中有一个键被修改(或删除),之后的事务就不会执行。监控一直持续到EXEC命令(事务中的命令是在EXEC之后才执行的,所以在MULTI命令后可以修改WATCH监控的键值)
// 库存为5
//实例化redis
$redis = new Redis();
//连接
$redis->connect('127.0.0.1', 6379);
$key = 'sale';
$redis->setnx($key, 0); // 此项不预定义亦可,保证key唯一就行
$redis->watch($key); //监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。
$sale_num = $redis->get($key);
if ($sale_num > 4) {
exit();
}
$redis->multi(); //标记事务
$redis->incr($key); //销量+1
sleep(1); //模拟真实环境
$ret = $redis->exec(); // 事务块内所有命令的返回值,按命令执行的先后顺序排列。
if ($ret) {
// 自定义的一个基于medoo的dbclass
include 'db.php';
$db = new db([
'database_type' => 'mysql',
'database_name' => 'test',
'server' => '13sai',
'username' => '13sai',
'password' => '*',
'charset' => 'utf8'
]);
$db->update('goods', ["stock_num[-]" => 1], ['id' => 1]);
}
布隆过滤器布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。
php实现推荐看看这篇文章:
当然,Redis自己也有第三方模块:
git clone https://github.com/RedisBloom/RedisBloom.git
cd redisbloom
make
/path/to/redis-server --loadmodule ./redisbloom.so
Bloom:向过滤器添加新项,如果尚不存在,则会为您创建一个新的过滤器
127.0.0.1:6379> BF.ADD newFilter foo
(integer) 1
Bloom:检查过滤器中是否存在项
127.0.0.1:6379> BF.EXISTS newFilter foo
(integer) 1
127.0.0.1:6379> BF.EXISTS newFilter notpresent
(integer) 0
限流 Redis-cell
// 提前安装rust哟
git clone https://github.com/brandur/redis-cell.git
cd redis-cell
cargo build --release
cp target/release/libredis_cell.dylib /path/to/modules/
redis-server --loadmodule /path/to/modules/libredis_cell.so
该模块只有1条指令cl.throttle,它的参数和返回值都略显复杂,接下来让我们来看看这个指令具体该如何使用。
> cl.throttle limitThrot 15 30 60 1
▲ ▲ ▲ ▲ ▲
| | | | └───── need 1 quota (可选参数,默认值也是1)
| | └──┴─────── 30 operations / 60 seconds 这是漏水速率
| └───────────── 15 capacity 这是漏斗容量
> └─────────────────── key
上面这个指令的意思是允许频率为每 60s 最多 30 次(漏水速率),漏斗的初始容量为 15,也就是说一开始可以取 15 个,然后才开始受漏水速率的影响。我们看到这个指令中漏水速率变成了 2 个参数,替代了之前的单个浮点数。用两个参数相除的结果来表达漏水速率相对单个浮点数要更加直观一些。
> cl.throttle limitThrot 15 30 60 1
1) (integer) 0 # 0 表示允许,1表示拒绝
2) (integer) 15 # 漏斗容量capacity
3) (integer) 14 # 漏斗剩余空间left_quota
4) (integer) -1 # 如果拒绝了,需要多长时间后再试(漏斗有空间了,单位秒)
5) (integer) 2 # 多长时间后,漏斗完全空出来(left_quota==capacity,单位秒)
基本上常见的场景就是这些了。
redis watch使用场景_[Redis] 常用类型及应用场景相关推荐
- Redis几种常用类型的使用场景
1.字符串类型(String) Redis 字符串是字节序列.Redis 字符串是二进制安全的,这意味着他们有一个已知的长度没有任何特殊字符终止,所以你可以存储任何东西,512 M为上限,主要的还是操 ...
- 微型计算机的典型应用场景,单片机有哪些类型和应用场景?-MCU解决方案
单片机是一种小型且低成本的微型计算机,其被设计为执行的嵌入式系统的特定任务,有多种MCU解决方案,如显示微波的信息,接收远程信号等.单片机包括处理器,存储器(RAM,ROM,EEPROM).串行端口. ...
- 原型模式的应用场景_前端常用设计模式
求关注 前端常见的设计模式主要有以下几种:1. 单例模式2. 工厂模式3. 策略模式4. 代理模式5. 观察者模式6. 模块模式7. 构造函数模式8. 混合模式 单例模式 这种设计模式的思想是确保一个 ...
- 大数据在高校的应用场景_制造业人工智能8大应用场景
随着智能制造热潮的到来,人工智能应用已经贯穿于设计.生产.管理和服务等制造业的各个环节. 人工智能的概念第一次被提出,是在20世纪50年代,距今已六十余年的时间.然而直到近几年,人工智能才迎来爆发式的 ...
- list类型的应用场景 —— Redis实战经验
list类型是简单的字符串列表,按照插入顺序排序.每个列表最多可以存储 232 - 1 个元素(40多亿) ,list类型主要有以下应用场景.. 1. 消息队列 list类型的lpop和rpush(或 ...
- redis专题:redis的常用数据结构及使用场景
文章目录 一. redis常用五大数据结构 〇:key的底层存储方式:SDS ①:string && 使用场景 ②:hash && 使用场景 ③:list && ...
- Redis源码-String:Redis String命令、Redis String存储原理、Redis String三种编码类型、Redis字符串SDS源码解析、Redis String应用场景
Redis源码-String:Redis String命令.Redis String存储原理.Redis String三种编码类型.Redis字符串SDS源码解析.Redis String应用场景 R ...
- (一)Redis常用数据类型及应用场景(Redis的解决方案汇总)
文章目录 一.Redis的介绍和安装 1.Redis是什么? 2.性能 3.支持的数据类型 二.数据类型实践案例 (一).String类型 (二).Hash类型(相对套娃) (三).list类型 (四 ...
- php两个数组之间去重,php数组去重、魔术方法、redis常用数据结构及应用场景
一.用函数对数组进行去重的方法 1. arrau_unique函数的作用 移除数组中重复的值. 将值作为字符串进行排序,然后保留 每个值第一次 出现的健名,健名保留不变. 第二个参数可以选择排序方式: ...
最新文章
- DllMain already defined in dllmain.obj错误
- Modernizr:HTML5和CSS3的开发利器
- IIS弹出服务没有及时响应启动或控制请求
- 记-curl post json数据,服务器后端$_POST接收不到数据
- scala学习-类与对象
- 怎么恢复linux定时器任务,定时操作 crontab at 以及恢复定时操作
- JavaScript异步编程之事件
- webservice4
- Python模拟谷歌浏览器发布文字、图片
- 软件工程导论面试常见问题
- 通过纯真IP数据库查询IP归属地信息
- 返利网app android版
- 最全最丰富的随机图片调用接口——三千之图
- 【懒人必备神器】教你用Python做一个自动抽奖程序啦~
- 计算机网络 --- 物理层(学习笔记)
- 学习JME3的第一次小结
- 居于mtk芯片安卓车机系统具体流程
- K_均值聚类算法(算法设计与C代码实现)
- MySQL优化系列16-优化MySQL的锁
- 网校搭建完成,课程还需要设计吗?
热门文章
- 成功输出消息后的采购订单不能取消审核
- SAP实施的难点在哪里?
- 通过LDB_PROCESS函数使用逻辑数据库
- 一招教你解决大数据量下的各种报表使用问题
- 华为q1设置虚拟服务器,如何使用华为华为Q1 Q1互联网路由设置图文教程 | 192.168.1.1手机登陆...
- java中xpath_java-xpath学习
- mysql里面的sql_mysql工作中的sql
- oracle先删后建,oracle 建表之前先删除语句
- mysql 允许远程_配置mysql允许远程连接的方法
- Python 多进程异常处理的方法,你会吗