首页
学习
活动
专区
圈层
工具
发布

扩展Redis:增加Redis命令

一、背景 Redis因高性能、轻量的优秀特性成了互联网公司缓存的标配,有的时候我们想增加一些自定义的命令,主要是重度使用Redis的场景,像抢购的场景,要保证多个Redis命令的事务性,如果没有很好的原子性保证...今天我们以一个实际的案例讲述如何增加一个Redis命令,这个命令主要用于防刷的场景: 经常要将某个IP或某个用户封禁一段时间,如果不用这个命令的方案如下: 先incr下,然后判断是否为1,是1则设置过期时间...代码 本文所用Redis版本为3.2.11; 下载代码并切到3.2.11分支 git clone https://github.com/antirez/redis git checkout 3.2.11...= { …… {"incexpire",incrExpireCommand,4,"wm",0,NULL,1,1,1,0,0} }; redisCommandTable为一个数组,每个项表示一个redis...三、写在最后 最后我们还是要问自己我们的场景中是否有增加Redis命令的必要,如果需要则要把握好各层之间的职责,不要让Redis最后变成处理业务去了;一般来说中间件层一般处理比较通用的功能,越到下面的层应该越稳定

1K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Redis的Lua扩展

    基本环境 # redis ➜ ~ redis-server -v Redis server v=3.2.6 # lua ➜ ~ lua -v Lua 5.2.4 Copyright (C) 1994...-2015 Lua.org, PUC-Rio 参考文档: 官方文档 Redis Lua 总结 Redis脚本 Redis执行Lua脚本示例 概要 Redis从2.6版本开始引入了对Lua脚本的支持,通过在服务器中嵌入...Lua环境,Redis客户端可以使用Lua脚本,直接在服务器端执行多个Redis命令。...Redis会将整个脚本作为一个整体执行,中间不会插入其他命令。因此脚本编写过程无需担心出现竞态条件,无需使用事务 复用。客户端发送的脚本会永久存在Redis中。...* --eval,告诉redis-cli读取并运行后面的lua脚本 * path/to/redis.lua,是lua脚本的位置,也可以直接为脚本字符串。

    1.1K10

    多姿势扩展 Redis 命令

    二、为何选择Redis 一些著名的消息队列组件,如ActiveMQ ,本身支持消息延迟投递,为何本文选择Redis呢?...一方面是引入新组建有学习、运维、接入成本,而组内已积累一定Redis开发运维经验;另一方面则是基于Redis实现这样一个组件难度也不大。所以决定采用Redis。...由于使用原生Redis无法满足需求,我们决定扩展Redis命令。 四、多姿势命令扩展 官方势 LUA脚本是利用3.X版官方特性实现命令扩展的途径。...时髦势 使用[Redis 4.0模块实现。此处是GitHub传送门。 相比前两种方法,此方法逻辑收归在服务端,且不需要修改Redis源码便于升级。但需要注意资源释放、复制机制等细节,谨防踩坑。...兼容性:要求所有从机、或加载AOF/RDB的实例均实现了新的命令,即均为修改版Redis或均加载了扩展模块。 2 .

    2.8K00

    Redis 数据结构扩展

    0x01:Pipeline 在用 普通 jedis 方式连接 redis 的时候,由于每次发送命令都会与 redis 进行连接,而实际处理命令的时间是非常短的,而连接却十分耗时,性能很低 n 个命令时间...= n 次连接时间 + n 次处理时间 使用一个缓冲区,命令全部写入缓冲区中,一次性发送给 redis,这样就可以不用建立多次连接 n 个命令时间 = 1 次连接时间 + n 次处理时间 注意:使用...System.currentTimeMillis(); System.out.println(end - start); // 118 ms jedis.close(); 0x02:GEO 是 zset 数据类型的一个扩展...locations) 所以可以使用 zrem key member 删除元素 zrange key 0 -1 表示所有 返回指定集合中所有value 0x03:hyperLogLog Redis...Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定的、并且是很小的 在 Redis 里面,每个

    39930

    【 Redis | 实战篇 扩展 】

    :一人一赞,那么我们使用set集合(不可重复性),key为笔记id,value为点赞用户id 同时采用数据库和Redis:Redis做缓存实现快速查询,数据库做数据持久化 优化:由于前端需要后端返回一个布尔值...的key String key = RedisConstants.BLOG_LIKED_KEY + id; //查询Redis Long userId =...Redis在3.2版本中加入了对GEO的支持,允许存储地理坐标信息,帮助我们根据经纬度来检索数据。...BitMap用法: 介绍:Redis中是利用string类型数据结构实现BitMap,因此最大上限是512M,转换为bit则是2A32个bit位。...分析:UV统计在服务端·实现很困难,因为要判断该用户是否已经统计过了,那么就需要查询数据,因此我们的已经访问的用户信息都需要保存到Redis中,如果用户量大,需要考虑内存 解决:

    28510

    php7安装redis扩展

    参考贴 确认是php7后开始安装 移动到下载文件夹:cd /root/src(具体文件夹自己选择) 下载php7-redis:wget https://github.com/phpredis/phpredis...在vi中按 esc键,输入 /extension=按回车键 能找到很多extension=,按i进入编辑模式,在这堆extension=下面找一空行,没有空行按回车键另起一行,写上extension=redis.so...php-fpm:/etc/init.d/php-fpm restart(如果重启失败,请另找方法重启php-fpm,如果用的是Apache,重启Apache即可) 好了,这时候打开phpinfo()页面,搜索redis...附 如果php要访问的redis服务不在本机,除了连接时ip要写对,redis服务那边redis.conf中的bind一行要加入本机ip,多个ip之间用空格隔开,比如:bind 192.168.1.100

    1.2K40

    Redis的Lua的功能扩展

    Redis支持使用Lua脚步来进行功能扩展,这个能力给Redis带来了更多的应用场景,你可以编写若干命令组合,作为一个小型的非阻塞事务或者更新逻辑 使用脚本的好处 1更快 Redis应用的使用方式很多都是...这需要客户端与服务端进行两次或者多次通信,而如果把中间的compute过程转移到服务端执行,则可以大幅地减少round-trip时间 2减少网络开销 将多个请求通过脚本的形式一次发送,减少网络时延 3原子操作 redis...return msg 执行 redis-cli EVAL "$(cat hello.lua)" 0 执行结果 "Hello, world!"...("INCR", "links:counter") redis.call("HSET", "links:urls", link_id, "http://test.com") return link_id...执行 src/redis-cli EVAL "$(cat url.lua)" 0 执行结果 "1" 验证 登录redis客户端 > hget links:urls 1 返回信息 "http

    1K50

    redis慢查询日志,php安装redis扩展,redis存储session,redis主从配置

    笔记内容:redis慢查询日志,php安装redis扩展,redis存储session,redis主从配置 笔记日期:2018-1-03 ---- 21.18 redis慢查询日志 21.19 php安装...redis扩展 21.20 redis存储session 21.21 redis主从配置 redis慢查询日志 和mysql一样redis也有慢查询日志,redis的慢查询日志默认是开启的。...2 //只列出2条 slowlog len //查看慢查询日志条数 php安装redis扩展 下载、解压、编译安装,素质三连: [root@localhost ~]# cd /usr/local/...redis服务: killall redis-server redis-server /etc/redis.conf 5.测试把session存储到redis里: [root@localhost...: killall redis-server redis-server /etc/redis.conf 测试: 在从机器上进入redis的命令行,然后执行keys *命令,看看主上的数据是否已经同步过来

    66810
    领券