什么是 Redis?
Redis是一个开源的使用 ANSI C 语言编写、遵守BSD协议、基于内存并可持久化的 K-V 非关系型数据库。
Redis 和 Memcache的区别
Redis 数据类型丰富。Redis不仅仅支持简单的数据类型,还支持list、set、sortedset、hash等数据结构。
Redis可利用虚拟内存。Redis 当物理内存用完时,可以将一些很久没用到的 value 交换到磁盘。
Redis 支持数据持久化。当 Memcache 挂掉后,数据就没了。而 Redis 可以定期将数据保存到磁盘。
Redis 支持灾难恢复。当Memcache挂掉后,数据不可恢复; 而 Redis 数据丢失后可以通过AOF 恢复。
Redis 支持数据的备份。Redis支持
master-slave模式的数据备份。
Redis 数据结构
String (字符串)
List (列表)
Hash(散列)
Set (集合)
SortedSet (有序集合)
HyperLogLog
Redis 各种数据类型的使用场景举例分析 https://mengkang.net/356.html
Redis 操作命令
参考:
Redis 命令参考 http://redisdoc.com/index.html
Redis 命令速查手册
https://raw.githubusercontent.com/huangz1990/redis-cheatsheet/master/redis-cheatsheet.pdf
Redis 的一些配置/命令
配置表示例:
1 | ==配置文件全解=== |
关于 Redis 的持久化
Redis 中有两种方法进行持久化,一种是快照,一种是Append-only。
快照
Redis 以快照的形式将数据保存到一个二进制文件中(dump.rdb,名字可更改),在配置在N秒之内,至少发生M次修改则抓快照到磁盘(配置项:save N M)。我们也可以手动执行save 或者 bgsave(异步)做快照。
优点:不会太影响性能
缺点:Redis 挂掉后,最近的数据会丢失。当业务量很大时,会丢失很多数据(丢失数据的多少取决于你 save 策略的配置)。
Append-only
使用 Append-only 方法(Redis 配置项:appendonly yes/no),Redis 可以每执行一个命令或者每隔1秒,都会添加到 AOF 文件中(取决于 Redis 配置项:appendfsync everysec/always/no)。当 Redis 关闭后,将会读取 AOF 文件进行“重放”以恢复到关闭时刻的数据。
优点:丢失数据较少
缺点:较影响 Redis 性能
我们一般将 快照 + AOF 结合起来做数据的同步。
Redis 同步机制
Redis 可以使用主从同步,从从同步。第一次同步时,主节点做一次 bgsave,并同时将后续修改操作记录到内存 buffer,待完成后将 rdb 文件全量同步到复制节点,复制节点接受完成后将 rdb 镜像加载到内存。加载完成后,再通知主节点将期间修改的操作记录同步到复制节点进行重放就完成了同步过程。
Redis 事务
Redis 开启事务后(执行 multi)后,执行 Redis 命令 后,会将 Redis 执行命令放到队列里,并不真正执行,执行 exec 后,会出现有的 Redis 命令执行成功,有的执行失败。Redis 中的事务不像 mysql 的事务,有一个命令执行失败,commit后,一组 sql 操作全部执行失败、回滚操作。
使用 discard 会清空事务队列里的 Redis 命令,不执行 Redis 命令。
1 | #开启事务 |
使用 watch命令 示例:
监控工具 sentinel
Sentinel不断与master通信,获取master的slave信息.
监听master与slave的状态
如果某slave失效,直接通知master去除该slave.
PHP 操作 Redis
PHP 操作 Redis,可查看 phpredis 的 github 仓库:https://github.com/phpredis/phpredis
Python 中操作 Redis
Redis 客户端工具
Redis的使用场景
会话缓存
热点数据缓存
队列
排行榜/计数器
发布/订阅
其它链接
Redis在线测试 http://try.redis.io/
天下无难试之Redis面试刁难大全 https://mp.weixin.qq.com/s/507jyNbL4xCkxyW6Xk15Xg
