Redis 简述

概念

含义

Redis 是什么 ?

  • 是什么

内存中的数据结构存储系统

  • 作用

数据库、缓存和消息中间件

  • 数据结构
  • 字符串(strings)
  • 列表(lists)
  • 集合(sets)
  • 有序集合(sorted sets)
  • 散列(hashes)
  • ​bitmaps​
  • ​hyperloglogs​
  • ​geospatial​
  • 内置
  • 复制(replication)
  • LUA脚本(Lua scripting)
  • LRU驱动事件(LRU eviction)
  • 事务(transactions)
  • 不同级别的 磁盘持久化(persistence)
  • 高可用性(high availability)
  • Redis哨兵(Sentinel)
  • 自动 分区(Cluster)

特点

数据在内存中,读写速度非常快,支持并发 10W QPS

单进程单线程线程安全、协议简单、采用 IO 多路复用机制。(Redis6+ 已经支持 多线程)

  • 内存数据库
  • 缓存
  • 消息中间件

数据结构

  • String (字符串)
  • Hash(散列)
  • List(列表)
  • Set(集合)
  • ZSet(有序集合)
  • Bitmap(位图)
  • HyperLogLog (超级日志)
  • Geospatial (地理空间)

2的32次方减一
512M

Redis协议规范(RESP)

​Redis协议​

​Redis 命令参考​

高级特性

  • 复制
  • lua 脚本
  • LRU驱动事件
  • 事务
  • 不同级别的磁盘持久化
  • 哨兵机制 (Sentinel)
  • 集群模式 (Cluster)

相关原理

管道

在分布式环境下,Redis 的性能瓶颈主要体现在网络延迟上,
而管道技术能减少客户端与服务器端的交互次数。

REDIS 事务

集群复制原理

持久化

  • RDB
  • AOF

集群模式及工作原理

  • 主从模式

一主多从,且具有层次结构

  • 哨兵模式

在主从模式基础上,增加哨兵机制,当主出现故障宕机时,可以选择一个从切换为主,

并通过发布与订阅的模式通知其他从服务器,完成主备热切

  • 集群模式
  • 数据分片和数据复制
  • 节点之间 PING-PONG 机制互联
  • 超过半数节点检测到某节点Fail,则将该节点设置为Fail状态
  • 客户端直连任意节点,即可对集群进行操作
  • Redis Cluster 把所有物理节点映射到 0 ~ 16383 的 slot(槽)上,进对key 做 hash 对16384其余数,分配到不同的节点上

版本选择

  • 奇数是开发版本
  • 偶数是稳定版本

redis管理

redis-cli

# 登录
redis-cli -h hostname -p port -a password

# 测试
> ping

# 选择库号
> select N
# 库大小
> dbsize

# N次运行同一命令
> 5 incr numA

Redis配置

​redis.conf​

# 通过命令行传参
--

# 运行时配置更改
config set
config get

# 配置Redis成为一个缓存

maxmemory 2mb
maxmemory-policy allkeys-lru

其他

Redis-Cli:学习怎么通过命令行使用redis。
配置(Configuration):怎么配置 redis。
复制(Replication):你需要知道怎么设置主从复制。
持久化(Persistence):了解如何配置redis的持久化。
Redis 管理(Redis Administration):学习redis管理方面的知识。
安全性(Security):概述Redis的安全。
加密(encryption):如何加密redis的客户端与服务端通信。。
信号处理(Signals Handling):如何处理Redis信号。
连接处理(Connections Handling):如何处理Redis客户端连接。
高可用性(High Availability):Redis Sentinel是Redis官方的高可用性解决方案。目前工作进展情况(beta阶段,积极发展),已经可用。
延迟监控(Latency monitoring):redis集成的延迟监控和报告功能对于为低延迟应用场景优化redis很有帮助。
基准(Benchmarks):看看Redis在不同平台上跑得有多快。
Redis Releases:Redis的开发周期和版本编号。

问题

  1. 每种数据结构的使用场景
  2. 是如何在自己的项目中使用的?
  3. 项目在上线的过程中遇到过哪些问题?
  4. 什么时候用做存储、缓存?