首先总结一下redis的特点
1、速度快
Redis是用C语言实现的;
Redis的所有数据存储在内存中。
下面是官方的bench-mark数据:
测试完成了50个并发执行100000个请求。
设置和获取的值是一个256字节字符串。
Linux box是运行Linux 2.6,这是X3320 Xeon 2.5 ghz。
文本执行使用loopback接口(127.0.0.1)。
结果:读的速度是110000次/s,写的速度是81000次/s 。
2、持久化
Redis的所有数据存储在内存中,对数据的更新将异步地保存到磁盘上。
3、支持多种数据结构
Redis支持五种数据结构:String、List、Set、Hash、Zset
4、支持多种编程语言
Java、php、Python、Ruby、Lua、Node.js
5、功能丰富
除了支持五种数据结构之外,还支持事务、流水线、发布/订阅、消息队列等功能。
6、源码简单
约23000行C语言源代码。
7、主从复制
主服务器(master)执行添加、修改、删除,从服务器执行查询。
8、高可用及分布式
Redis-Sentinel(v2.8)支持高可用
Redis-Cluster(v3.0)支持分布式
缓存思路,以系统组织架构为例,这些数据变动较小,适合使用缓存机制:
1、当系统组织架构变动时(save/update),把redis的组织架构缓存删除(假设缓存key为org-cache)
2、系统获取组织架构时先从缓存获取org-cache,若为空则读取数据库数据,把读取的数据放到org-cache缓存中
若不为空则直接获取缓存。
3、通过expire设置缓存过期时间 ,比如5分钟或10分钟,当缓存过期之后org-cache就获取不到了,这时就会访问数据库重新生成缓存,这样做的原因是避免数据库通过非系统手段更改时导致缓存没有同步的问题(比如自己手工更改数据库数据,就不能重新生成新的缓存,导致获取的数据不是最新的)。
简而言之就是写入数据库时生成缓存,读取数据库时删除缓存,这样就能到达到缓存与数据库的数据保持一致。