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

2025-10-22 14:48:40

1、1.解决mysql数据改变时触发实时更新redis数据,并最少改动现有代码

所以想再加一层 cache 层,使用cache层可以在Controller和service二个层中相互调用。cache中的数据可以来源于dao也可以来源于service层

解决第一个问题,我的想法是,直接在sql执行时,获得sql语句分析sql , 决定是否更新redis中的数据。

2、2.做要实现redis主动缓存的相关配置,配置如下

<?php

returnarray(

// 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:1 sets来分别存放对应的ID号

(2)另使用一个hash来存储内容,结构因sort配置而变

 

hset list:cache:db_user:content:id:1 sort 1

 

hset list:cache:db_user:content:id:1 create_time 122323123

 

hset list:cache:db_user:content:id:1 last_time 1223231223

 

hset list:cache:db_user:content:id:1 login_num 20

 

hset list:cache:db_user:content:id:1 data 用户数据的序列化数据

上面非data用于排序使用最后获取列表使用sort 命令,例

sortlist:cache:ids BYlist:cache:db_user:content:id:*->sort DESC LIMIT 0 10

 

上面命令用于获取排过序id号数据,也可以直接获取最终的data数据

sort list:cache:idsBYlist:cache:db_user:content:id:*->sortGETlist:cache:db_user:content:id:*->data DESC LIMIT 0 10

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢