缓存系统:node
①请求 =》②业务计算 =》 ③读写数据 (cache <=> db) ④模板渲染 =》 ⑤ 输出
Redis-缓解甚至接管数据库压力 mysql
Redis的优点:redis
daemonize yes 后台启动 port 6379 端口号 pidfile /var/6379.pid
redis-cli 6379 shutdown redis客户端退出算法
客户端链接redis
安装对应的扩展
操做key value型数据
set get del exists setnx(若是不存在则设置)
键名通常按照模块从大到小来设计,以冒号分隔sql
hash类型数据
hset hget hdel hexists hsetnx
hash类型键的删除,须要逐个删除每个field
缓存独立于数据库以外,并非全部的数据都接受延迟,要始终注意数据的一致性数据库
list类型的数据
lset llen lrange ltrim lpop rpush lpop rpop
实例:操做日志的记录与读取json
set类型的数据
sadd smembers scard spop sdiff缓存
缓存天气
常规缓存,设置key weaher:city:date 查询时先查key是否存在,存在直接返回,不存在先请求接口,再缓存 该key能够设置一个同步接口,每10分钟调用一次,保持和远程接口数据的同步
pv&uv
incrBy 自增
pv自增:使用string key value 设置key 接口调用一次incrBy 加1 获取 get($key)
uvset:使用set 设置 key 调用接口,使用ip地址,添加ip地址到set中,计算set元素的个数服务器
脚本同步数据:第一次从mysql同步数据到redis,后期防止redis数据的丢失,能够考虑增量计算加到mysql中,屡次累加一次操做
分页优化:基于id区分页而不是使用limit的方式数据结构
简介:消息队列时消息的顺序集合
场景:网站首页的PV统计和查看
传统直接update表,大并发状况下容易锁表,
redis消息队列:Redis每次请求rpush 脚本匀速处理pvlog set pv查看get pv
应对流量峰值 异步消费(不定速的插入,生产 和 匀速的处理,消费) 解耦应用(不一样来源的生产和不一样去向的消费)
消息队列的实现方式有不少,使用redis实现的最主要的优点是简单快捷
redis实现消息队列有两种方式:
redis实现消息队列
基于list的消息队列实现方式
特色:
基于publish/subscribe的消息队列实现方式
基于发布订阅实现pv统计
在订阅模式下,只能执行subscribe、psubscribe等和订阅相关的操做,想执行其余操做须要从新实例化一个redis实例
总结: 消息队列的实现方式有不少 使用redis实现的最主要优点是简单快捷 redis实现消息队列有两种方式: 基于list 基于subscribe/publish
Redis时彻底免费的,遵照BSD协议,是一个高性能的key-value数据库
Redis字段类型
String类型
最多见的数据类型
能够为任何类型的字符串,好比二进制,json对象
最大容量 512M通常会用做缓存使用
Hash类型
通常用来存储我的信息缓存
List类型
设置秒杀活动 一、设置秒杀状态 ms_status 1描述结束 0 未开启 二、秒杀队列 list 三、判断队列长度,超过长度 设置秒杀状态为结束 四、处理队列,处理以前先设置队列状态为秒杀结束
Set类型
差集 sdiff 交集 sinter 并集 sunion
Zset集合
RDB 指定的时间间隔保存数据快照
优势:
适合用于进行备份
fork出子进程进行备份,主进程没有任何IO操做
恢复大数据集时的速度快
缺点:
特定条件下进行一次持久化,易丢失数据
庞大数据时,保存时会出现性能问题
AOF先把命令追加到操做日志的尾部,保存全部历史记录
优势:
数据很是完整,故障恢复丢失数据少
可对历史操做进行处理
缺点:
文件的体积大
速度低于RDB且故障恢复速度慢
防止内存占满
设置超时时间
不存放过大文件
不存放不经常使用文件
提升使用效率
合理使用不一样的数据结构类型
慎用正则处理或者批量操做Hash,set等
三、Redis Cluster
结构:
注意事项:
不彻底支持批量操做 事物不能跨界点支持 不支持多实例 key是最小粒度 最少6个才能保证组成完整高可用的集群