你可以通过MySql自定义函数 (user-defined function UDF),添加一个请求RedisClient的方法,然后在你需要MySql实时同步的地方,进行触发器掉用自定义函数,获取触发器内操作的数据,然后通过UDF直接同步到Redis中。 之前做的类似触发器,你可以参考一下:
-- 选择执行数据库 use taxdischosting; -- 删除UDF自定义Redis客户端方法 drop function if exists rediscli; -- 注册添加UDF自定义Redis客户端方法 create function rediscli returns integer soname "RedisDll.dll";
-- 删除操作触发器 drop trigger if exists insert_redis; drop trigger if exists update_redis; drop trigger if exists delete_redis;
-- 创建添加触发器 create trigger insert_redis after insert on tax_disc for each row begin -- 设置REDIS中KEY set @k=CONCAT(new.plateno,'_',new.platesign); -- 设置REDIS中VAL set @v=CONCAT( "{", """""""plateno"""""":""""""",IFNULL(new.plateno,-1),""""""",", """""""platenumber"""""":""""""",IFNULL(new.platenumber,-1),""""""",", """""""platename"""""":""""""",HEX(IFNULL(new.platename,-1)),""""""",", """""""platesign"""""":""""""",IFNULL(new.platesign,-1),""""""",", """""""stime"""""":""""""",IFNULL(new.stime,-1),""""""",", """""""etime"""""":""""""",IFNULL(new.etime,-1),""""""",", """""""ctime"""""":""""""",IFNULL(new.ctime,-1),""""""",", """""""cuser"""""":""""""",IFNULL(new.cuser,-1),"""""""", "}" );
-- 掉用UDF客户端函数同步REDIS
select rediscli('D:\\RedisApp\\Redis\\redis-cli.exe',CONCAT('-h 127.0.0.1 -p 6379 -n 2 set ',@k,' ',@v)) into @ret;
end;
-- 创建更新触发器 create trigger update_redis after update on tax_disc for each row begin -- 设置REDIS中KEY set @k=CONCAT(new.plateno,'_',new.platesign); -- 设置REDIS中VAL set @v=CONCAT( "{", """""""plateno"""""":""""""",IFNULL(new.plateno,-1),""""""",", """""""platenumber"""""":""""""",IFNULL(new.platenumber,-1),""""""",", """""""platename"""""":""""""",HEX(IFNULL(new.platename,-1)),""""""",", """""""platesign"""""":""""""",IFNULL(new.platesign,-1),""""""",", """""""stime"""""":""""""",IFNULL(new.stime,-1),""""""",", """""""etime"""""":""""""",IFNULL(new.etime,-1),""""""",", """""""ctime"""""":""""""",IFNULL(new.ctime,-1),""""""",", """""""cuser"""""":""""""",IFNULL(new.cuser,-1),"""""""", "}" );
-- 掉用UDF客户端函数同步REDIS
select rediscli('D:\\RedisApp\\Redis\\redis-cli.exe',CONCAT('-h 127.0.0.1 -p 6379 -n 2 set ',@k,' ',@v)) into @ret;
end;
-- 创建删除触发器 create trigger delete_redis after delete on tax_disc for each row begin -- 设置REDIS中KEY set @k=CONCAT('D:\RedisApp\Redis\redis-cli.exe','-h 127.0.0.1 -p 6379 -n 2 del ',old.plateno,'_',old.platesign); -- 掉用UDF客户端函数同步REDIS select rediscli(@k) into @ret; end;
redis或者MySQL本身没有这类功能,需要你自己去实现,类似的:
如果要求强一致:
如果可以容忍不一致可以定时更新
应该没有你说的功能。
干脆在你修改数据库的操作那里添加下redis的操作,
当然这种操作如果太频繁建议加一个crontab,定时更新数据
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。