# Redis
# 一、介绍
1、express 介绍
redis 是一种基于键值对的 NoSQL 数据库,redis 中的值可以是 string、hash、list、set、zset(有序集合)、Bitmaps(位图)、GEO(地理信息定位) 等多种数据结构。
2、作者
2008 年,redis 作者是 Salvatore Sanifilippo 开发,为了实现高性能队列功能而开发了 redis。
3、特性
- 速度快:使用 c 语言实现,数据存放在内存中,单线程架构
- 基于键值对
- 持久化:通过 RDB 或 AOF 策略将内存数据复制到硬盘中
- 主从复制和分布式
4、使用场景
- 缓存:加快数据访问速度,有效较低后端数据源压力。
- 排行榜系统:
- 计数器应用:如浏览器次数
- 社交网络
- 消息队列系统
# 二、跑起来
1、安装
wget https://download.redis.io/releases/redis-6.2.6.tar.gz
tar xzf redis-6.2.6.tar.gz
ln -s redis-6.2.6 redis
cd redis
make
make install
2、启动
// 根据配置文件启动 redis
redis-server /opt/redis/redis.conf
3、连接 redis 服务
redis-cli -h 127.0.0.1 -p 6379
# 三、操作 redis
1、常用全局命令
查看所有键:keys *
键总数:dbsize
检查键是否存在:exists key
删除键:del key
键过期:expire key seconds
查看键值的数据类型:type key
# 四、数据类型
1、字符串类型:可以是字符串、数字、二进制,最大值不超过512M
使用场景:限速、缓存、计数、共享 Session
2、哈希类型:键值对的形式
3、列表类型:存储多个有序的字符串
使用场景:消息队列、文章列表
4、集合类型:保存多个不重复的字符串
使用场景:给用户添加标签
5、有序集合:根据指定字段排序的集合
应用场景:排行榜
# 五、关键技术
1、单线程
- 一条命令从客户端到达服务端不会立刻被执行,而是进入队列,然后逐个被执行
2、持久化
- RDB:是把当前进程数据生成快照保存到硬盘的过程,分为手动触发和自动触发(从节点执行全量复制、执行shutdown等)
- AOF:以独立日志的方式记录每次写命令,重启时重新执行 AOF 文件中的命令达到恢复数据的目的
3、复制
- 为了解决单点问题,将数据复制到多个副本部署到其它机器
4、哨兵(Sentinel)
- 用来解决主从复制模式下,判断节点不可达;主节点挂掉,保证只有一个从节点成为主节点‘;通知客户端新的主节点
- 主节点选举:
- 从节点 a 发现主节点下线,向其它从节点发送命令,要求将自己设置为主节点
- 其它节点,如果没有同意过其它从节点的命令,就同意该命令,否则拒绝
- 如果节点 a 发现自己票数超过一半,就会成为主节点
- 否则进入下一次选举
# 六、最佳实践
1、内存优化
- 缩减键和值的长度
- 减少对字符串的修改如 append、setrange,改为直接使用 set
- 优先使用整数,比字符串更节省空间
# 七、配置参数
port:端口
logfile:日志文件
dir:工作目录,存放持久文件和日志文件
daemonize:是否以守护进程启动 redis
# 八、专用名词
热数据:指需要频繁操作的数据
冷数据:指通常不怎么操作的数据
慢查询分析:是指系统在命令执行前后计算每条命令的执行时间,当超过阈值,将这条命令的信息记录下来供分析。
事务:表示一组动作,要么全部执行,要么全部不执行。
集群:干同样事的,如一群厨师
分布式:分工合作,如厨师和配菜师
# 参考资料
《Redis 开发与运维》付磊、张益军
分布式与集群的区别是什么? - 张鹏飞的回答 - 知乎 https://www.zhihu.com/question/20004877/answer/112124929