1. 什么是Redis
Redis是Remote Dictionary Server(远程数据服务)的缩写
由意大利人 antirez(Salvatore Sanfilippo) 开发的一款 内存高速缓存数据库
该软件使用C语言编写,它的数据模型为 key-value
它支持丰富的数据结构(类型),比如 String list hash set sorted set。
可持久化,保证了数据安全。
缓存:
有两种类型 :数据缓存、页面缓存(smarty)
使用缓存减轻数据库的负载。
在开发网站的时候如果有一些数据在短时间之内不会发生变化,而它们还要被频繁访问,为了提高用户的请求速度和降低网站的负载,就把这些数据放到一个读取速度更快的介质上(或者是通过较少的计算量就可以获得该数据)
该介质可以是文件、数据库、内存,内存经常用于数据缓存。
缓存的两种形式:
页面缓存经常用在CMS(content manage system)内存管理系统里边
数据缓存经常会用在页面的具体数据里边
1. 使用redis有哪些好处?
(1) 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)
(2) 支持丰富数据类型,支持string,list,set,sorted set,hash
(3) 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行
(4) 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除
2. redis相比memcached有哪些优势?
(1) memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型
(2) redis的速度比memcached快很多
(3) redis可以持久化其数据
3. redis常见性能问题和解决方案:
(1) Master最好不要做任何持久化工作,如RDB内存快照和AOF日志文件
(2) 如果数据比较重要,某个Slave开启AOF备份数据,策略设置为每秒同步一次
(3) 为了主从复制的速度和连接的稳定性,Master和Slave最好在同一个局域网内
(4) 尽量避免在压力很大的主库上增加从库
(5) 主从复制不要用图状结构,用单向链表结构更为稳定,即:Master <- Slave1 <- Slave2 <- Slave3...
这样的结构方便解决单点故障问题,实现Slave对Master的替换。如果Master挂了,可以立刻启用Slave1做Master,其他不变。
2,数据类型Redis使用场景
- String
- 计数器应用
- List
- 取最新N个数据的操作
- 消息队列
- 删除与过滤
- 实时分析正在发生的情况,用于数据统计与防止垃圾邮件(结合Set)
- Set
- Uniqe操作,获取某段时间所有数据排重值
- 实时系统,反垃圾系统
- 共同好友、二度好友
- 利用唯一性,可以统计访问网站的所有独立 IP
- 好友推荐的时候,根据 tag 求交集,大于某个 threshold 就可以推荐
- Hashes
- 存储、读取、修改用户属性
- Sorted Set
- 排行榜应用,取TOP N操作
- 需要精准设定过期时间的应用(时间戳作为Score)
- 带有权重的元素,比如一个游戏的用户得分排行榜
- 过期项目处理,按照时间排序
3,Redis解决秒杀/抢红包等高并发事务活动
- 秒杀开始前30分钟把秒杀库存从数据库同步到Redis Sorted Set
- 用户秒杀库存放入秒杀限制数长度的Sorted Set
- 秒杀到指定秒杀数后,Sorted Set不在接受秒杀请求,并显示返回标识
- 秒杀活动完全结束后,同步Redis数据到数据库,秒杀正式结束