redis

  • 复制(主从节点,如果主节点宕机需要手动切换)
  • 哨兵(使用哨兵进程对多redis节点监控,使用发布订阅修改redis配置,实现自动切换主节点)
  • 集群(数据量大的情况下,单一节点无法完全存储,采用分布式方式对数据分片存储):
    采用rediscluster集群方案(没有中心节点),数据分布式存储在集群中各主节点中,为防止主节点挂掉,每个主节点配置相应数量冗余节点进行备份.
    redis_第1张图片
  • 集群内部使用主从配置:
    redis_第2张图片
  • 数据分布式存储:
    redis_第3张图片
    建立集群步骤:
    1.运行docker容器:
    • 默认情况下不能指定ip地址

C:\Users\fei>docker run -it -d --name r1 --ip 172.0.0.2 redis
fc17ad8d02c4a7a66378c72874ab834d18558d0866d241b2423bb319db933bf0
docker: Error response from daemon: Invalid address 172.0.0.2: It does not belong to any of this network’s subnets.

    • 创建自定义网络

C:\Users\fei>docker network create --subnet=172.0.0.0/16 mynetwork
docker network ls命令查看桥接网络

    • 创建指定IP地址的redis容器

docker run -it --name r1 --net mynetwork --ip 172.0.0.2 redis
类似方法再依次创建6个不同ip地址的redis容器

2.修改配置文件,配置redis节点
redis_第4张图片
3.使用redis-trib.rb创建redis集群(replicas参数指定每个主节点的从节点数量)

redis-trib.rb create --replicas 1 172.0.0.2:6380 172.0.0.3:6381 172.0.0.4:6382 172.0.0.5:6380 172.0.0.6:6380 172.0.0.7:6380(将会创建3个主节点3个从节点)

4.随便连接到集群中的一个主节点容器如172.0.0.2:6380

docker exec -it r1
redis-cli -c
向其中存入数据则redis集群会进行计算并将数据存入到集群中的某个主节点中(虽然连接到了172.0.0.2节点但可能数据会被存放到其他主节点,当主节点无响应时数据会被存放到此主节点对应的从节点中)

5.redis主从服务器数据采用异步方式进行同步
(1)全量同步:用于从服务器从来第一次和当前主服务器连接.
(2)增量同步:用于从服务器断线后重新和之前连接的主服务器恢复连接.

redis事务:
redis事务可以使事务中的一组命令要么全部执行要么全不执行(如果在发送exec命令前客户端断线了,则redis会清空事务队列,事务中所有命令都不执行,而一旦发送了exec命令,所有命令都会执行,即使断线也没关系)以及Redis事务还能保证一个事物内的命令依次执行不被其他命令插入,但redis的事务不具有回滚,以及中止执行的功能。(来自redis入门指南)
其事务特点是:

  1. 批量操作在发送 EXEC 命令前被放入队列缓存。
  2. 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。
  3. 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。

watch命令(监视一个(或多个) key ,一旦其中有一个键被修改,之后的事务不会执行,监控一直持续到exec命令)
如果使用事务只有当一个事务中所有命令一次执行完才能执行其他命令,在一些情况下需要先获得一条命令的返回值在进行下一步操作如进行increase增加操作时,此时可以将watch与事务结合使用防止竞态,达到一个客户端在进行操作时不影响另一个客户端修改数据的效果(redis实际上是采用了线程封闭的观念,把任务封闭在一个线程,自然避免了线程安全问题,不过对于需要依赖多个redis操作的复合操作来说,依然需要锁)。
redis_第5张图片

redis通过组合使用 INCR 和 EXPIRE ,来达到只在规定的生存时间内进行计数(counting)的目的。为防止 EXPIRE 没有执行,计数器就会一直存在下去的情况,可以结合事务使用。将INCR 和 EXPIRE写到一个事务中。

你可能感兴趣的:(redis)