【3.0】Redis部署

本文介绍了Redis,一个基于键值对的高性能存储系统,涵盖其数据结构、公司使用情况、特性(如速度、持久化、多语言支持、功能扩展、主从复制和分布式部署)、Docker部署以及启动方式,展示了其在IT领域的广泛应用。

【一】Redis是什么

【1】介绍

  • 开源:早起版本2w3千行
  • 基于键值对的存储系统:字典形式
  • 多种数据结构:字符串,hash,列表,集合,有序集合
  • 高性能,功能丰富
  • Redis(Remote Dictionary Server)是一个开源的,基于键值对的存储系统。
    • 它采用了字典形式进行数据存储,支持多种数据结构如字符串、哈希、列表、集合和有序集合,并具有高性能和丰富的功能。
  • Redis最早版本有约2万3千行代码,是一个轻量级的存储系统。
    • 由于其出色的性能和灵活的数据结构支持,在实际应用中得到了广泛的使用。

【2】那些公司在用

  • github,twitter,stackoverflow,阿里,百度,微博,美团,搜狐

【二】Redis特性(8个)

  • 速度快:10w ops(每秒10w读写),数据存在内存中,c语言实现,单线程模型
  • 持久化:rdb和aof
  • 多种数据结构
    • 5大数据结构
    • BitMaps位图:布隆过滤器 本质是 字符串
    • HyperLogLog:超小内存唯一值计数,12kb HyperLogLog 本质是 字符串
    • GEO:地理信息定位 本质是有序集合
  • 支持多种编程语言:基于tcp通信协议,各大编程语言都支持
  • 功能丰富:发布订阅(消息) Lua脚本,事务(pipeline)
  • 简单:源代码几万行,不依赖外部库
  • 主从复制:主服务器和从服务器,主服务器可以同步到从服务器中
  • 高可用和分布式
    • 2.8版本以后使用redis-sentinel支持高可用
    • 3.0版本以后支持分布式

【1】速度快

  • Redis以其高速的读写能力而闻名,每秒可以处理10万个操作(ops)。
  • 这主要得益于Redis将数据存储在内存中,并采用C语言实现的单线程模型。
  • 由于Redis采用非阻塞I/O模型,可以在内存访问和计算能力之间取得良好的平衡。

【2】持久化

  • Redis提供了两种持久化方式,分别是RDB(Redis Database)和AOF(Append-Only File)。
    • RDB可将内存中的数据周期性地保存到磁盘上,以便在重启时恢复数据。
      • 它是通过将数据转化为二进制形式进行持久化存储的,因此对于大规模的数据集来说,RDB方式比AOF方式更加高效。
    • AOF则记录所有对Redis服务器进行修改的命令,这样可以保证在服务器重启后,能够重新执行这些命令以达到数据恢复的目的。
      • 相比RDB,AOF提供了更好的数据安全性,但会增加一定的磁盘IO负担。

【3】多种数据结构

  • Redis不仅仅是一个键值存储系统,还提供了多种数据结构,可以满足不同场景下的需求。
  • 常见的5种数据结构包括
    • 字符串(String)
    • 哈希(Hash)
    • 列表(List)
    • 集合(Set)
    • 有序集合(Sorted Set)。
  • Redis还支持
    • BitMaps位图
    • HyperLogLog
    • GEO地理信息定位数据结构
    • 它们分别用于布隆过滤器、唯一值计数和地理位置存储等特定场景。

【4】支持多种编程语言

  • Redis基于TCP通信协议进行数据交互,几乎所有主流的编程语言都提供了Redis客户端库,因此可以方便地与Redis进行交互和操作。
  • 例如,Python中有redis-py库,Java中有Jedis库,Node.js中有ioredis库等。

【5】功能丰富

  • Redis提供了多个功能扩展,增加了其在实际应用中的灵活性和可扩展性。
    • 发布订阅功能允许客户端发布消息并订阅感兴趣的频道,这对于实现消息队列等发布-订阅模式非常有用。
    • Lua脚本允许通过执行自定义脚本来完成复杂的业务逻辑,可以减少网络延迟并提高性能。
    • 事务(Pipeline)允许一次性执行多个命令,并将它们视为一个原子操作。这在需要确保多个命令的原子性时非常有用。

【6】简单

  • Redis的源代码非常精简,代码行数大约只有几万行,并且不依赖于外部库。
  • 这使得Redis的安装和配置非常简单,并且具备较高的可移植性。

【7】主从复制

  • Redis支持主从复制架构,可以通过将一个Redis服务器配置为主服务器,将其他服务器配置为从服务器来实现数据的复制和同步。
    • 主服务器负责处理所有写操作,并将更新的数据异步传输给从服务器。
    • 从服务器接收并复制主服务器的数据,以实现数据的备份、读操作的负载均衡等目的。

【8】高可用和分布式

  • Redis提供了多种机制来实现高可用和分布式部署。
    • Redis Sentinel是一个用于监控Redis服务器的组件,可以实现自动故障转移和故障恢复,提高系统的可用性。
    • 从Redis 3.0版本开始,Redis Cluster提供了一种分布式解决方案,可以将数据分片存储在不同的节点上,实现数据的水平扩展和负载均衡。

【三】Docker部署Redis

【1】安装Redis

(1)下载Redis压缩包:

wget http://download.redis.io/releases/redis-6.2.9.tar.gz
  • 这里会从官方网站下载Redis的压缩包。

(2)解压Redis压缩包:

tar -xzf redis-6.2.9.tar.gz
  • 使用tar命令解压下载的压缩包。

(3)建立软连接:

ln -s redis-6.2.9 redis
  • 创建一个软连接,使得可以通过使用“redis”来访问Redis的文件。

(4)进入Redis目录:

cd redis
  • 进入到解压后的Redis目录。

(5)编译和安装Redis:

make && make install
  • 执行make命令编译Redis源码,并执行make install命令安装编译后的Redis。

(6)安装完成:

  • 在src目录下,可以找到以下文件:

    • redis-server:Redis服务器

    • redis-cli:Redis命令行客户端

    • redis-benchmark:Redis性能测试工具

    • redis-check-aof:AOF文件修复工具

    • redis-check-dump:RDB文件检查工具

    • redis-sentinel:Sentinel服务器,哨兵

  • 注意:Redis在Windows上的维护并不好,所以Windows系统建议使用官方提供的安装包进行安装。

【2】卸载Redis

(1)查看Redis进程:

ps aux | grep redis
  • 这里使用ps命令配合grep命令来查看正在运行的Redis进程。

(2)杀掉Redis进程:

kill 进程ID
  • 根据第一步中查到的Redis进程ID,使用kill命令杀掉对应的进程。

(3)进入Redis安装目录:

cd /usr/local/
  • 进入Redis的安装目录。

(4)删除Redis相关文件:

rm -f /usr/local/redis/bin/redis*
rm -f /usr/local/bin/redis*
  • 删除Redis相关可执行文件。

(5)删除Redis目录:

rm -rf redis
  • 删除安装时创建的Redis目录及其内容。

  • 以上操作会完全卸载Redis。

  • 请注意,在执行卸载操作前,请确保已备份重要的Redis数据。

【四】三种启动方式

【1】最简启动

#最简启动
redis-server
ps -ef|grep redis  #查看进程
netstat -antpl|grep redis #查看端口
redis-cli -h ip -p port ping #命令查看
  • Redis的最简启动方式是通过运行redis-serve命令来启动Redis服务器。这将在默认配置下启动Redis服务器,并监听默认的端口(6379)。

  • 以下是该启动方式的详细步骤和说明:

    • 输入redis-server命令来启动Redis服务器。

    • 使用ps -ef | grep redis命令来查看Redis服务器的进程是否已经启动。

    • 使用netstat -antpl | grep redis命令来查看监听的Redis服务器的端口号及其相关信息。

    • 使用redis-cli -h ip -p port ping命令来检查与Redis服务器的连接是否正常,其中ip是Redis服务器的IP地址,port是Redis服务器的端口号。

  • 请注意,这种最简启动方式使用的是Redis的默认配置文件,如果您需要进行更详细的配置,请考虑使用后面介绍的配置文件启动方式或动态参数启动方式。

【2】动态参数启动

#动态参数启动
redis-serve --port 6380 #启动,监听6380端口
  • 动态参数启动方式允许您在启动Redis服务器时通过命令行参数指定一些配置选项,而不是使用默认配置文件。

  • 以下是该启动方式的详细步骤和说明:

    • 使用redis-serve --port 6380命令启动Redis服务器,并指定新的端口号为6380。

    • 这将启动一个新的Redis服务器实例,监听在指定的端口号上。

  • 此启动方式适用于需要为特定场景而定制的临时Redis服务器实例。

【3】配置文件启动

  • 配置文件启动(6379对应手机按键MERZ,意大利女歌手Alessia Merz的名字)

  • 通过redis-cli连接,输入config get * 可以获得默认配置

  • 在redis目录下创建config目录,copy一个redis.conf文件

    • daemonize--》是否是守护进程启动(no|yes)
    • port---》端口号
    • logfile--》redis系统日志
    • dir--》redis工作目录
  • 配置文件

#查看一下默认注释,把#和空格去掉
cat redis.conf|grep -v "#" |grep -v "^$"
# 重定向到另一个文件
cat redis.conf|grep -v "#" |grep -v "^$" >redis-6382.conf
[root@node1 redis]# mv redis.conf redis.conf.bak 
[root@node1 redis]# ls
00-RELEASENOTES  CONTRIBUTING  INSTALL    README.md       runtest-cluster    sentinel.conf  TLS.md
BUGS             COPYING       Makefile   redis.conf.bak  runtest-moduleapi  src            utils
CONDUCT          deps          MANIFESTO  runtest         runtest-sentinel   tests
[root@node1 redis]# vim redis.conf
daemonize yes #是否以守护进程启动
pidfile /var/run/redis.pid   #进程号的位置,删除
port 6379    #端口号
dir "/root/dream/redis/data"  #工作目录 
logfile 6379.log #日志文件
  • Redis配置文件通常位于redis.conf文件中,您可以通过以下命令查找配置文件的位置:
CONFIG GET dir
  • 响应示例:
1) "dir"
2) "/usr/local/redis-6.0.9"
  • 为了更好地保护您的Redis实例,可以设置访问密码。
    • 以下是在配置文件中设置密码和重启后仍然有效的方法:
CONFIG SET requirepass 123456
# 并没有写到配置文件中,重启即失效
  • 为了限制Redis使用的最大内存量,您可以在配置文件中设置maxmemory参数。
    • 例如,将最大内存限制为128MB:
# 在redis.conf中找到并修改以下行
maxmemory 128mb
# 或者直接在命令行中运行以下命令
CONFIG SET maxmemory 128M
  • 如果您希望将当前的Redis配置保存到配置文件中
    • 可以使用以下命令:
# 将临时配置生效成永久配置
CONFIG REWRITE
  • 该命令会将当前的Redis配置保存到对应的配置文件(redis.conf)中。

  • 综上所述,以下是完整的Redis配置文件示例(redis.conf):

# Redis配置文件

# 设置Redis实例的访问密码
requirepass 123456

# 限制Redis实例使用的最大内存为128MB
maxmemory 128mb

# 将Redis配置保存到配置文件中
config rewrite
  • 请注意,上述示例仅为演示目的,并非完整的配置文件。
  • 具体的配置参数和值可能会因您的需求而有所不同。您可以根据自己的实际需求进行调整。
  • 在redis目录下新建data目录,用来存放书籍
  • 启动redis
[root@node1 redis]# ./src/redis-server ./redis.conf
  • 查看进程
ps -ef |grep redis-server |grep 6379
ps -ef |grep  redis
[root@node1 redis]# ps -ef |grep  redis
root      52219      1  0 19:06 ?        00:00:00 ./src/redis-server *:6379
root      52506  44911  0 19:08 pts/1    00:00:00 grep --color=auto redis
  • 查看日志
cd data
cat 6379.log
  • 等待日志加载
tail -f 6379.log
  • 配置文件启动方式允许您使用自定义的配置文件来启动Redis服务器。

以下是该启动方式的详细步骤和说明:

  • 首先,您可以通过运行redis-cli命令连接到Redis服务器,并使用config get *命令获取Redis默认配置的详细信息。

  • 在Redis安装目录下创建一个名为config的文件夹,并复制一份redis.conf文件到该目录。

  • 打开

    redis.conf

    文件,并根据您的需求进行配置调整。

    您可以取消注释相关行,配置参数如下:

    • daemonize:设置是否以守护进程启动Redis服务器(可选值为noyes)。
    • port:设置Redis服务器监听的端口号。
    • logfile:设置Redis系统日志的位置。
    • dir:设置Redis工作目录,即Redis服务器存储数据等文件的位置。
  • 保存并关闭redis.conf文件。

  • 在完成上述配置后,您可以按照以下步骤来启动Redis服务器:

    • 在Redis安装目录下,使用命令redis-server config/redis.conf启动Redis服务器。这将使用您自定义的配置文件来启动Redis。

    • 使用ps -ef | grep redis-server | grep 6379命令来检查Redis服务器进程是否已经启动。请注意,这里的6379是您在配置文件中设置的端口号。

    • 通过访问工作目录中的日志文件来查看Redis服务器的日志信息。

【4】小结

(1)客户端链接

redis-cli -h 地址 -p 端口

(2)非交互式的

res=subprocess.getoutput('systemctl start mysqld')
res=subprocess.getoutput('systemctl stop mysqld')
res=subprocess.getoutput('redis-cli get name')

(3)交互式的

get name
keys *

【5】带密码链接

(1)方式一

redis-cli -h 127.0.0.1    -p 6370 -a 123456

(2)方式二

  • 先登陆,再通过auth输入密码
第 1 章Redis 介绍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 第 2 章数据类型初探. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 字符串 (Strings) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 列表 (Lists). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 集合 (Sets) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 哈希 / 散列 (Hashes) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 有序集合 (Sorted sets) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 位图 (Bitmaps) 和超重对数 (HyperLogLogs) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 第 3 章从入门到精通(上) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 Redis 键 (Keys). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Redis 字符串 (Strings) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 改变和查询键空间 (key space). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 Redis 过期 (expires):有限生存时间的键. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 第 4 章从入门到精通(中) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 Redis 列表(Lists) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 Redis 列表起步. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 列表的通用场景(Common use cases) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 上限列表(Capped) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 列表的阻塞操作 (blocking) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 自动创建和删除键. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 Redis 哈希/散列 (Hashes). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 Redis 集合 (Sets) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 第 5 章从入门到精通(下) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 Redis 有序集合 (Sorted sets) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 范围操作 (ranges) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 字典分数 (Lexicographical scores). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 更新分数:排行榜 (leader boards) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 位图 (Bitmaps). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 超重对数 (HyperLogLogs). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 其他值得注意的特性 (notable features). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 了解更多 (Learn more) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 第 6 章使用 Redis 实现 Twitter(上). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 前提条件(Prerequisites) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 数据设计(Layout) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 粉丝(followers),关注(following),和帖子(updates). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 身份验证(Authentication) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 第 7 章使用 Redis 实现 Twitter(下). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 帖子(Updates) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 帖子分页(Paginating). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 关注用户(Following users) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 水平伸缩(horizontally scalable) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 第 8 章使用 Redis 作为 LRU 缓存. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 maxmemory 配置指令(configuration directive) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 回收策略(Eviction policies) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 回收过程 (Eviction process) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 近似的 LRU 算法(Approximated LRU algorithm) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 第 9 章分片. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 分片为何有用(Why useful) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 分片基础(Basics) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 分片的不同实现(Different implementations) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 分片的缺点(Disadvantages) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 数据存储还是缓存(Store or cache) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 预分片(Presharding) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 Redis 分片的实现(Implementations) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 Redis 集群(Redis Cluster) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 Twemproxy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 支持一致性哈希的客户端. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 第 10 章复制. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 主服务器关闭持久化时的安全性(Safety of replication). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 Redis 复制如何工作(How works) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 部分重同步(partial resynchronization) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 无盘复制(Diskless replication) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 配置(Configuration) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 只读从服务器(Read-only slave) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 认证主服务器(Authenticate to a master) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 N 个副本才能写(Allow writes only with N attached replicas) . . . . . . . . . . . . . . . . . . . . . . . 93 第 11 章持久化. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 Redis 持久化(Persistence) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 RDB 优点(RDB advantages) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 RDB 缺点(RDB disadvantages). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 AOF 优点(AOF advantages) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 AOF 缺点(AOF disadvantages) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 我们该选谁(what) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 快照(Snapshotting) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 如何工作(How works) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 只追加文件(Append-only file) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 日志重写(Log rewriting). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 AOF 持久性如何(How durable) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 AOF 损坏了怎么办(corrupted). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 如何工作(How works) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 如何从 RDB 切换到 AOF(How switch) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 AOF 和 RDB 的相互作用(Interactions) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 备份数据(Backing up) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 灾难恢复(Disaster recovery). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 第 12 章集中插入. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 使用协议,伙计. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 生成 Redis 协议(Generating Redis Protocol) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 管道模式如何工作(How works) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 第 13 章高可用(上) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 分布式特性(Distributed nature) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 获取 Sentinel(Obtaining Sentinel) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 运行 Sentinel(Running Sentinel) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 配置 Sentinel(Configuring Sentinel). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 仲裁人数(Quorum) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 配置纪元 (Configuration epochs) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 配置传播(Configuration propagation). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 SDOWN 和 ODOWN 更多细节. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 自动发现(Auto discovery) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 第 14 章高可用(下) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 分割下的一致性(Consistency under partitions) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 Sentinel 的持久化状态 (Sentinel persistent state) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 Sentinel 重配置实例(Sentinel reconfiguration of instances). . . . . . . . . . . . . . . . . . . . . . . . 135 从服务器的选举和优先级(Slave selection and priority) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 Sentinel API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 Sentinel 命令. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 运行时重配置 Sentinel(Reconfiguring Sentinel). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 添加和删除 Sentinel(Adding or removing Sentinels). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 删除旧的主服务器或不可达从服务器(unreachable) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 发布和订阅消息(Pub/Sub Messages) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 TILT 模式. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 处理 - BUSY 状态. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 Sentinel 客户端实现. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 第 15 章高可用客户端指引. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 支持Redis Sentinel的Redis客户端指引. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 支持 Redis Sentinel 的 Redis 客户端指引. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 通过 Sentinel 实现 Redis 服务发现(Redis service discovery) . . . . . . . . . . . . . . . . . . . . . . . 152 处理重连(Handling reconnections). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 Sentinel 故障转移断开(Sentinel failover disconnection) . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 连接从服务器(Connecting to slaves) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 连接池(Connection pools). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 错误报告(Error reporting) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158 Sentinel 列表自动刷新(Sentinels list automatic refresh) . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 订阅 Sentinel 事件来改进响应能力(Subscribe to Sentinel events to improve responsivenes s). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 额外信息(Additional information) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 第 16 章集群(上) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 Redis 集群(Redis Cluster) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 Redis 集群的 TCP 端口(Redis Cluster TCP ports) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 Redis 集群的数据分片(Redis Cluster data sharding) . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 Redis 集群的主从模型(Redis Cluster master-slave model). . . . . . . . . . . . . . . . . . . . . . 167 Redis 集群的一致性保证(Redis Cluster consistency guarantees) . . . . . . . . . . . . . . . . . 168 创建和使用 Redis 集群(Creating and using a Redis Cluster) . . . . . . . . . . . . . . . . . . . . . 170 创建集群(Creating the cluster) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 与集群共舞(Playing with the cluste) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 第 17 章集群(中) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 使用 redis-rb-cluster 写一个示例应用. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 重新分片集群(Resharding the cluster) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 一个更有意思的示例程序. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 测试故障转移(Testing the failover) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 第 18 章集群(下) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 手动故障转移(Manual failover) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 添加新节点(Adding a new node) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 添加副本节点(Adding a new node as a replica) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 移除节点(Removing a node) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 副本迁移(Replicas migration) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 升级节点(Upgrading nodes in a Redis Cluster) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 迁移到 Redis 集群(Migrating to Redis Cluster) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值