redis的读写分离设计与实现

背景:

在项目压力测试期间出现单线程的redis操作读写有时对线程资源的竞争情况,导致在获取不到数据,或者获取数据的时候出现数据丢失的情况。

需求:

在大并发的时候,可以有效的对redis缓存进行操作,不会因为单线程的的资源竞争导致无效的操作。

技术实现:

既然知道是在并发的情况下,因为redis资源的竞争,导致的无效操作。那么为了避免这种资源竞争,可以通过redis集群的方式来实现数据的一致性,下面来看一下最简单的集群方式:一主一从的实现。

  1. redis-server及redis-cli等相关依赖的软件安装。
  2. 安装好以后拷贝redis.conf 到/etc/目录下面
  3. 修改配置文件中的一下选项
1 #bind 127.0.0.1
2 protected-mode yes
3 port 6379
4 daemonize yes
5 requirepass passwd
  1. 启动redis-server服务器
1 /usr/local/bin/redis-server /etc/redis.conf 
  1. 查看服务是否启动
1 [root@localhost bin]# ps aux | grep redis
2 root      1659  0.0  0.0 139132  9724 ?        Ssl  09:30   0:02 /usr/local/bin/redis-server 192.168.171.118:6379
3 root      4898  0.0  0.0 137084  7688 ?        Ssl  09:51   0:02 /usr/local/bin/redis-server 192.168.171.118:6380
4 root     12279  0.0  0.0 112820   976 pts/1    S+   11:17   0:00 grep --color=auto redis
  1. 配置从服务器配置文件,
  2. 拷贝redis.conf配置文件copy_redis..conf
  3. 修改一下选项
#bind 127.0.0.1
protected-mode yes

port 6380
daemonize yes

# slaveof <masterip> <masterport>
slaveof 127.0.0.1 6379

# masterauth <master-passwor#d>
 masterauth passwd
pidfile /usr/local/redis/redis_6380.pid
requirepass passwd
  1. 启动从服务器
1 /usr/local/bin/redis-server  /etc/copy_redis.conf 
  1. 通过redis-cli查看主从模式的redis集群信息
1 info replication

显示信息如下

 1 [root@localhost bin]# redis-cli -h 127.0.0.1 -p 6379
 2 127.0.0.1:6379> AUTH passwd
 3 OK
 4 127.0.0.1:6379> info replication
 5 # Replication
 6 role:master
 7 connected_slaves:1
 8 slave0:ip=127.0.0.1,port=6380,state=online,offset=8158,lag=1
 9 master_repl_offset:8158
10 repl_backlog_active:1
11 repl_backlog_size:1048576
12 repl_backlog_first_byte_offset:2
13 repl_backlog_histlen:8157
14 127.0.0.1:6379> 

切记,主从模式下从服务器可以当做读服务器,写数据的话是不会成功的,所以到时候不要一头雾水

posted @ 2021-01-04 11:32  first_semon  阅读(402)  评论(0编辑  收藏  举报