为你自己学Redis
  • README
  • 安装
    • macos下安装redis
  • 第1章 构建Redis开发环境
    • 1.1 Redis概述
    • 1.2 了解必要的Docker技能
    • 1.3 安装和配置基于Docker的Redis环境
  • 第2章 实践Redis的基本数据类型
    • 2.1 Redis缓存初体验
    • 2.2 针对字符串的命令
    • 2.3 针对哈希类型变量的命令
    • 2.4 针对列表类型变量的命令
    • 2.5 针对集合的命令
    • 2.6 针对有序集合的命令
  • 第3章 实践Redis的常用命令
    • 3.1 键操作命令
    • 3.2 HyperLogLog相关命令
    • 3.3 lua脚本相关命令
    • 3.4 排序相关命令
  • 第4章 实践Redis服务器和客户端的操作
    • 4.1 Redis服务器管理客户端的命令
    • 4.2 查看Redis服务器的详细信息
    • 4.3 查看并修改服务器的常用配置
    • 4.4 多个客户端连接远端服务器
  • 第5章 Redis数据库操作实战
    • 5.1 切换数据库操作
    • 5.2 Redis事务操作
    • 5.3 地理位置相关操作
    • 5.4 位图数据类型的应用
    • 5.5 慢查询实战分析
  • 第6章 Redis数据持久化操作
    • 6.1 Redis持久化机制概述
    • 6.2 AOF持久化机制实战
    • 6.3 RDB持久化机制实战
    • 6.4 如何选用持久化方式
  • 第7章 搭建Redis集群
    • 7.1 搭建基于主从复制模式的集群
    • 7.2 搭建哨兵模式的集群
    • 7.3 搭建cluster集群
  • 第8章 GO整合MySQL与Redis
    • 8.1 GO通过redigo读写Redis
    • 8.2 Go与各种Redis数据类型
    • 8.3 Redis与MySQL的整合
    • 8.4 Redis缓存实战分析
  • 第9章 Redis应用场景与案例实现
    • 9.1 Redis消息队列实战
    • 9.2 Go实战Redis分布式锁
Powered by GitBook
On this page
  • 4.4.1 多个Redis客户端连接远端服务器
  • 4.4.2 通过docker inspect命令观察IP地址
  • 4.4.3 实践客户端命令
  • 4.4.4 通过info观察服务器状态
  1. 第4章 实践Redis服务器和客户端的操作

4.4 多个客户端连接远端服务器

Previous4.3 查看并修改服务器的常用配置Next第5章 Redis数据库操作实战

Last updated 1 year ago

4.4.1 多个Redis客户端连接远端服务器

在本节中,将新建三个Docker容器,以此模拟三台主机.在这三个Docker容器里,包含了一个Redis服务器、两个Redis客户端,并且两个Redis客户端会连接到Redis服务器上,以此模拟两台主机上的Redis客户端远程连接到Redis服务器上的效果.具体的效果图如下图示.

两台Redis客户端远程连接到Redis服务器的效果

  • step1. 创建表示redis-server的容器

(base) root@yuanhong StudyRedisBaseOnDocker % docker run --name redis-server -d redis:latest
834148eedc13916828f2c1dc72a6b8df30cfcde01b91b128ab099617008035e4
  • step2. 创建并进入Redis客户端容器,在该容器内连接redis-server

创建并进入Redis客户端容器:

(base) root@yuanhong StudyRedisBaseOnDocker % docker run -it --name redis-client1 --link redis-server:server redis:latest /bin/bash
root@b33298a59a78:/data# 

注:--link选项的含义:

在Docker的早期版本中,--link选项是用来在两个容器之间建立一个链接的.这意味着从一个容器可以安全地连接到另一个容器,而无需公开任何不必要的端口到宿主机.当您使用--link选项时,Docker会在两个容器之间建立一个私有网络连接,并将链接的容器的环境变量、主机名和其他相关信息传递给源容器.这使得源容器可以轻松地发现和连接到链接的容器.

语法:--link 链接容器名称:源容器内的主机名

连接redis-server:

root@b33298a59a78:/data# redis-cli -h server -p 6379
server:6379> 
  • step3. 尝试在客户端执行命令

server:6379> SET name Peter
OK
  • step4. 再打开一个cmd窗口,再创建一个redis客户端容器

(base) root@yuanhong StudyRedisBaseOnDocker % docker run -it --name redis-client2 --link redis-server:server redis:latest /bin/bash
root@6945b1178f8c:/data# 

4.4.2 通过docker inspect命令观察IP地址

  • step1. 检查redis-server容器的IP地址

(base) root@yuanhong ~ % docker inspect redis-server|grep IPAddress
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.2",
                    "IPAddress": "172.17.0.2",

可以看到,名为redis-server的容器,其IP地址为172.17.0.2

  • step2. 检查redis-client1容器的IP地址

(base) root@yuanhong ~ % docker inspect redis-client1|grep IPAddress
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.3",
                    "IPAddress": "172.17.0.3",

可以看到,名为redis-client1的容器,其IP地址为172.17.0.3

  • step3. 检查redis-client2容器的IP地址

(base) root@yuanhong ~ % docker inspect redis-client2|grep IPAddress
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.4",
                    "IPAddress": "172.17.0.4",

可以看到,名为redis-client2的容器,其IP地址为172.17.0.4

4.4.3 实践客户端命令

在redis-client1容器中,查看连接到Redis服务器的所有客户端信息:

server:6379> CLIENT LIST
id=3 addr=172.17.0.3:49948 laddr=172.17.0.2:6379 fd=8 name= age=724 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=26 qbuf-free=40928 argv-mem=10 obl=0 oll=0 omem=0 tot-mem=61466 events=r cmd=client user=default redir=-1
id=4 addr=172.17.0.4:39362 laddr=172.17.0.2:6379 fd=9 name= age=4 idle=4 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 argv-mem=0 obl=0 oll=0 omem=0 tot-mem=20496 events=r cmd=command user=default redir=-1

从2个连接的addr和laddr属性可以看出,和上一小节中获取的容器IP地址是相同的

设置redis-client1的连接名为client1:

server:6379> CLIENT GETNAME
(nil)
server:6379> CLIENT SETNAME client1
OK
server:6379> CLIENT GETNAME
"client1"

注:此时若在任意一个redis客户端上执行SHUTDOWN命令,则redis服务端和客户端都会关闭连接.该命令很容易造成生产事故!

4.4.4 通过info观察服务器状态

在redis-client2容器内连接redis-server后,查看服务器状态:

server:6379> INFO Stats
# Stats
total_connections_received:2
total_commands_processed:9
instantaneous_ops_per_sec:0
total_net_input_bytes:354
total_net_output_bytes:45639
instantaneous_input_kbps:0.00
instantaneous_output_kbps:0.00
rejected_connections:0
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_keys:0
expired_stale_perc:0.00
expired_time_cap_reached_count:0
expire_cycle_cpu_milliseconds:39
evicted_keys:0
keyspace_hits:0
keyspace_misses:0
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:0
total_forks:0
migrate_cached_sockets:0
slave_expires_tracked_keys:0
active_defrag_hits:0
active_defrag_misses:0
active_defrag_key_hits:0
active_defrag_key_misses:0
tracking_total_keys:0
tracking_total_items:0
tracking_total_prefixes:0
unexpected_error_replies:0
total_error_replies:2
dump_payload_sanitizations:0
total_reads_processed:12
total_writes_processed:11
io_threaded_reads_processed:0
io_threaded_writes_processed:0

注:此处只查看了Stats部分的内容

在redis-client1容器中执行一些命令:

server:6379> SET salary 10000
OK
server:6379> SET gender male
OK

再次在redis-client2容器中查看服务器状态:

server:6379> INFO Stats
# Stats
total_connections_received:2
total_commands_processed:12
instantaneous_ops_per_sec:0
total_net_input_bytes:450
total_net_output_bytes:46610
instantaneous_input_kbps:0.00
instantaneous_output_kbps:0.00
rejected_connections:0
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_keys:0
expired_stale_perc:0.00
expired_time_cap_reached_count:0
expire_cycle_cpu_milliseconds:41
evicted_keys:0
keyspace_hits:0
keyspace_misses:0
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:0
total_forks:0
migrate_cached_sockets:0
slave_expires_tracked_keys:0
active_defrag_hits:0
active_defrag_misses:0
active_defrag_key_hits:0
active_defrag_key_misses:0
tracking_total_keys:0
tracking_total_items:0
tracking_total_prefixes:0
unexpected_error_replies:0
total_error_replies:2
dump_payload_sanitizations:0
total_reads_processed:15
total_writes_processed:14
io_threaded_reads_processed:0
io_threaded_writes_processed:0

可以看到total_commands_processed配置项发生了变化

两台Redis客户端远程连接到Redis服务器的效果