博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Redis
阅读量:5309 次
发布时间:2019-06-14

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

Redis 是一个开源的,内存存储的数据结构服务器,可以用作数据库、高速缓存和消息队列。它是一个高性能的 key-value 数据库,运行在内存中,但是可以持久化到磁盘。

1. 功能特点

  • 速度快(内存读取)
  • 支持多种数据结构(字符串、哈希、列表、集合、有序集合)
  • 支持数据的备份(master-slave)
  • 支持数据持久化(RDB,AOF)
  • 支持高可用(Redis-Sentinel)和分布式(Redis-Cluster)

2. 应用场景

  • 数据高速缓存
  • 会话缓存
  • 排行榜(有序集合)/计数器
  • 消息队列
  • 发布订阅

3. 数据结构

支持多种数据类型:字符串(string),哈希(hash),列表(list),集合(set),有序集合(sorted set)等 。

127.0.0.1:6379> SET name "ABC"OK127.0.0.1:6379> GET name"ABC"

注意,一个键最大能存储 512MB。

4. 连接

$ redis-cli -h 127.0.0.1 -p 6379 -a password 127.0.0.1:6379> AUTH password  #验证密码是否正确OK127.0.0.1:6379> PINGPONG127.0.0.1:6379> SELECT index    #切换到指定的数据库OK127.0.0.1:6379[index]> QUIT    #关闭当前连接

5. 数据持久化

(1)RDB 持久化在指定的时间间隔内将内存中的数据集快照写入磁盘。实际操作过程是 fork 一个子进程,先将数据集写入临时文件,写入成功后再替换之前的文件,用二进制压缩存储。

RDB 是 Redis 默认的持久化方式,会在对应的目录下生成一个 dump.rdb 文件,重启服务后通过加载 dump.rdb 文件来恢复数据。

  • 通过 SAVE 和 BGSAVE 命令对数据进行持久化,生成 RDB 文件。

SAVE 命令会阻塞 redis 服务进程,阻塞期间服务器不能处理客户端任何请求,直到缓存数据持久化完成。

BGSAVE 命令不会阻塞服务进程,会 fork 出一个子进程,由子进程负责数据持久化,父进程继续处理客户端请求。

  • 通过配置文件

redis.conf 配置文件中的 save 配置项,让服务器每隔一段时间自动执行 BGSAVE。

save 900 1    #服务器在900秒之内,对数据库进行了至少1次修改。save 300 10    #服务器在300秒之内,对数据库进行了至少10次修改。save 60 10000    #服务器在60秒之内,对数据库进行了至少10000次修改。

(2)AOF 持久化是用日志的形式记录服务器的每个写操作,并追加到文件中,以 redis 协议格式保存。服务器重启时,会执行文件中的指令来恢复数据。

fsync策略:always、everysec和no。

Redis 还可以后台使用 bgrewriteaof 命令对 AOF 文件进行重写,使得 AOF 文件体积不至于过大。AOF 默认是不开启的,可以修改 redis.conf 配置文件来开启。

appendonly yes    #开启AOF持久化appendfsync everysec    #每秒钟同步一次,默认策略

选择 RDB 还是 AOF?

  • RDB 非常适合大规模的数据恢复,如果业务对数据一致性要求不高,RDB 是很好的选择。
  • 如果需要保证数据一致性,那么优先考虑使用 AOF 方式。
  • 对于企业级的中大型应用,如果想保证数据一致性,同时又希望保持高效率,可以同时使用 RDB 和 AOF 两种方式。启动服务时会优先加载 AOF 文件。 

6. 事务

127.0.0.1:6379> MULTIOK127.0.0.1:6379> 事务块127.0.0.1:6379> EXEC 或者 DISCARDOK
  • MULTI 标记一个事务的开始。
  • EXEC 执行所有事务块内的命令。
  • DISCARD 取消执行事务块内的所有命令。
  • WATCH key [key ...] 监视一个或多个key,如果在事务执行之前,key 被其他命令所改动,那么事务将被打断。
  • UNWATCH 取消 WATCH 命令对所有 key 的监视。

7. 发布订阅

Redis 发布订阅是一种消息通信模式:发布者发送消息,订阅者接收消息。

127.0.0.1:6379> SUBSCRIBE channel [channel ...]    #订阅频道127.0.0.1:6379> PUBLISH channel message    #在频道上发布消息

8. redis-sentinel架构

redis master-slave主从复制模式下,如果 master 节点出现故障,slave 节点无法自动切换成 master,需要人工干预。redis-sentinel 是redis官方推荐的高可用性解决方案,它是一个独立运行的进程。多个 sentinel 进程协同工作,组成一套分布式的架构,用于监控 master-slave 节点和其他 sentinel 节点的健康状况。sentinel 通过订阅消息与其他 sentinel 节点进行通信。

sentinel 集群发现 master 节点故障后,多个 sentinel 对 master 节点的故障达成一致,在 sentinel 节点中选择一个作为 leader,负责故障转移,把一个 slave 节点提升为 master,并让其他 slave 节点从新的 master 复制数据,并告知客户端新的 master 的信息。

 

转载于:https://www.cnblogs.com/yutb/p/11341525.html

你可能感兴趣的文章
个人任务。。
查看>>
输入五个学生的成绩,把不及格的学生成绩输出,并求及格学生的平均分。
查看>>
求给定范围内的水仙花数
查看>>
linux find 命令查找文件和文件夹
查看>>
HTTP之URL分解
查看>>
Longest Increasing Subsequence
查看>>
Linux进程间的通信
查看>>
android评分条RatingBar自定义设置
查看>>
创建broker配置
查看>>
XSS 和 CSRF
查看>>
UGUI组件(7)布局型组件
查看>>
docker快速构建oracle数据库
查看>>
MySQL中的事务
查看>>
Python 爬虫从入门到进阶之路(九)
查看>>
二分搜索 POJ 3273 Monthly Expense
查看>>
常用css样式
查看>>
mybatis 调用存储过程
查看>>
HDU 1003 Max Sum
查看>>
《梦断代码》随笔第0篇
查看>>
iOS项目的完整重命名方法图文教程
查看>>