Rumah > pangkalan data > Redis > redis如何保证数据一致性

redis如何保证数据一致性

(*-*)浩
Lepaskan: 2019-11-28 09:56:20
asal
16203 orang telah melayarinya

现在redis在互联中有大量的使用,根据业务的不同,其使用上也有所不同,但一般都有数据存储和缓存的一致性问题,下面就给大家介绍几个比较成熟实用的方案。

redis如何保证数据一致性

方式1:

数据库保存数据,redis不persist redis启动后,从数据库加载数据 不要求强一致实时性的读请求,都由redis处理 要求强一致实时性的读请求,由数据库处理 写请求有2种处理方式,由数据库处理      (推荐学习:Redis视频教程

应用先写道数据库,然后更新redis

应用先写道数据库,然后其它daemon同步到redis 

优点:redis启动不用处理redis数据和数据库不一致 

缺点:redis启动给数据库很大的读压力

方式2:

数据库和redis分别处理不同的数据类型,数据库处理要求强一致实时性的数据,例如金融数据、交易数据;Redis处理不要求强一致实时性的数据,例如网站最热贴排行榜

redis和MySQL数据的同步,代码级别大致可以这样做: 读: 读redis->没有,读mysql->把mysql数据写回redis 写: 写mysql->成功,写redis

并发不高的情况: 读: 读redis->没有,读mysql->把mysql数据写回redis,有的话直接从redis中取; 写: 写mysql->成功,再写redis;

并发高的情况: 读: 读redis->没有,读mysql->把mysql数据写回redis,有的话直接从redis中取; 写:异步话,先写入redis的缓存,就直接返回;定期或特定动作将数据保存到mysql,可以做到多次更新,一次保存;

--备注:如果写redis要使用redis的事务:

127.0.0.1:6379> WATCH id
OK
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> INCR id
QUEUED
127.0.0.1:6379> EXEC
1) (integer) 342183
127.0.0.1:6379>
Salin selepas log masuk

方式3:

使用lua脚本:redis在使用lua使用同时只允许一个脚本执行,符合事务的原子性,但一个lua脚本不能执行时间过大,不然会阻塞

EVAL

EVAL命令对 Lua 脚本进行执行求值。

语法:

EVAL script numkeys key [key …] arg [arg …]
Salin selepas log masuk
script lua脚本内容 注意的是脚本不应该是Lua函数。
numkeys 表示指定键名参数的个数。
key [key ...] 表示脚本对应的key值列表 在脚本中可以使用KEYS[1] KEYS[2] KEYS[3]KEYS[n] n从1开始 。
arg [arg ...] 命名行中传递的参数列表 在脚本中可以使用ARGV[1] ARGV[2] ARGV[3]ARGV[n] n从1开始 。
Salin selepas log masuk

一个示例胜过千言万语的解释

eval "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 id name 3 mytest
Salin selepas log masuk

执行上面脚本返回

1) "id"2) "name"
3) "2"
4) "mytest"
Salin selepas log masuk

更多Redis相关技术文章,请访问Redis入门教程栏目进行学习!

Atas ialah kandungan terperinci redis如何保证数据一致性. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan