前些天我去面试,面试官问了我一个问题,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:因为技术的邂逅,哈哈)
最后 有什么不对的欢迎指出 谢谢 大家 互相学习嘛~~~