Table of Contents
本系列文章整理摘抄自redis 运维与开发
Redis 是什么?
Redis 是一种 基于键值对的 NOSQL
内存数据库, 具有丰富的数据类型和基于内存的快速读写能力,单线程命令处理机制。
Redis 的值类型有多种:
- string
- hash
- list
- set
- zset (有序集合)
- Bitmaps (位图)
- HyperLogLog
- GEO (地理信息定位)
Redis 提供了一下的附加功能:
- 键的有效期
- 发布订阅
- 事务
- Pipeline 流水线
- Lua脚本
- 可持久化(RDB 和 AOF 两种策略)
Redis 有哪些特点?
Redis 有5大重要的特征:
- 读写速度快(读写速度可达10万/秒)
- 基于内存
- C 语言实现
- 单线程架构(IO多路模型),省却了线程间调度
- 基于键值对的字典服务器
- 可持久化
- 主从复制
- 高可用 & 分布式
Redis 应用场景有哪些?
- 缓存
- 排行榜系统(提供列表和有序集合)
- 计数器 (网站播放数,电商浏览数)
- 社交网络(点赞,粉丝,共同爱好,推送,下拉刷新)
- 消息队列
- session 共享
- 限制访问的次数
为什么选择单线程?
官方的解释:
我们知道,运算和处理速度上,CPU >>> 内存 >>> 硬盘和网络。
- 原因1:单线程内存读写速度优于多线程的并发切换消耗
CPU并不是Redis的瓶颈,因为通常Redis要么受内存限制,要么受网络限制,而多线程的线程调度消耗的资源要比在内存读取数据大得多,所以选择了单线程 + IO 多路复用模型。
- 原因2:数据的一致性
单线程的操作,一定是线程安全的,并且避免了使用锁同步等。
为了最大程度地利用CPU,可以在同一服务器上启动多个Redis实例,并为每个实例绑定一个CPU. (Linux 通过 `taskset -c 1,2,3 /etc/init.d/mysql start`)
Redis 的不足之处?
数据有冷热之分,热点数据可以放在Redis 中,加速读写,减少对后端数据库的访问压力。
但是过于冷的数据,会浪费内存空间。