redis + mysql 架构的方式,常见有一下两种:

  1. mysql作为主库,redis作为缓存
  2. redis作为主库,mysql作为冷备库
    我这边用的主要是第一种方式:两者的关联是数据一致性,可被动同步和主动同步。数据来源最好是先mysql->redis。缓存更新触发可以是 被动更新/主动更新。

用Redis作Mysql数据库缓存,必须解决2个问题。首先,应该确定用何种数据结构存储来自Mysql的数据;在确定数据结构之后,还要考虑用什么标识作为该数据结构的键。
直观上看,Mysql中的数据都是按表存储的;更微观地看,这些表都是按行存储的。每执行一次select查询,Mysql都会返回一个结果集,这个结果集由若干行组成。所以,一个自然而然的想法就是在Redis中找到一种对应于Mysql行的数据结构。Redis中提供了五种基本数据结构,即字符串(string)、列表(list)、哈希(hash)、集合(set)和有序集合(sorted set)。经过调研,发现适合存储行的数据结构有两种,即string和hash。
要把Mysql的行数据存入string,首先需要对行数据进行格式化。事实上,结果集的每一行都可以看做若干由字段名和其对应值组成的键值对集合。这种键值对结构很容易让我们想起Json格式。因此,这里选用Json格式作为结果集每一行的格式化模板。根据这一想法,我们可以实现将结果集格式化为若干Json对象,并将Json对象转化为字符串存入Redis的代码。

参考:
浅谈Redis数据库的键值设计
如何将数据库中表转化到redis中
基于内存,redis,mysql的高速游戏数据服务器设计架构
缓存更新的套路
MySQL 查询缓存
热点数据缓存技术
mysql 缓存机制
初学Redis(1)——认识Redis
初学Redis(2)——用Redis作为Mysql数据库的缓存
初学Redis(3)——用Redis作为Mysql数据库的缓存
初学Redis(4)——简单实现Redis缓存中的排序功能

标签: none

添加新评论