redis的科学用法
与MySQL数据库不同的是,Redis的数据是存在内存中的,它的读写速度非常快,每秒可以处理超过10万次读写操作,因此redis被广泛应用于缓存。
[TOC]
redis 的优点
- 1.速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)
- 2.支持丰富数据类型,支持string,list,set,sorted set,hash
- 3.支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行
- 4.丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除
推荐的 redis 使用方法
- 代码层面,应用服务应当具备合理的自动重连机制;
- 当redis启动时,从mysql从库读取所有表键值并存入redis;
- 读场景:读redis->没有,读mysql->把mysql数据写回redis,有的话直接从redis中取;
- 写场景:若并发不高的话,写mysql->成功,再写redis;若并发高则采取异步写,写入redis缓存就直接返回,定期或特定动作将数据保存到mysql,可以做到多次更新、一次保存;
- 设置expire失效时间,只将经常访问的数据缓存到redis,体现缓存的优势;
注:如果缓存中存储的数据量与mysql数据库的一致,那么就无法体现出缓存的优势了。给缓存中的每条数据设置一个过期时间,比如30秒,如果30秒后这条数据没有被第二次访问,就会在缓存中被删除。而如果30秒内,这条数据被再次访问了,那么就重新给这条数据设置一个过期时间。
以上方案的好处是:
- 当redis迁移或服务短期不可用的时候,不会影响到业务(短期内mysql连接数增多);
redis 数据类型的典型应用场景
- redis数据类型的典型应用场景:
数据类型 | 应用场景 | 备注 |
---|---|---|
String | Session会话 | 常见用法 |
业务缓存 | 常见用法 | |
分布式锁 | - | |
Int | 计数器 | 常见用法 |
限流 | - | |
全局唯一ID | - | |
Hash | 电商购物车 | - |
Bitmap | 用户签到 | - |
List | 消息队列 | - |
ZSet | 排行榜 | - |
redis 最适合的场景
- 1.会话缓存(Session Cache)
- 2.全页缓存(FPC)
- 3.队列
- 4.在主页中显示最新的项目列表。因为Redis使用的是常驻内存的缓存,速度非常快。
- 5.按照用户投票和时间排序
- 6.排行榜/计数器。Redis在内存中对数字进行递增或递减的操作实现的非常好。假定你是根据你用户的分数做递增的排序,如果你想返回用户及用户的分数,可以执行:
ZRANGE user_scores 0 10 WITHSCORES