模型
epoll同步非阻塞模型,通过mmap系统调用,让内核和用户空间共享一块空间,减少fd拷贝(减少系统调用)
优点
- 计算向数据移动
- 有面向用户的API
- 二进制安全,字节流
- 工作单线程,IO多线程
数据类型
-
string
- 字符串
- 数值
- CRUD
- 抢购/秒杀/详情页
规避并发下,对数据库事物操作 - bitmap
- 统计用户登录天数,且窗口随机
setbit li 1 1 //li在第2天登录 bitcount li start end //进行统计- 做活动送礼物,要备多少礼物,活跃用户统计
**电商知识点* 僵尸用户 冷热用户/忠诚用户 *** setbit 日期k1 用户编号1 1 setbit 日期k2 用户编号2 1 bitop key值d or k1 k2 bitcount d 0 -1
-
list
- 链表(想到)
- 单向
- 双向
- 有环
- 无环
- 栈 同向命令
lpush lpop- 队列 反向命令
lpush rpop- 数组
索引操作- 阻塞的单播队列 FIFO
blpop - 链表(想到)
-
hash
- 使用场景
- 详情页缓存
- 使用场景
-
set
- 特点
- 无序
- 去重
- 场景
- 集合操作,做交并差集
- 随机事件
抽奖 SRANDMEMBER key count count 负数 会出现重复 正数 0 SPOP
- 特点
-
sorted set
- 物理内存左小右大,不随命令而发生变化
- 集合操作
- 怎么实现排序,CRUD速度
- skip list 跳跃表(数据结构是分层的,随机造层)
使用
- 网址
http://redis.cn/
-
事务
- 命令
- watch 观察
- mutli 开启
- exec 结束,开始执行
- 不支持回滚
- 命令
-
布隆过滤器
- 为了解决内存穿透
- 原理
- 需要用到bitmap
- 把有的元数据通过映射函数放到bitmap中
- 当有人查询时先去bitmap进行查找
- 大概率解决内存穿透
- 安装
- 需要安装组件库
-
作为缓存使用
- 缓存数据不是全量的,可以丢失,保存的是热数据
- 注意事项
- key的有效期
- 内存有限
- 缓存问题
- 缓存穿透
现在的缓存中没有,会穿透直接去冷库查询 布隆过滤器- 缓存击穿
- 缓存雪崩
- 存储持久化,恢复
- 补充知识
管道会触发子进程 linux中父子进程中的数据不会相互影响- 快照/副本 RDB
* 时点性,全量的备份 fork()子进程[系统调用] + COW[copy on write(写时复制-->机制)] * 实现方式: 一:命令方式 1. save --> 前台阻塞(关机维护的时候用save) 2. bgsave --> 后台运行,异步非阻塞,fork创建子进程(正常运行的时候) 二:配置文件给出bgsave的规则 1.用的save的标识,触发bgsava实现 * 弊端: 不支持日期拉链,只会有一个dump.rdb 丢数据相对多一些,时点和时点之间的数据容易丢失 * 优点 恢复速度快- 日志 AOF
* 写操作,记录在文件中 1. 丢数据少 2. redis中RDB和AOF可以同时开启,但如果开启了AOF,只会用AOF恢复 2.1 在4.0后,AOF中包含了RDB全量,增加记录新的写操作 * 弊端 体量无限变大,恢复慢 1.解决AOF过大方法 1.1, 4.0之前重写,删除抵消的命令,合并重复的命令 1.2, **重写**,将老的数据RDB到AOF文件中,将增量的以指令方式append到AOF中 - 解决缓存掉电易失
- 单机
- 主从复制
-
原点,redis是内存数据库
- 写操作触发IO(3个级别)
- NO
- always
- everysec 每秒
- 写操作触发IO(3个级别)