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.gz
mv redis-3.2.10 redis
安装:
cd redis
make
启动:
src/redis-server &

2.配置文件

vi /etc/redis.conf

是否后台运行:
daemonize yes
默认端口:
port 6379
日志文件位置
logfile /var/log/redis.log
RDB持久化数据文件:
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.rdb
dir /data/redis
save 900 1
save 300 10
save 60 10000 分别表示:
rdb文件名
rdb的放置路径
900秒(15分钟)内有1个更改
300秒(5分钟)内有10个更改
60秒内有10000个更改
当达到以上定义的配置时间时,就将内存数据持久化到磁盘。

AOF持久化

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

Redis 开发/管理实战

数据类型

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

全局key操作

KEYS * 						查看KEY支持通配符
DEL 删除给定的一个或多个key
EXISTS 检查是否存在
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 ticket
OK
redis 127.0.0.1:6379> multi
OK
redis 127.0.0.1:6379> decr ticket
QUEUED
redis 127.0.0.1:6379> decrby money 100
QUEUED
//现在已经对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监听

服务器管理命令

Info
Clinet list
Client kill ip:port
config get *
CONFIG RESETSTAT 重置统计
CONFIG GET/SET 动态修改
Dbsize
FLUSHALL 清空所有数据
select 1
FLUSHDB 清空当前库
MONITOR 监控实时指令 SHUTDOWN 关闭服务器
save将当前数据保存
SLAVEOF host port 主从配置
SLAVEOF NO ONE
SYNC 主从同步
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.200
port 6380
daemonize yes
pidfile /data/6380/redis.pid
loglevel notice
logfile "/data/6380/redis.log"
dbfilename dump.rdb
dir /data/6380
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
slowlog-log-slower-than 10000
slowlog-max-len 128
protected-mode no 6381/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 6381
SLAVEOF 127.0.0.1 6380 redis-cli -p 6382
SLAVEOF 127.0.0.1 6380 主从复制状态监控:info replication 主从切换:slaveof no one

2.配置sentinel 哨兵

mkdir /data/26380
cp /application/redis/src/redis-sentinel /data/26380
cd /data/26380
./redis-sentinel ./sentinel.conf
vim sentinel.conf port 26380
dir "/tmp"
sentinel monitor mymaster 127.0.0.1 6380 1
sentinel down-after-milliseconds mymaster 5000
sentinel 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 ./configure make && make install 2、安装redis的python驱动
unzip redis-py-master.zip
cd redis-py-master
python3 setup.py install 3、python3连接redis sentinel集群 连接之前必须先启动哨兵 切记切记
cd /data/26380
./redis-sentinel ./sentinel.conf python3
>>>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 -l
gem install redis -v 3.3.3 --------------------
0、集群节点准备,创建节点目录:
mkdir -p /data/7000
mkdir -p /data/7001
mkdir -p /data/7002
mkdir -p /data/7003
mkdir -p /data/7004
mkdir -p /data/7005 1、配置文件添加:
-------------------------
vim /data/7000/redis.conf port 7000
daemonize yes
pidfile /data/7000/redis.pid
logfile "/var/log/redis7000.log"
dbfilename dump.rdb
dir /data/7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes 7001/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.conf ps -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-cluster
watch,star,fork还算可以。
(2) 安装 unzip redis-py-cluster-unstable.zip
cd redis-py-cluster-unstable
python3 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"))

Redis 高可用及分片集群,说了你也不懂的更多相关文章

  1. Redis高可用及分片集群

    一.主从复制 使用异步复制 一个服务器可以有多个从服务器 从服务器也可以有自己的从服务器 复制功能不会阻塞主服务器 可以通过服务功能来上主服务器免于持久化操作,由从服务器去执行持久化操作即可. 以下是 ...

  2. Redis高可用-主从,哨兵,集群

    主从复制 Master-Slave主从概念 同时运行多个redis服务端,其中一个作为主(master),其他的一个或多个作为从(slave),主从之间通过网络进行通讯,slave通过复制master ...

  3. 高可用的MongoDB集群【转】

    刚接触MongoDB,就要用到它的集群,只能硬着头皮短时间去看文档和尝试自行搭建.迁移历史数据更是让人恼火,近100G的数据文件,导入.清理垃圾数据执行的速度蜗牛一样的慢.趁着这个时间,把这几天关于M ...

  4. 高可用的MongoDB集群

    1.序言 MongoDB 是一个可扩展的高性能,开源,模式自由,面向文档的数据库. 它使用 C++编写.MongoDB 包含一下特点: l  面向集合的存储:适合存储对象及JSON形式的数据. l ...

  5. 高可用的MongoDB集群-实战篇

    1.概述 最近有同学和网友私信我,问我MongoDB方面的问题:这里我整理一篇博客来赘述下MongoDB供大家学习参考,博客的目录内容如下: 基本操作 CRUD MapReduce 本篇文章是基于Mo ...

  6. 【转载】高可用的MongoDB集群详解

    1.序言 MongoDB 是一个可扩展的高性能,开源,模式自由,面向文档的数据库. 它使用 C++编写.MongoDB 包含一下特点: l  面向集合的存储:适合存储对象及JSON形式的数据. l ...

  7. LVS+Keepalived搭建MyCAT高可用负载均衡集群

    LVS+Keepalived 介绍 LVS LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国 ...

  8. 测试LVS+Keepalived高可用负载均衡集群

    测试LVS+Keepalived高可用负载均衡集群 1. 启动LVS高可用集群服务 此时查看Keepalived服务的系统日志信息如下: [root@localhost ~]# tail -f /va ...

  9. keepalived工作原理和配置说明 腾讯云VPC内通过keepalived搭建高可用主备集群

    keepalived工作原理和配置说明 腾讯云VPC内通过keepalived搭建高可用主备集群 内网路由都用mac地址 一个mac地址绑定多个ip一个网卡只能一个mac地址,而且mac地址无法改,但 ...

随机推荐

  1. 升级到tomcat8遇到The method getDispatcherType() is undefined for the type HttpServletRequest

    今天升级到tomcat8,发现原来的项目不能运行了,遇到下面的错误:The method getDispatcherType() is undefined for the type HttpServl ...

  2. 【WEB HTTP】集成点:网关、隧道及中继

    网关:网关可以作为某种翻译器使用,它抽象出了一种能够到达资源的方法.网关是资源与应用程序之间的粘合剂. 在不同http版本之间进行转换的Web代理和网关一样,他们会执行复杂的逻辑,以便在各个端点之间进 ...

  3. 我常用的VS快捷键

    (VS2008) F4       属性窗口F5       调试F6       停止调试F9  断点F10 单步执行F11 单步执行进入函数 Ctrl + K, Ctrl + F         ...

  4. [转]linux shell 流程控制(条件if,循环【for,while】,选择【case】语句实例

    原文链接:http://www.cnblogs.com/chengmo/archive/2010/10/14/1851434.html linux shell有一套自己的流程控制语句,其中包括条件语句 ...

  5. 【LeetCode】【动态规划】表格移动问题

    前言 这里总结了两道表格移动的问题,分别是:Unique Paths 和 题一:Unique Paths 描述 A robot is located at the top-left corner of ...

  6. OpenGL纹理上下颠倒翻转的三种解决办法

    http://blog.csdn.net/narutojzm1/article/details/51940817 综述 在使用OpenGL函数加载纹理到图形时,经常遇到纹理上下颠倒的问题.原因是因为O ...

  7. STM32F4XX高效驱动篇2 I2C

    说到I2C很多用过STMF10X硬件I2C方式的工程师,都感觉有点头痛.大部分还是使用软件模拟的方式,I2C由于一般的工作频率是400,100KHz.所以在平凡读取,或所读数据量大时,使用这模拟的方式 ...

  8. get_class_methods--返回由类的方法名组成的数组

    get_class_methods--返回由类的方法名组成的数组 array get_class_methods ( mixed $class_name ) 返回由类的方法名组成的数组. <?p ...

  9. 何为RunLoop?RunLoop有哪些应用场景?

    一.RunLoop的作用 一个应用开始运行以后放在那里,如果不对它进行任何操作,这个应用就像静止了一样,不会自发的有任何动作发生,但是如果我们点击界面上的一个按钮,这个时候就会有对应的按钮响应事件发生 ...

  10. K8s 日常操作

    1.获取所有Pods kubectl get pods --namespace=default 2.获取所有Deployments kubectl get deployments --namespac ...