Redis

简介

Redis 是完全开源免费的,是一个高性能的key-value数据库,与其他 key - value 缓存产品有以下特点:
- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
- Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
- Redis支持数据的备份,即master-slave模式的数据备份。
- 性能极高,Redis能读的速度是110000次/s,写的速度是81000次/s 。

安装

  • 下载解压
wget http://download.redis.io/releases/redis-3.2.4.tar.gz
tar –zxvf redis-3.2.4.tar.gz
  • 编译
cd /usr/local/redis-3.2.4
make

可能出现问题make[3]: gcc: Command not found,安装gcc编译工具即可(yum)
- 安装
进入src文件夹,进行安装

cd src
make install
  • 检查是否安装成功
[root@iZwz9io83xn1czh8rty3qlZ redis-3.2.4]# redis-server -v
Redis server v=3.2.4 sha=00000000:0 malloc=jemalloc-4.0.3 bits=64 build=cf1cd2895fae0ed6

配置文件

vi redis.conf
  • 修改绑定IP到安装的主机地址
bind xxx.xxx.xxx.xxx
  • 指定端口
port xxxx
  • 超时时间
timeout xxx
  • 将redis设为守护进程
daemonize yes
  • 自定义守护进程生成文件路径
pidfile /usr/local/redis-3.2.4/redis.pid
  • 选择日志记录等级
loglevel debug
  • 自定义日志路径
logfile "/usr/local/redis-3.2.4/redis.log"
  • 设置数据库数量
databases 16
  • 设置快照策略

after 900 sec (15 min) if at least 1 key changed
15分钟内,至少有1个key发生改变,则保存快照

save 900 1
save 300 10
save 60 10000

启动

redis根目录下执行

redis-server redis.conf

数据类型及基础操作

Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
- String : get、set。注意:一个键最大能存储512MB。
- Hash : hmset、hmget、hkeys、hvals
- List:Lpush、lrange
- Set : sadd、smembers
- zset :

zadd 集合名 序号 集合元素
zadd myzset 1 z1
zadd myzset 2 z2 3 z3
zcard myzset #查看zset集合的成员个数
zrange myzset 0 -1 withscores
zrank myzset z1 #获取zset成员的下标位置
zcount myzset 1 3
zrem myzset z1 #删除指定的一个成员或多个成员
zscore myzset z1
zincrby myzset 4 z1 #z1的分数值加4
zrangebyscore myzset 1 5

事务

Redis 事务可以一次执行多个命令, 有如下特点:
1. 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
2. 事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。
3. 一个事务从开始到执行会经历以下三个阶段:

#开始一个事物
MULTI  
#命令入队
Set test test1 
Get test
#执行事物
Exec 

集群

Ruby 安装 - CentOS 6.5

  • 下载镜像:http://ruby-china.org/wiki/ruby-mirror

安装 Ruby 的步骤。

注意:在安装之前,请确保您有 root 权限。
- 源码安装
下载最新版的 Ruby 压缩文件。
解压到新创建的目录下:

$ tar -xvzf ruby-2.2.3.tgz    
$ cd ruby-2.2.3
  • 现在,配置并编译源代码,如下所示:
$ ./configure
$ make
$ sudo make install
  • 安装后,通过在命令行中输入以下命令来确保一切工作正常:
$ruby -v
ruby 2.2.3……

如果一切工作正常,将会输出所安装的 Ruby 解释器的版本,如上所示。如果您安装了其他版本,则会显示其他不同的版本。

安装redis-3.3.1.gem

ruby安装2.0版本以上,直接包含gem

wget https://rubygems.org/downloads/redis-3.3.1.gem
gem install -l redis-3.3.1.gem

用redis-trib.rb集群工具管理redis集群

./redis-trib.rb  create --replicas 1 xxx.xxx.xxx.xxx:1000 xxx.xxx.xxx.xxx:2000 xxx.xxx.xxx.xxx:3000 xxx.xxx.xxx.xxx:1010 xxx.xxx.xxx.xxx:2010 xxx.xxx.xxx.xxx:3010

–replicas 1 设置从节点个数

进入集群模式去操作redis命令,-c集群模式

redis-cli -c  -h xxx.xxx.xxx.xxx –p 1000

添加节点

./redis-trib.rb add-node 127.0.0.1:7006 127.0.0.1:7000

查看节点情况

cluster nodes

移动哈希槽,哈希槽重新分配

./redis-trib.rb reshard 127.0.0.1:7000

输入all 表示从所有的主节点中随机转移,凑够xx个哈希槽

删除节点

把hash slots转出来,转到其他master节点上

./redis-trib.rb reshard 127.0.0.1:7000

然后删除节点

./redis-trib.rb del-node xxx.xxx.xxx.xxx:9020 94ee1415a16076f4070c5dd4b94defc14618dbb8

Redis-sentinel高可用

Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端)都没有实现自动进行主备切换,而Redis-sentinel本身也是一个独立运行的进程,它能监控多个master-slave集群,发现master宕机后能进行自动切换。

配置文件

vi redis-sentinel

sentinel monitor mymaster 127.0.0.1 6379 2

这个2代表,当集群中有2个sentinel认为master死了时,才能真正认为该master已经不可用了。

sentinel down-after-milliseconds mymaster 60000

sentinel会向master发送心跳PING来确认master是否存活,如果master在“一定时间范围”内不回应PONG 或者是回复了一个错误消息,那么这个sentinel会主观地(单方面地)认为这个master已经不可用了(subjectively down, 也简称为SDOWN)。而这个down-after-milliseconds就是用来指定这个“一定时间范围”的,单位是毫秒。

sentinel failover-timeout mymaster 180000

failover过期时间,当failover开始后,在此时间内仍然没有触发任何failover操作,当前sentinel将会认为此次failoer失败

sentinel parallel-syncs mymaster 1

当新master产生时,同时进行“slaveof”到新master并进行“SYNC”的slave个数
默认为1,建议保持默认值

启动sentinel

[root@iZwz9io83xn1czh8rty3qlZ src]# ./redis-sentinel /usr/local/redis-3.2.4/cluster/sentinel.conf
31525:X 13 Nov 20:22:22.022 # Not listening to IPv6: unsupproted
                _._
           _.-``__ ''-._
      _.-``    `.  `_.  ''-._           Redis 3.2.4 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._
 (    '      ,       .-`  | `,    )     Running in sentinel mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 26379
 |    `-._   `._    /     _.-'    |     PID: 31525
  `-._    `-._  `-./  _.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |           http://redis.io
  `-._    `-._`-.__.-'_.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |
  `-._    `-._`-.__.-'_.-'    _.-'
      `-._    `-.__.-'    _.-'
          `-._        _.-'
              `-.__.-'

31525:X 13 Nov 20:22:22.024 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
31525:X 13 Nov 20:22:22.038 # Sentinel ID is ef32ac43a34f2106d8306579ef9589f6846c9b2c
31525:X 13 Nov 20:22:22.038 # +monitor master mymaster3000 xxx.xxx.xxx.xxx 3000 quorum 1
31525:X 13 Nov 20:22:22.038 # +monitor master mymaster2000 xxx.xxx.xxx.xxx 2000 quorum 1
31525:X 13 Nov 20:22:22.038 # +monitor master mymaster1000 xxx.xxx.xxx.xxx 1000 quorum 1
31525:X 13 Nov 20:22:22.078 * +slave slave xxx.xxx.xxx.xxx:1010 xxx.xxx.xxx.xxx 1010 @ mymaster1000 xxx.xxx.xxx.xxx 1000
31525:X 13 Nov 20:22:22.091 * +slave slave xxx.xxx.xxx.xxx:3010 xxx.xxx.xxx.xxx 3010 @ mymaster3000 xxx.xxx.xxx.xxx 3000
31525:X 13 Nov 20:22:22.098 * +slave slave xxx.xxx.xxx.xxx:2010 xxx.xxx.xxx.xxx 2010 @ mymaster2000 xxx.xxx.xxx.xxx 2000

你可能感兴趣的:(Cache)