Redis

redis官网:https://redis.io/
中文网:http://www.redis.cn/
本次环境:CentOS 7.0+redis 3.0.4
1.安装(3.0.4)
前提:需要gcc环境
1)解压压缩包
tar -zxvf redis-3.0.4.tar.gz
2)进入redis目录中,编译
cd redis-3.0.4/
make
3)启动服务(在src目录下)
./redis-server
启动服务端和客户端命令补充
服务端启动redis并指定参考的配置文件.
./redis-server redis.conf的文件路径
2. 客户端启动命令
./redis-cli -h redis所在机器的ip地址 -p 端口
看到如下图所示,则说明安装成功

4)复制连接,用客户端访问测试

2.命令
1)进入指定的数据库
select 数据库索引
2)查看当前数据库key的数量
DBSIZE
3)当前所在数据库所有的键
keys *
4)删除数据
FLUSHDB 删除当前库
FLUSHALL 删除所有库
5)键(key)想关的命令
keys * 查看当前库所有的键
exists key 判断该键对应的值,是否存在
move key 指定的数据库索引 将该键对应的值移到指定的库中
expire key 给指定的键设置有效时间 时间单位是秒
ttl key 查看指定的key还有多长时间过期 -1表示永不过期 -2表示已经过期
type key 查看键是什么类型
6)值为String部分命令
del key 删除键对应的值
append key 在该键对应的值后面追加
strlen key 返回该键对应的值的长度
incr key 对该键对应的值加一操作
decr key 对该键对应的值减一操作
incrby key 数值 对该键对应的值,进行指定数值的加操作
decrby key 数值 对该键对应的值,进行指定数值的减操作
getrange key 索引值1 索引值2 获取两个索引值之间的 值 若两个索引值是 0 -1则是全部值
setrange key 索引值 数据 从索引值开始将数据对值进行覆盖
setex key 存活时间(单位是毫秒)值 设置该key对应的值的存活时间
SETNX key v 如果值不存在就设置值为v,存在则设置失败
mset key1 value1 key2 value2 设置多个键值对
mget key1 key2 key3 取key1 key2 key3的值
7)值为list相关命令(数据结构是先进先出,跟消息队列很类似)
rpush key value 向右侧添加一个值
lindex key 索引 获取改索引对应的值
8)值为set相关的命令
sadd key 值1 值2 向set中添加值1 值2
SMEMBERS key 获取改key对应的set集合中所有元素
scard key 获取集合元素的个数
SPOP key 删除任意一个值
SRem key 值1 删除值1
SDIFF key1 key2 返回,在key1集合中除去重复的部分
SINTER key1 key2 返回交集
SUNION key1 key2 返回并集
9)hash相关的命令
hash的数据结构:整体结构依然是key–value,但value又是一个key–value,如下图:用于自定义实现mybatis的二级缓存

hset user username zhangsan 给user这个键设置单个值
hget user username 获取user这个键对应的username的值
hmset user username lisi age 20 address henan 给user这个键设置多个值
hmget user username age address 获取多个
hgetall user 获取user这个键的所有值
hkeys user 或取user这个键的所有键
hvals user 或取user这个键的所有值
HEXISTS user email 判断user这个键,是不是存在email这个键
10)zset相关的命令
zadd user001 80 age003 添加一个元素
3.redis配置文件详解
参数说明
redis.conf 配置项说明如下:

  1. Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程
      daemonize no
  2. 当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,可以通过pidfile指定
      pidfile /var/run/redis.pid
  3. 指定Redis监听端口,默认端口为6379,作者在自己的一篇博文中解释了为什么选用6379作为默认端口,因为6379在手机按键上MERZ对应的号码,而MERZ取自意大利歌女Alessia Merz的名字
      port 6379
  4. 绑定的主机地址
      bind 127.0.0.1
    5.当 客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能
      timeout 300
  5. 指定日志记录级别,Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose
      loglevel verbose
  6. 日志记录方式,默认为标准输出,如果配置Redis为守护进程方式运行,而这里又配置为日志记录方式为标准输出,则日志将会发送给/dev/null
      logfile stdout
  7. 设置数据库的数量,默认数据库为0,可以使用SELECT 命令在连接上指定数据库id
      databases 16
  8. 指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合
      save
      Redis默认配置文件中提供了三个条件:
      save 900 1
      save 300 10
      save 60 10000
      分别表示900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改。
  9. 指定存储至本地数据库时是否压缩数据,默认为yes,Redis采用LZF压缩,如果为了节省CPU时间,可以关闭该选项,但会导致数据库文件变的巨大
      rdbcompression yes
  10. 指定本地数据库文件名,默认值为dump.rdb
      dbfilename dump.rdb
  11. 指定本地数据库存放目录
      dir ./
  12. 设置当本机为slav服务时,设置master服务的IP地址及端口,在Redis启动时,它会自动从master进行数据同步
      slaveof
  13. 当master服务设置了密码保护时,slav服务连接master的密码
      masterauth
  14. 设置Redis连接密码,如果配置了连接密码,客户端在连接Redis时需要通过AUTH 命令提供密码,默认关闭
      requirepass foobared
  15. 设置同一时间最大客户端连接数,默认无限制,Redis可以同时打开的客户端连接数为Redis进程可以打开的最大文件描述符数,如果设置 maxclients 0,表示不作限制。当客户端连接数到达限制时,Redis会关闭新的连接并向客户端返回max number of clients reached错误信息
      maxclients 128
  16. 指定Redis最大内存限制,Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理 后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis新的vm机制,会把Key存放内存,Value会存放在swap区
      maxmemory
  17. 指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为 redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认为no
      appendonly no
  18. 指定更新日志文件名,默认为appendonly.aof
       appendfilename appendonly.aof
  19. 指定更新日志条件,共有3个可选值: 
      no:表示等操作系统进行数据缓存同步到磁盘(快) 
      always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全) 
      everysec:表示每秒同步一次(折衷,默认值)
      appendfsync everysec
  20. 指定是否启用虚拟内存机制,默认值为no,简单的介绍一下,VM机制将数据分页存放,由Redis将访问量较少的页即冷数据swap到磁盘上,访问多的页面由磁盘自动换出到内存中(在后面的文章我会仔细分析Redis的VM机制)
       vm-enabled no
  21. 虚拟内存文件路径,默认值为/tmp/redis.swap,不可多个Redis实例共享
       vm-swap-file /tmp/redis.swap
  22. 将所有大于vm-max-memory的数据存入虚拟内存,无论vm-max-memory设置多小,所有索引数据都是内存存储的(Redis的索引数据 就是keys),也就是说,当vm-max-memory设置为0的时候,其实是所有value都存在于磁盘。默认值为0
       vm-max-memory 0
  23. Redis swap文件分成了很多的page,一个对象可以保存在多个page上面,但一个page上不能被多个对象共享,vm-page-size是要根据存储的 数据大小来设定的,作者建议如果存储很多小对象,page大小最好设置为32或者64bytes;如果存储很大大对象,则可以使用更大的page,如果不 确定,就使用默认值
       vm-page-size 32
  24. 设置swap文件中的page数量,由于页表(一种表示页面空闲或使用的bitmap)是在放在内存中的,,在磁盘上每8个pages将消耗1byte的内存。
       vm-pages 134217728
  25. 设置访问swap文件的线程数,最好不要超过机器的核数,如果设置为0,那么所有对swap文件的操作都是串行的,可能会造成比较长时间的延迟。默认值为4
       vm-max-threads 4
  26. 设置在向客户端应答时,是否把较小的包合并为一个包发送,默认为开启
      glueoutputbuf yes
  27. 指定在超过一定的数量或者最大的元素超过某一临界值时,采用一种特殊的哈希算法
      hash-max-zipmap-entries 64
      hash-max-zipmap-value 512
  28. 指定是否激活重置哈希,默认为开启(后面在介绍Redis的哈希算法时具体介绍)
      activerehashing yes
  29. 指定包含其它的配置文件,可以在同一主机上多个Redis实例之间使用同一份配置文件,而同时各个实例又拥有自己的特定配置文件
      include /path/to/local.conf
    解决redis远程连接不上问题
    修改redis.conf文件以下几个地方。
    #固定这个ip可以连接的上
    1.bind 127.0.0.1改为 #bind 127.0.0.1 (注释掉)
    #设置外部网络连接redis服务
    2.protected-mode yes 改为 protected-mode no
    4.redis的事务(中文网关于事务的介绍http://www.redis.cn/topics/transactions.html)
    官网定义:事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
    事务的命令:

5.redis集群的搭建(本次采用伪分布式)
1)拷贝多个redis.conf文件(启动服务的时候,以指定文件的形式启动)
2)修改redis的配置
1)值修改为yes
  daemonize yes
2)文件名修改为redis端口.pid
  pidfile /var/run/redis端口.pid
3)修改端口唯一
  port 6379
4)修改log文件的名字
logfile “文件名字”
5)修改dump.rdb文件的名字
dbfilename dump端口.rdb
3)以配置文件的形式启动三个服务
服务端启动redis并指定参考的配置文件.
./redis-server redis.conf的文件路径
客户端启动命令
./redis-cli -h redis所在机器的ip地址 -p 端口
4)在作为从机的终端执行一下命令
slaveof 主机ip 主机端口
现在的情形是:从机只读不能写
主机挂了,从机是待命的状态
从机挂了,需要重新与主机建立连接
注意:如果从机执行写操作,那么主机和从机之间连接就会段
主从复制,读写分离的其他命令
1)查看机器状态,是从机?还是主机
INFO replication
2)反客为主,就是在即将成为主机的从机上执行
SLAVEOF no one
6.哨兵模式
模式图:

1)是什么样?
当主服务器宕机后,需要自动选举一台从服务器切换为主服务器
2)配置:
#在redis的根目录下有sentinel.conf的配置文件
sentinel monitor 监控主机的名字(自定义) 主机ip 主机端口 1代表只有一个或一个以上的哨兵认为主服务器不可用的时候,才会进行failover操作。
sentinel monitor mymaster 127.0.0.1 6379 1

sentinel author-pass定义服务的密码,mymaster是服务名称,123456是Redis服务器密码

sentinel auth-pass

sentinel auth-pass mymaster 123456
3)启动哨兵服务
./redis-sentinel /root/redis-5.0.5/sentinel.conf
4)sentinel.conf文件详解

哨兵sentinel实例运行的端口,默认26379

port 26379

哨兵sentinel的工作目录

dir ./

哨兵sentinel监控的redis主节点的

ip:主机ip地址

port:哨兵端口号

master-name:可以自己命名的主节点名字(只能由字母A-z、数字0-9 、这三个字符".-_"组成。)

quorum:当这些quorum个数sentinel哨兵认为master主节点失联 那么这时 客观上认为主节点失联了

sentinel monitor

sentinel monitor mymaster 127.0.0.1 6379 2

当在Redis实例中开启了requirepass ,所有连接Redis实例的客户端都要提供密码。

sentinel auth-pass

sentinel auth-pass mymaster 123456

指定主节点应答哨兵sentinel的最大时间间隔,超过这个时间,哨兵主观上认为主节点下线,默认30秒

sentinel down-after-milliseconds

sentinel down-after-milliseconds mymaster 30000

指定了在发生failover主备切换时,最多可以有多少个slave同时对新的master进行同步。这个数字越小,完成failover所需的时间就越长;反之,但是如果这个数字越大,就意味着越多的slave因为replication而不可用。可以通过将这个值设为1,来保证每次只有一个slave,处于不能处理命令请求的状态。

sentinel parallel-syncs

sentinel parallel-syncs mymaster 1

故障转移的超时时间failover-timeout,默认三分钟,可以用在以下这些方面:

1. 同一个sentinel对同一个master两次failover之间的间隔时间。

2. 当一个slave从一个错误的master那里同步数据时开始,直到slave被纠正为从正确的master那里同步数据时结束。

3. 当想要取消一个正在进行的failover时所需要的时间。

4.当进行failover时,配置所有slaves指向新的master所需的最大时间。不过,即使过了这个超时,slaves依然会被正确配置为指向master,但是就不按parallel-syncs所配置的规则来同步数据了

sentinel failover-timeout

sentinel failover-timeout mymaster 180000

当sentinel有任何警告级别的事件发生时(比如说redis实例的主观失效和客观失效等等),将会去调用这个脚本。一个脚本的最大执行时间为60s,如果超过这个时间,脚本将会被一个SIGKILL信号终止,之后重新执行。

对于脚本的运行结果有以下规则:

1. 若脚本执行后返回1,那么该脚本稍后将会被再次执行,重复次数目前默认为10。

2. 若脚本执行后返回2,或者比2更高的一个返回值,脚本将不会重复执行。

3. 如果脚本在执行过程中由于收到系统中断信号被终止了,则同返回值为1时的行为相同。

sentinel notification-script

sentinel notification-script mymaster /var/redis/notify.sh

这个脚本应该是通用的,能被多次调用,不是针对性的。

sentinel client-reconfig-script

sentinel client-reconfig-script mymaster /var/redis/reconfig.sh

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值