使用Lua脚本完成高并发下Redis数据修改
2018-01-26 19:11
288 查看
前些天我去面试,面试官问了我一个问题,Redis缓存怎么在高并发情况下保证数据操作的原子性,我当时后懵逼了,于是回来后我就花了点时间想想怎么去完成这个功能.具体怎么实现请接着往下看
在看这篇文章的时候希望大家先对Lua有一个了解
http://blog.csdn.net/mitu405687908/article/details/51137956 http://redisbook.readthedocs.io/en/latest/feature/scripting.html
Redis相关资料
https://www.cnblogs.com/silent2012/p/5368925.html
在Redis中执行Lua脚本
http://blog.csdn.net/mn960mn/article/details/51918886 https://www.cnblogs.com/huangxincheng/p/6230129.html http://blog.csdn.net/u011489043/article/details/78820285
看完了这些,相信大家都对Lua和Redis有一定的了解了吧!接下来我就直接贴代码了,怎么实现Redis在高并发环境下对缓存数据的修改
Lua脚本
Java代码
设置一个测试值
模拟高并发--开三个线程来对name的值进行修改
这里解释一下listArgs的参数貌似也传递到Lua脚本中了,但是我没有用的listArgs的值,后面再研究研究
线程启动:
输出结果:
上面是结果的一部分,经过我的肉眼仔细排查,结果是完全正确的,意味着我们实现了使用Redis+Lua脚本完成了对并发状态下Redis缓存数据的操作.在没有使用锁的情况下哦!!!!!
使用这种解决方案的项目包括京东的秒杀系统,可以参考http://blog.csdn.net/imxiangzi/article/details/52155451
第一次写这个东西!~纯属分享 大家看看希望有所帮助 我一开始也查了好多好多资料 包括请教了一名远在北京的同学(PS:因为技术的邂逅,哈哈)
最后 有什么不对的欢迎指出 谢谢 大家 互相学习嘛~~~
在看这篇文章的时候希望大家先对Lua有一个了解
http://blog.csdn.net/mitu405687908/article/details/51137956 http://redisbook.readthedocs.io/en/latest/feature/scripting.html
Redis相关资料
https://www.cnblogs.com/silent2012/p/5368925.html
在Redis中执行Lua脚本
http://blog.csdn.net/mn960mn/article/details/51918886 https://www.cnblogs.com/huangxincheng/p/6230129.html http://blog.csdn.net/u011489043/article/details/78820285
看完了这些,相信大家都对Lua和Redis有一定的了解了吧!接下来我就直接贴代码了,怎么实现Redis在高并发环境下对缓存数据的修改
Lua脚本
Java代码
设置一个测试值
模拟高并发--开三个线程来对name的值进行修改
这里解释一下listArgs的参数貌似也传递到Lua脚本中了,但是我没有用的listArgs的值,后面再研究研究
线程启动:
输出结果:
上面是结果的一部分,经过我的肉眼仔细排查,结果是完全正确的,意味着我们实现了使用Redis+Lua脚本完成了对并发状态下Redis缓存数据的操作.在没有使用锁的情况下哦!!!!!
使用这种解决方案的项目包括京东的秒杀系统,可以参考http://blog.csdn.net/imxiangzi/article/details/52155451
第一次写这个东西!~纯属分享 大家看看希望有所帮助 我一开始也查了好多好多资料 包括请教了一名远在北京的同学(PS:因为技术的邂逅,哈哈)
最后 有什么不对的欢迎指出 谢谢 大家 互相学习嘛~~~
相关文章推荐
- 在redis一致性hash(shard)中使用lua脚本的坑
- 【COCOS2DX-LUA 脚本开发之十】使用Lua CJSON库进行encode与decode操作完成对Json数据转化
- PHP中使用redis执行lua脚本示例
- redis实现附近的人,但jedis中没有相关api,那么直接使用lua脚本执行。
- Nginx 内嵌lua脚本,结合Redis使用
- redis中的事务、lua脚本和管道的使用场景
- redis中的事务、lua脚本和管道的使用场景
- Redis使用lua脚本
- 【COCOS2DX-LUA 脚本开发之十】使用Lua CJSON库进行encode与decode操作完成对Json数据转化
- Redis Lua脚本的使用
- 【COCOS2DX-LUA 脚本开发之十】使用Lua CJSON库进行encode与decode操作完成对Json数据转化
- 使用lua脚本和jedis实现redis的hmsetnx命令,操作hash表时不覆盖原有数据
- 在Spring中使用Redis Lua脚本批量删除缓存
- redis哨兵模式使用lua脚本实现分布式锁
- Redis之与redis关联使用的脚本lua的基本语法
- Redis进阶实践之八Lua的Cjson在Linux下安装、使用和用C#调用Lua脚本(转载8)