Redis 高可用及分片集群,说了你也不懂

Redis 简介

1Memcached: 2 优点:高性能读写、单一数据类型、支持客户端式分布式集群、一致性hash 3多核结构、多线程读写性能高。 4 缺点:无持久化、节点故障可能出现缓存穿透、分布式需要客户端实现、跨机房数据同步困难、架构扩容复杂度高 5Redis: 6 优点:高性能读写、多数据类型支持、数据持久化、高可用架构、支持自定义虚拟内存、支持分布式分片集群、单线程读写性能极高 7 缺点:多线程读写较Memcached慢

Redis 安装和基本配置

1.安装教程

1下载: 2wget http://download.redis.io/releases/redis-3.2.10.tar.gz 3解压: 4tar xzf redis-3.2.10.tar.gz 5mv redis-3.2.10 redis 6安装: 7cd redis 8make 9启动: 10src/redis-server &

2.配置文件 vi /etc/redis.conf

1是否后台运行: 2daemonize yes 3默认端口: 4port 6379 5日志文件位置 6logfile /var/log/redis.log 7RDB持久化数据文件: 8dbfilename dump.rdb 9持久化文件的位置: 10dir /data/redis

3.安全配置

1Bind 2 指定IP进行监听 bind 10.0.0.129(本地) 127.0.0.1 3禁止protected-mode 4 protected-mode yes/no (保护模式,是否只允许本地访问) 5增加requirepass {password} 6 requirepass root

4.配置完成后需要重启Redis

1127.0.0.1:6379> shutdown 2/application/redis/src/redis-server /etc/redis.conf 3/application/redis/src/redis-cli -h 10.0.0.129 -a 123456 -p 6379

5.在线修改配置

1获取当前配置 2CONFIG GET * 3变更运行配置 4CONFIG SET requirepass 123456

Redis 持久化

RDB持久化

1基于时间点快照的方式,复用方式进行数据持久化 2比较常用的方式,效率较高,安全性相对较低 3 4/etc/redis.conf中添加以下内容 5dbfilename dump.rdb 6dir /data/redis 7save 900 1 8save 300 10 9save 60 10000 10 11分别表示: 12 rdb文件名 13 rdb的放置路径 14 900秒(15分钟)内有1个更改 15 300秒(5分钟)内有10个更改 16 60秒内有10000个更改 17 当达到以上定义的配置时间时,就将内存数据持久化到磁盘。

AOF持久化

1只追加的方式记录所有redis中执行过的修改类命令 2效率相对较低,安全性较高 3 4appendonly yes 5appendfsync always或者everysec或者no 6分别表示: 7 是否打开aof日志功能 81个命令,都立即同步到aof

Redis 开发/管理实战

数据类型

1String/Hash/List/Set/Sorted set 2增删改查操作:自己查文档

全局key操作

1KEYS * 查看KEY支持通配符 2DEL 删除给定的一个或多个key 3EXISTS 检查是否存在 4RENAME 变更KEY5TYPE 返回键所存储值的类型 6EXPIRE\ PEXPIRE 以秒\毫秒设定生存时间 7TTL\ PTTL 以秒\毫秒为单位返回生存时间 8PERSIST 取消生存实现设置

消息模式

11.队列模式(queuing) 22.发布-订阅模式(publish-subscribe) 3PUBLISH channel msg 4 将信息 message 发送到指定的频道 channel  5SUBSCRIBE channel [channel ...] 6 订阅频道,可以同时订阅多个频道 7PSUBSCRIBE pattern [pattern ...] 8 订阅一个或多个符合给定模式的频道,每个模式以 * 作为匹配符,比如 it* 匹配所 有以 it 开头的频道( it.news 、 it.blog 、 it.tweets 等等), news.* 匹配所有 以 news. 开头的频道( news.it 、 news.global.today 等等),诸如此类 9PUNSUBSCRIBE [pattern [pattern ...]] 10 退订指定的规则, 如果没有参数则会退订所有规则 11PUBSUB sub command [argument [argument ...]] 12 查看订阅与发布系统状态 13注意:使用发布订阅模式实现的消息队列,当有客户端订阅channel后只能收到后续发布到该频道的消息,之前发送的不会缓存,必须Provider和Consumer同时在线。

事务

1DISCARD 2取消事务,放弃执行事务块内的所有命令。 3EXEC 4执行所有事务块内的命令。 5MULTI 6标记一个事务块的开始。 7UNWATCH 8取消 WATCH 命令对所有 key 的监视。 9WATCH key [key ...] 10监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。 11--------------------- 12具体的命令---- watch命令 13: 14redis 127.0.0.1:6379> watch ticket 15OK 16redis 127.0.0.1:6379> multi 17OK 18redis 127.0.0.1:6379> decr ticket 19QUEUED 20redis 127.0.0.1:6379> decrby money 100 21QUEUED 22//现在已经对ticket进行了监控,另外一个窗口将ticket改动了 23另一个窗口:> decr ticket 24redis 127.0.0.1:6379> exec 25(nil) // 返回nil,说明监视的ticket已经改动了,事务就取消了.队列就不执行了。 26redis 127.0.0.1:6379>mget ticket money 27"0" 28"200" 29 30watch key1 key2 ... keyN 31作用:监听key1 key2..keyN有没有变化,如果任意一个有变, 则事务取消 32unwatch 33作用: 取消所有watch监听

服务器管理命令

1Info 2Clinet list 3Client kill ip:port 4config get * 5CONFIG RESETSTAT 重置统计 6CONFIG GET/SET 动态修改 7Dbsize 8FLUSHALL 清空所有数据 9select 1 10FLUSHDB 清空当前库 11MONITOR 监控实时指令 12 13SHUTDOWN 关闭服务器 14save将当前数据保存 15SLAVEOF host port 主从配置 16SLAVEOF NO ONE 17SYNC 主从同步 18ROLE返回主从角色

Redis 高可用及集群技术

主从复制

1.环境配置

1准备两个或两个以上redis实例 2 3 mkdir -p /data/6380/ 4 mkdir -p /data/6381/ 5 mkdir -p /data/6382/ 6------------- 7/data/6380/redis.conf 8/data/6381/redis.conf 9/data/6382/redis.conf 10 11三套配置文件示例: 12vim /data/6380/redis.conf 13---------------- 14bind 127.0.0.1 10.0.0.200 15port 6380 16daemonize yes 17pidfile /data/6380/redis.pid 18loglevel notice 19logfile "/data/6380/redis.log" 20dbfilename dump.rdb 21dir /data/6380 22appendonly no 23appendfilename "appendonly.aof" 24appendfsync everysec 25slowlog-log-slower-than 10000 26slowlog-max-len 128 27protected-mode no 28 296381/6382文件配置同上 30 31启动: 32/application/redis/src/redis-server /data/6380/redis.conf 33/application/redis/src/redis-server /data/6381/redis.conf 34/application/redis/src/redis-server /data/6382/redis.conf 35 36 37查看启动状态 38netstat -lnp|grep 638 39 40主节点:6380 41从节点:63816382 42 43开启主从: 446381/6382命令行: 45 46redis-cli -p 6381 47SLAVEOF 127.0.0.1 6380 48 49 50redis-cli -p 6382 51SLAVEOF 127.0.0.1 6380 52 53 54主从复制状态监控:info replication 55 56主从切换:slaveof no one 57

2.配置sentinel 哨兵

1mkdir /data/26380 2cp /application/redis/src/redis-sentinel /data/26380 3cd /data/26380 4 ./redis-sentinel ./sentinel.conf 5vim sentinel.conf 6 7port 26380 8dir "/tmp" 9sentinel monitor mymaster 127.0.0.1 6380 1 10sentinel down-after-milliseconds mymaster 5000 11sentinel config-epoch mymaster 0 12 13启动 14 ./redis-sentinel ./sentinel.conf

3.python连接 redis-sentinel集群

11、安装python3.5 2 tar xf Python-3.5.2.tar.xz 3 4cd Python-3.5.2 5 6./configure 7 8make && make install 9 102、安装redis的python驱动 11unzip redis-py-master.zip 12cd redis-py-master 13python3 setup.py install 14 15 163、python3连接redis sentinel集群 17 18连接之前必须先启动哨兵 切记切记 19cd /data/26380 20 ./redis-sentinel ./sentinel.conf 21 22python3 23>>>from redis.sentinel import Sentinel 24>>>sentinel = Sentinel([('localhost', 26380)], socket_timeout=0.1) 25>>>sentinel.discover_master('mymaster') 26>>>sentinel.discover_slaves('mymaster') 27>>>master = sentinel.master_for('mymaster', socket_timeout=0.1) 28>>>slave = sentinel.slave_for('mymaster', socket_timeout=0.1) 29>>>master.set('foo', 'bar') 30>>>slave.get('foo')

4.redis cluser集群组件安装

1EPEL源安装ruby支持 2yum install ruby rubygems -y 3使用国内源 4gem sources -a http://mirrors.aliyun.com/rubygems/ 5gem sources --remove http://rubygems.org/ 6gem sources -l 7gem install redis -v 3.3.3 8 9 10-------------------- 110、集群节点准备,创建节点目录: 12mkdir -p /data/7000 13mkdir -p /data/7001 14mkdir -p /data/7002 15mkdir -p /data/7003 16mkdir -p /data/7004 17mkdir -p /data/7005 18 19 201、配置文件添加: 21------------------------- 22vim /data/7000/redis.conf 23 24port 7000 25daemonize yes 26pidfile /data/7000/redis.pid 27logfile "/var/log/redis7000.log" 28dbfilename dump.rdb 29dir /data/7000 30cluster-enabled yes 31cluster-config-file nodes.conf 32cluster-node-timeout 5000 33appendonly yes 34 357001/7002/7003/7004/7005节点配置同上 36------------------------------- 37 382、启动所有节点 39/application/redis/src/redis-server /data/7000/redis.conf 40/application/redis/src/redis-server /data/7001/redis.conf 41/application/redis/src/redis-server /data/7002/redis.conf 42/application/redis/src/redis-server /data/7003/redis.conf 43/application/redis/src/redis-server /data/7004/redis.conf 44/application/redis/src/redis-server /data/7005/redis.conf 45 46 47ps -ef |grep 700 48------------------------- 49 503、集群创建 51 52/application/redis/src/redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 \ 53127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 54--------------------- 554、集群状态查看 56 57/application/redis/src/redis-cli -p 7000 cluster nodes | grep master 58/application/redis/src/redis-cli -p 7000 cluster nodes | grep slave

Redis 多API开发实践

Python 连接 redis cluster

1(1) redis-py并没有提供redis-cluster的支持,去github找了一下,有个叫redis-py-cluster的源码, 2但是和redis-py不是一个作者,地址为:https://github.com/Grokzen/redis-py-cluster 3watch,star,fork还算可以。 4(2) 安装 5 6unzip redis-py-cluster-unstable.zip 7cd redis-py-cluster-unstable 8python3 setup.py install 9 10(3) 使用 11>>> from rediscluster import StrictRedisCluster 12>>> startup_nodes = [{"host": "127.0.0.1", "port": "7000"}] 13>>> # Note: decode_responses must be set to True when used with python3 14>>> rc = StrictRedisCluster(startup_nodes=startup_nodes, decode_responses=True) 15 16>>> rc.set("foo", "bar") 17>>> print(rc.get("foo"))
点赞
收藏

评论区

加载中...

相关推荐

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

Nginx + lua +[memcached,redis]

精品案例1、Nginxluamemcached,redis实现网站灰度发布2、分库分表/基于Leaf组件实现的全球唯一ID(非UUID)3、Redis独立数据监控,实现订单超时操作/MQ死信操作SelectPollEpollReactor模型4、分布式任务调试Quartz应用

CentOS 7下 部署Redis

redis集群是一个无中心的分布式redis存储架构,可以在多个节点之间进行数据共享,解决了redis高可用、可扩展等问题,redis集群提供了以下两个好处:1)将数据自动切分(split)到多个节点2)当集群中的某一个节点故障时,redis还可以继续处理客户端的请求一个Redis集群包含16384个哈希槽(hashslot

Twitter的分布式自增ID算法snowflake (Java版)

概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移

Redis(1.7)Redis高可用架构(理论篇)

【0】常用架构种类  (0.1)单机Redis  (0.2)单纯的Redis主从复制  (0.3)哨兵SentinelRedis主从复制集群(实现高可用自动故障转移)  (0.4)RedisCluster分布式数据库集群  (0.5)第三方中间件Redis主从复制【1】Redis主从复制

Redis 高可用及分片集群,说了你也不懂 - HelloWorld