首先redis在key value值查询的速度高于mysql,所以缓存有利于提高性能;
redis是内存型数据库,不可能存储过大的数据;而mysql是存储在硬盘上的,可以支持更大规模的数据,成本更低
-------
一般mysql结合redis缓存,读取数据时先从redis中查询,查询不到再从mysql中查询;写入数据首先更新mysql,然后拿到更新结果之后,刷新缓存数据或者删除缓存数据
-----------------------
以一个黑名单功能为例:
mysql中的表结构可能是一行记录的列名分别为
roleId userId serverId blackedRoleId blackedUseId blackedServerId createTime status 等等
以下几种操作可能的流程:
1.查询角色IdA的所有黑名单数据
1)制造A角色黑名单的blacklistrediskey,并查询此key,是否缓存有此角色的黑名单列表
若有,则直接返回,若没有,则进入下一步
2) 向mysql查询角色的黑名单列表,即使用sql语句,查询到结果后
3) 使用blacklistrediskey存储到redis当中
这里存储的redis数据类型为hash类型即Map,map的key为黑名单角色id,value值为黑名单角色信息,当然也可以用list或者set来存储;
这里更新缓存时可能会用到redis的pipeline技术,即一次性的将多条redis指令写入redis数据库,同时我们一般都会设置redis的缓存过期时间用来清除长期不用的缓存。