博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Redis 高可用及分片集群,说了你也不懂
阅读量:2225 次
发布时间:2019-05-09

本文共 7028 字,大约阅读时间需要 23 分钟。

Redis 简介

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

Redis 安装和基本配置

1.安装教程

下载:wget http://download.redis.io/releases/redis-3.2.10.tar.gz解压:tar xzf redis-3.2.10.tar.gzmv redis-3.2.10 redis安装:cd redismake启动:src/redis-server &

2.配置文件

vi /etc/redis.conf

是否后台运行:daemonize  yes默认端口:port 6379日志文件位置logfile /var/log/redis.logRDB持久化数据文件:dbfilename dump.rdb持久化文件的位置:dir /data/redis

3.安全配置

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

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

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

5.在线修改配置

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

Redis 持久化

RDB持久化

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

AOF持久化

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

Redis 开发/管理实战

数据类型

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

全局key操作

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

消息模式

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

事务

DISCARD 取消事务,放弃执行事务块内的所有命令。EXEC 执行所有事务块内的命令。MULTI 标记一个事务块的开始。UNWATCH 取消 WATCH 命令对所有 key 的监视。WATCH key [key ...] 监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。---------------------具体的命令----  watch命令例: redis 127.0.0.1:6379> watch ticketOKredis 127.0.0.1:6379> multiOKredis 127.0.0.1:6379> decr ticketQUEUEDredis 127.0.0.1:6379> decrby money 100QUEUED//现在已经对ticket进行了监控,另外一个窗口将ticket改动了另一个窗口:> decr ticket    redis 127.0.0.1:6379> exec(nil)   // 返回nil,说明监视的ticket已经改动了,事务就取消了.队列就不执行了。redis 127.0.0.1:6379>mget ticket money"0""200"watch key1 key2  ... keyN作用:监听key1 key2..keyN有没有变化,如果任意一个有变, 则事务取消unwatch 作用: 取消所有watch监听

服务器管理命令

InfoClinet listClient kill ip:portconfig get *CONFIG RESETSTAT 重置统计CONFIG GET/SET 动态修改DbsizeFLUSHALL 清空所有数据 select 1FLUSHDB 清空当前库MONITOR 监控实时指令SHUTDOWN 关闭服务器save将当前数据保存SLAVEOF host port 主从配置SLAVEOF NO ONESYNC 主从同步ROLE返回主从角色

Redis 高可用及集群技术

主从复制

1.环境配置

准备两个或两个以上redis实例    mkdir -p /data/6380/    mkdir -p /data/6381/    mkdir -p /data/6382/-------------/data/6380/redis.conf/data/6381/redis.conf/data/6382/redis.conf三套配置文件示例:vim /data/6380/redis.conf----------------bind 127.0.0.1 10.0.0.200port 6380daemonize yespidfile /data/6380/redis.pidloglevel noticelogfile "/data/6380/redis.log"dbfilename dump.rdbdir /data/6380appendonly noappendfilename "appendonly.aof"appendfsync everysecslowlog-log-slower-than 10000slowlog-max-len 128protected-mode no6381/6382文件配置同上启动:/application/redis/src/redis-server   /data/6380/redis.conf/application/redis/src/redis-server  /data/6381/redis.conf/application/redis/src/redis-server /data/6382/redis.conf查看启动状态netstat -lnp|grep 638主节点:6380从节点:6381、6382开启主从:6381/6382命令行:redis-cli -p 6381SLAVEOF 127.0.0.1 6380redis-cli -p 6382SLAVEOF 127.0.0.1 6380主从复制状态监控:info replication主从切换:slaveof no one

2.配置sentinel 哨兵

mkdir /data/26380 cp /application/redis/src/redis-sentinel /data/26380cd /data/26380 ./redis-sentinel ./sentinel.confvim sentinel.confport 26380dir "/tmp"sentinel monitor mymaster 127.0.0.1 6380 1sentinel down-after-milliseconds mymaster 5000sentinel config-epoch mymaster 0启动 ./redis-sentinel ./sentinel.conf

3.python连接 redis-sentinel集群

1、安装python3.5 tar xf Python-3.5.2.tar.xz cd Python-3.5.2./configuremake && make install2、安装redis的python驱动unzip redis-py-master.zipcd redis-py-masterpython3 setup.py install3、python3连接redis  sentinel集群连接之前必须先启动哨兵 切记切记cd /data/26380 ./redis-sentinel ./sentinel.confpython3>>>from redis.sentinel import Sentinel  >>>sentinel = Sentinel([('localhost', 26380)], socket_timeout=0.1)  >>>sentinel.discover_master('mymaster')  >>>sentinel.discover_slaves('mymaster')  >>>master = sentinel.master_for('mymaster', socket_timeout=0.1)  >>>slave = sentinel.slave_for('mymaster', socket_timeout=0.1)  >>>master.set('foo', 'bar')  >>>slave.get('foo')

4.redis cluser集群组件安装

EPEL源安装ruby支持yum install ruby rubygems -y使用国内源gem sources -a http://mirrors.aliyun.com/rubygems/ gem sources  --remove http://rubygems.org/gem sources -lgem install redis -v 3.3.3--------------------0、集群节点准备,创建节点目录:mkdir -p /data/7000mkdir -p /data/7001mkdir -p /data/7002mkdir -p /data/7003mkdir -p /data/7004mkdir -p /data/70051、配置文件添加:-------------------------vim /data/7000/redis.confport 7000daemonize yespidfile /data/7000/redis.pidlogfile "/var/log/redis7000.log"dbfilename dump.rdbdir /data/7000cluster-enabled yescluster-config-file nodes.confcluster-node-timeout 5000appendonly yes7001/7002/7003/7004/7005节点配置同上-------------------------------2、启动所有节点/application/redis/src/redis-server /data/7000/redis.conf/application/redis/src/redis-server /data/7001/redis.conf/application/redis/src/redis-server /data/7002/redis.conf/application/redis/src/redis-server /data/7003/redis.conf/application/redis/src/redis-server /data/7004/redis.conf/application/redis/src/redis-server /data/7005/redis.confps -ef |grep 700-------------------------3、集群创建/application/redis/src/redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 \127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005---------------------4、集群状态查看/application/redis/src/redis-cli -p 7000 cluster nodes | grep master/application/redis/src/redis-cli -p 7000 cluster nodes | grep slave

Redis 多API开发实践

Python 连接 redis cluster

(1) redis-py并没有提供redis-cluster的支持,去github找了一下,有个叫redis-py-cluster的源码,但是和redis-py不是一个作者,地址为:https://github.com/Grokzen/redis-py-clusterwatch,star,fork还算可以。(2) 安装unzip redis-py-cluster-unstable.zipcd redis-py-cluster-unstablepython3 setup.py install(3) 使用>>> from rediscluster import StrictRedisCluster  >>> startup_nodes = [{"host": "127.0.0.1", "port": "7000"}]  >>> # Note: decode_responses must be set to True when used with python3  >>> rc = StrictRedisCluster(startup_nodes=startup_nodes, decode_responses=True)  >>> rc.set("foo", "bar")  >>> print(rc.get("foo"))

转载于:https://www.cnblogs.com/iyouyue/p/8996284.html

你可能感兴趣的文章
Logistic regression 为什么用 sigmoid ?
查看>>
Logistic Regression 为什么用极大似然函数
查看>>
SVM 的核函数选择和调参
查看>>
LightGBM 如何调参
查看>>
用 TensorFlow.js 在浏览器中训练神经网络
查看>>
cs230 深度学习 Lecture 2 编程作业: Logistic Regression with a Neural Network mindset
查看>>
梯度消失问题与如何选择激活函数
查看>>
为什么需要 Mini-batch 梯度下降,及 TensorFlow 应用举例
查看>>
为什么在优化算法中使用指数加权平均
查看>>
什么是 Q-learning
查看>>
用一个小游戏入门深度强化学习
查看>>
5 分钟入门 Google 最强NLP模型:BERT
查看>>
初探Java设计模式4:一文带你掌握JDK中的设计模式
查看>>
初探Java设计模式5:一文了解Spring涉及到的9种设计模式
查看>>
Java集合详解1:一文读懂ArrayList,Vector与Stack使用方法和实现原理
查看>>
Java集合详解2:一文读懂Queue和LinkedList
查看>>
Java集合详解3:一文读懂Iterator,fail-fast机制与比较器
查看>>
Java集合详解4:一文读懂HashMap和HashTable的区别以及常见面试题
查看>>
Java集合详解5:深入理解LinkedHashMap和LRU缓存
查看>>
Java集合详解6:这次,从头到尾带你解读Java中的红黑树
查看>>