Redis学习

Redis 是一个使用 ANSI C 编写的开源、支持 网络、基于 内存单线程模型可选持久性 的 键值对存储数据库

它是一种基于 键值对 的 NoSQL 数据库。与很多键值对数据库不同,Redis 提供了丰富的 值数据存储结构,包括 string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)、bitmap(位图)等等。

Redis特性:

  • 速度快,最快可达到 10w QPS(基于 内存C 语言,单线程 架构);

  • 基于 键值对 (key/value) 的数据结构服务器。全称 Remote Dictionary Server。包括 string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)、bitmap(位图)。同时在 字符串 的基础上演变出 位图BitMaps)和 HyperLogLog 两种数据结构。3.2 版本中加入 GEO地理信息位置)。

  • 丰富的功能。例如:键过期(缓存),发布订阅(消息队列), Lua 脚本(自己实现 Redis 命令),事务流水线Pipeline,用于减少网络开销)。

  • 简单稳定。无外部库依赖,单线程模型。

  • 客户端语言多。

  • 持久化(支持两种 持久化 方式 RDBAOF)。

  • 主从复制(分布式的基础)。

  • 高可用Redis Sentinel),分布式Redis Cluster)和 水平扩容

对于redis的学习可分为三个步骤进行:

  • Redis 单机服务器 搭建
  • Redis 主从复制 搭建
  • Redis-Sentinel 高可用 搭建

redis的安装下载可以参考以前的博文。这里不再赘述。单机redis服务器搭建这里介绍下基本的一些命令与概念

redis-server启动 redis 服务

redis-cli redis命令行客户端

redis-benchmark redis 基准测试工具

redis-check-aofredis AOF 持久化文件检测和修复工具

redis-check-dumpredis RDB 持久化文件检测和修复工具

redis-sentinel启动 redis sentinel

redis的配置文件参数介绍:

# redis进程是否以守护进程的方式运行,yes为是,no为否(不以守护进程的方式运行会占用一个终端)。
daemonize no
# 指定redis进程的PID文件存放位置
pidfile /var/run/redis.pid
# redis进程的端口号
port 6379
# 绑定的主机地址
bind 127.0.0.1
# 客户端闲置多长时间后关闭连接,默认此参数为0即关闭此功能
timeout 300
# redis日志级别,可用的级别有debug.verbose.notice.warning
loglevel verbose
# log文件输出位置,如果进程以守护进程的方式运行,此处又将输出文件设置为stdout的话,就会将日志信息输出到/dev/null里面去了
logfile stdout
# 设置数据库的数量,默认为0可以使用select <dbid>命令在连接上指定数据库id
databases 16
# 指定在多少时间内刷新次数达到多少的时候会将数据同步到数据文件
save <seconds> <changes>
# 指定存储至本地数据库时是否压缩文件,默认为yes即启用存储
rdbcompression yes
# 指定本地数据库文件名
dbfilename dump.db
# 指定本地数据问就按存放位置
dir ./
# 指定当本机为slave服务时,设置master服务的IP地址及端口,在redis启动的时候他会自动跟master进行数据同步
slaveof <masterip> <masterport>
# 当master设置了密码保护时,slave服务连接master的密码
masterauth <master-password>
# 设置redis连接密码,如果配置了连接密码,客户端在连接redis是需要通过AUTH<password>命令提供密码,默认关闭
requirepass footbared
# 设置同一时间最大客户连接数,默认无限制。redis可以同时连接的客户端数为redis程序可以打开的最大文件描述符,如果设置 maxclients 0,表示不作限制。当客户端连接数到达限制时,Redis会关闭新的连接并向客户端返回 max number of clients reached 错误信息
maxclients 128
# 指定Redis最大内存限制,Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key。当此方法处理后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis新的vm机制,会把Key存放内存,Value会存放在swap区
maxmemory<bytes>
# 指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认为no。
appendonly no
# 指定跟新日志文件名默认为appendonly.aof
appendfilename appendonly.aof
# 指定更新日志的条件,有三个可选参数 - no:表示等操作系统进行数据缓存同步到磁盘(快),always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全), everysec:表示每秒同步一次(折衷,默认值);
appendfsync everysec
查看reids是否在运行:ps -ef | grep redis

redis启动后不建议使用 kill -9,这种方式不但不会做持久化操作,还会造成缓冲区等资源不能优雅关闭。极端情况下造成 AOF复制丢失数据 的情况。shutdown 还有一个参数,代表是否在关闭 redis 前,生成 持久化文件,命令为 redis-cli shutdown nosave|save

redis的主从复制

准备启动两个redis实例(最少)——》修改对应的配置文件

  • 编辑 从机 的 Redis 配置文件,找到- #slaveof <masterip> <masterport> 。去掉该注释,填写 主服务器 的 IP 和 端口
  • 例如我的slaveof 10.206.20.231 16379。   如果主服务器设置了密码还需要找到 masterauth <master-password> 这一行,去掉注释,改为 masterauth 的主机密码。
  • Redis主服务器的配置文件:
  • daemonize yes
    pidfile /var/run/redis-16379.pid
    logfile /var/log/redis/redis-16379.log
    port 16379
    bind 0.0.0.0
    timeout 300
    databases 16
    dbfilename dump-16379.db
    dir ./redis-workdir
    masterauth 123456
    requirepass 123456
     
  • Redis从服务器的配置文件:
  • daemonize yes
    pidfile /var/run/redis-26379.pid
    logfile /var/log/redis/redis-26379.log
    port 26379
    bind 0.0.0.0
    timeout 300
    databases 16
    dbfilename dump-26379.db
    dir ./redis-workdir
    masterauth 123456
    requirepass 123456
    slaveof 127.0.0.1 16379

配置完成后通过客户端连接redis服务,通过输入INFO replication 查询到 当前主机 的 Redis 的状态。

我的查看主服务器的状态结果如下

# Replication
role:master
connected_slaves:1
slave0:ip=10.206.20.231,port=16379,state=online,offset=28,lag=1
master_replid:625ae9f362643da5337835beaeabfdca426198c7
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:28
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:28
从服务器的状态如下:

# Replication
role:slave
master_host:10.206.20.231
master_port:26379
master_link_status:up
master_last_io_seconds_ago:3
master_sync_in_progress:0
slave_repl_offset:210
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:625ae9f362643da5337835beaeabfdca426198c7
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:210
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:210
主从配置验证,通过向主库写入一个键值对,尝试从从库读取。

Redis哨兵模式:

Redis主从复制 模式下,一旦 主节点 由于故障不能提供服务,需要手动将 从节点 晋升为 主节点,同时还要通知 客户端 更新 主节点地址,这种故障处理方式从一定程度上是无法接受的。Redis 2.8 以后提供了 Redis Sentinel 哨兵机制 来解决这个问题。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值