摘要: 不一致产生的原因 我们在使用redis过程中,通常会这样做:先读取缓存,如果缓存不存在,则读取数据库。伪代码如下: 写数据库的伪代码如下: 不管是先写库,再删除缓存;还是先删缓存,再写库,都有可能出现数据不一致的情况 因为写和读是并发的,没法保证顺序,如果删了缓存,还没有来得及写库,另一个线程就来读 阅读全文
posted @ 2018-04-14 10:54 木易森林 阅读(17316) 评论(0) 推荐(2) 编辑
摘要: 编写LUA脚本 该脚本功能:先检查redis中某个key的值是否与期望的值V1一致,如果一致则将其修改为新的值V2并返回true,否则返回false。其实就是CAS。 注意,lua脚本中的变量都要是local 的,不可以是全局变量。否则会报错。详见 http://doc.redisfans.com/ 阅读全文
posted @ 2018-04-14 10:23 木易森林 阅读(4155) 评论(0) 推荐(0) 编辑
摘要: 在实际工作过程中,可以使用lua脚本来解决一些需要保证原子性的问题,而且lua脚本可以缓存在redis服务器上,势必会增加性能。 不过lua也会有很多限制,在使用的时候要注意。 在Redis中执行Lua脚本有两种方法:eval和evalsha eval 其中: <1> script:你的lua脚本 阅读全文
posted @ 2018-04-14 10:09 木易森林 阅读(790) 评论(0) 推荐(0) 编辑