这篇文章的主题:
第一、并非介绍lua如何使用?
参考:http://www.codingnow.com/2000/download/lua_manual.html
第二、并非介绍redis如何嵌入lua?
参考:http://blog.nosqlfan.com/html/4099.html
redis结合lua莫过于script load, script flush, script exists, eval, evalsha命令;
作者在使用主从方案时,遇到一个问题:停止从库删掉rdb,重启redis服务,发现之前load的脚本没有从主库同步过来,但是其他的key都已同步;到底怎么回事?
经过对从库的一番测试(主库成功load脚本,从库已正常同步):
场景一:开启rdb,停服,删除rdb,重启服务
结果:脚本不存在
场景二:开启aof,停服,删除aof,重启服务
结果:脚本不存在
场景三:同时开启rdb和aof,停服,删除rdb,重启服务
结果:脚本存在
场景四:同时开启rdb和aof,停服,删除aof,重启服务
结果:脚本不存在
rdb文件结构:
参考:http://redisbook.readthedocs.io/en/latest/internal/rdb.html
经过分析rdb文件结构与rdb文件中的内容后发现,其实问题的根源在于redis的主从同步机制与持久化机制,rdb仅保存key-pair,即保存数据集。
不会保存script命令执行的;但是aof会记录客户端的每一个操作;因此在使用lua脚本时,个人建议使用eval的方式,每次向服务端提交脚本的方式进行。尽量避免script load,尤其是redis使用默认配置的情况下。
。。。待完善。。。