养生 装修 购物 美食 感冒 便秘 营销 加盟 小吃 火锅 管理 创业 搭配 减肥 培训 旅游

如何实现基于sql实现redis主动缓存

时间:2024-11-15 11:21:32

要实现主动缓存,主要的问题在于以下几点(1)怎么触发更新、删除、插入数据库时,同步更新redis里的数据(2)redis中数据的存储采用怎么的方式(3)主动缓存中怎么排序和分类(4)redis意外停止服务的情况下,如果正常提供列表服务(5)列表缓存应该工作在哪一层,dao?service?(6)redis中单个数据失效的情况下怎么剔除(7)如果减少网络请求,尽量少的命令获取一个分布的数据

工具/原料

00

Windows0

基于Redis分析sql实现主动缓存

方法/步骤

1、1.解决mysql数据改变时触发实时更新redis数据,并最少改动现有代码所以想再加一层cache层,使用cache层可以在Controller和service二个层中相互调用。cache中的数据可以来源于dao也可以来源于service层解决第一个问题,我的想法是,直接在sql执行时,获得sql语句分析sql,决定是否更新redis中的数据。

2、2.做溴溢菏确要实现redis主动缓存的相关配置,配置如下<?phpreturnarray(//db_user表做数据缓存'稆糨孝汶;db_user'=>array(//定义分类的字段,用于生成多个id索引set'cate'=>array('group_id','vip'),//设定排序所要用到的字段,数字'sort'=>array('sort','create_time','last_time','login_num'),'callback'=>array('get'=>array('common::getUserService()','getOne'),//回调类与方法,用于更新单个数据//用于当redis数据丢失的情况从mysql中还原数据,需要用于反射来注入数据,有待完善'getlist'=>array('common::getUserService()','getList'),),),);

3、主要意义在配置中告诉程序耦嘀扔硇怎么输出,如果redis失效的情况下,绕过redis缓存系统,直接按回调中的方法从mysql中输出数据撅掏浑锌。redis怎么存储缓存数据:(1)用一个或多个sets存id号索引数据。比如配置中cate字段没有设置,就类型listcache:db_user:ids如果配置了cate字段则出现一组listcache:db_user:ids:cate:group_id:1sets来分别存放对应的ID号(2)另使用一个hash来存储内容,结构因sort配置而变hsetlist:cache:db_user:content:id:1sort1hsetlist:cache:db_user:content:id:1create_time122323123hsetlist:cache:db_user:content:id:1last_time1223231223hsetlist:cache:db_user:content:id:1login_num20hsetlist:cache:db_user:content:id:1data用户数据的序列化数据上面非data用于排序使用最后获取列表使用sort命令,例sortlist:cache:idsBYlist:cache:db_user:content:id:*->sortDESCLIMIT010上面命令用于获取排过序id号数据,也可以直接获取最终的data数据sortlist:cache:idsBYlist:cache:db_user:content:id:*->sortGETlist:cache:db_user:content:id:*->dataDESCLIMIT010

© 一点知识