`

redis持久化、主从复制、简单的事务支持及发布订阅功能

 
阅读更多

持久化

•redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到磁盘来保证持久化,这是相对memcache来说的一个大的优势。redis支持两种持久化方式,一种是 Snapshotting(快照)也是默认方式,另一种是Append-only file(缩写aof)的方式。
Snapshotting

       快照是默认的持久化方式。这种方式将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb。可以配置自动做快照持久 化的方式。我们可以配置redis在n秒内如果超过m个key被修改就自动做快照,下面是默认的快照保存配置

save 900 1  #900秒内如果超过1个key被修改,则发起快照保存
save 300 10 #300秒内容如超过10个key被修改,则发起快照保存
save 60 10000

Append-only file
    
aof 比快照方式有更好的持久化性,是由于在使用aof持久化方式时,redis会将每一个收到的写命令都通过write函数追加到文件中(默认是 appendonly.aof)。当redis重启时会通过重新执行文件中保存的写命令来在内存中重建整个数据库的内容。当然由于os会在内核中缓存 write做的修改,所以可能不是立即写到磁盘上。这样aof方式的持久化也还是有可能会丢失部分修改。不过我们可以通过配置文件告诉redis我们想要 通过fsync函数强制os写入到磁盘的时机。有三种方式如下(默认是:每秒fsync一次)

appendonly yes              //启用aof持久化方式
# appendfsync always      //每次收到写命令就立即强制写入磁盘,最慢的,但是保证完全的持久化,不推荐使用
appendfsync everysec     //每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,推荐
# appendfsync no    //完全依赖os,性能最好,持久化没保证

主从复制

主从复制允许多个slave server拥有和master server相同的数据库副本。下面是关于redis主从复制的一些特点
1.master可以有多个slave
2.除了多个slave连到相同的master外,slave也可以连接其他slave形成图状结构
3.主从复制不会阻塞master。也就是说当一个或多个slavemaster进行初次同步数据时,master可以继续处理client发来的请求。相反slave在初次同步数据时则会阻塞,不能处理client的请求。
4.主从复制可以用来提高系统的可伸缩性(我们可以用多个slave 专门用于client的读请求,比如sort操作可以使用slave来处理),也可以用来做简单的数据冗余。

-5.可以在master禁用数据持久化,只需要注释掉master 配置文件中的所有save配置,然后只在slave上配置数据持久化。

 

事物

redis对事务的支持目前还比较简单。redis只能保证一个client发起的事务中的命令可以连续的执行,而中间不会插入其他client的命令。
Multi          事物开始
Exec          执行事务
Discard     放弃事物
Watch       监听key
Unwatch   放弃所有key的监听
watch 命令会监视给定的key,exec时候如果监视的key从调用watch后发生过变化,则整个事务会失败。注意watchkey是对整个连接有效的,和事务一样,如果连接断开,监视和事务都会被自动清除。
 
发布订阅(pub/sub 
 
发布订阅(pub/sub)是一种消息通信模式。订阅者可以通过subscribepsubscribe命令向redis server订阅自己感兴趣的消息类型,redis将消息类型称为通道(channel)。当发布者通过publish命令向redis server发送特定类型的消息时。订阅该消息类型的全部client都会收到此消息。这里消息的传递是多对多的。一个client可以订阅多个 channel,也可以向多个channel发送消息。
Subscribe
Unsubscribe
Psubscribe
Punsubscribe
Publish
 
管道(pipeline
 
 
redis是一个cs模式的tcp server,使用和http类似的请求响应协议。一个client可以通过一个socket连接发起多个请求命令。每个请求命令发出后client通常 会阻塞并等待redis服务处理,redis处理完后请求命令后会将结果通过响应报文返回给client。基本的通信过程如下

  Client: INCR X
Server: 1
Client: INCR X
Server: 2
Client: INCR X
Server: 3
Client: INCR X
Server: 4

基本上四个命令需要8tcp报文才能完成。由于通信会有网络延迟,假如从clientserver之间的包传输时间需要0.125秒。那么上面的四个命令8个报文至少会需要1秒才能完成。 
利用pipeline的方式从client打包多条命令一起发出,不需要等待单条命令的响应返回,而redis服务端会处理完多条命令后会将多条命令的处理结果打包到一起返回给客户端。通信过程如下

Client: INCR X
Client: INCR X
Client: INCR X
Client: INCR X
Server: 1
Server: 2
Server: 3
Server: 4
 
 
虚拟内存(VM)
VM的作者已经放弃该功能
redis没有使用os提供的虚拟内存机制而是自己实现了自己的虚拟内存机制 ,但是思路和目的都是相同的。就是暂时把不经常访问的数据从内存交换到磁盘中,从而腾出内存空间用于其他需要访问的数据。尤其是对于redis这样的内存数据库,内存总是不够用的。除了可以将数据分割到多个redis server外。另外的能够提高数据库容量的办法就是使用vm把那些不经常访问的数据交换的磁盘上。如果我们的存储的数据总是有少部分数据被经常访问,大 部分数据很少被访问,对于网站来说确实总是只有少量用户经常活跃。当少量数据被经常访问时,使用vm不但能提高单台redis server数据库的容量,而且也不会对性能造成太多影响。
vm-enabled yes                          #开启vm功能
vm-swap-file /tmp/redis.swap         #交换的value保存的文件路径/tmp/redis.swap
vm-max-memory 1000000            #最大内存上限,超过后开始交换value到磁盘文件
vm-page-size 32                    #每个页面的大小32个字节
vm-pages 134217728                 #最多使用在文件中使用多少页面
vm-max-threads 4                    #用于执行value对象换入换出的工作线程数量,0表示不使用工作线程
 
 
from:http://www.cnblogs.com/visionwang/p/3234477.html
分享到:
评论

相关推荐

    redis 可持久化 Key-Value数据库

    总的来说,Redis是一个高效、灵活且功能强大的键值数据库,适用于缓存、消息队列、计数器、发布订阅等多种应用场景。其可持久化特性保证了数据的安全性,丰富的数据结构和API设计使它成为开发者首选的NoSQL数据库之...

    redis-2.8.13安装配置主从服务器Master-Slave

    这个类可能包含了连接池管理、事务处理、发布订阅等高级功能。 7. **性能优化**:在实际部署中,还可以考虑其他优化措施,如限制客户端连接数、使用多线程处理命令、调整内存策略等。同时,定期做 RDB 快照和 AOF ...

    redis安装,简介,数据类型,持久化概念,消息发布与订阅,主从复制,哨兵模式

    redis安装,简介,数据类型,持久化概念,消息发布与订阅,主从复制,哨兵模式,jedis,整合sp_redis-examples

    Redis操作基础文档中文PDF完整版最新版本

    redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库,目前是市场上缓存技术最多的。...Redis持久化 Redis订阅发布 Redis主从复制介绍 主从复制搭建 哨兵模式详解 Redis缓存穿适和雪崩

    redis 和 redis 可视化工具

    4. **事务**:Redis 支持简单的事务,可以一次执行多个操作。 5. **发布/订阅**:支持发布订阅模式,可以用于实现消息传递。 6. **Lua 脚本**:通过内建的 Lua 解释器,可以在客户端执行脚本,实现更复杂的逻辑。 7....

    redis工作原理及单机主从集群版安装使用说明书

    此外,Redis还支持发布订阅、键过期等特性,使得它成为一种广泛应用于缓存、数据库和消息中间件的高效工具。 Redis的优势在于其极高的读写速度,以及对复杂数据结构的支持。它可以在内存中运行,实现快速的读写操作...

    Redis从入门到精通视频.rar

    45-redis-redis消息的发布与订阅.avi 46-redis-redis的主从复制-提供三台redis服务.avi 47-redis-redis的主从复制-启动三台redis服务.avi 48-redis-redis的主从复制-设置主从关系、全量复制、增量复制.avi 49-redis-...

    Redis 题库 笔记 PDF文件电子版 494道题 2023年 精选 面试 自学 考试

    一级分类:基础知识- Redis 数据类型- Redis 命令- Redis 过期策略- Redis 事务- Redis 持久化- Redis 发布订阅- Redis Lua 脚本- Redis 位图操作- Redis 分布式锁- Redis 主从复制- Redis 集群- Redis Sentinel- ...

    redis-阳哥课件.mmap

    redis简介,redis数据类型,redis事务,redis发布订阅,redis持久化,redis主从复制,redis-java

    Redis安装包+Redis图形化管理界面

    4. **发布订阅**:Redis的发布订阅功能允许客户端订阅特定频道,当有消息发布到该频道时,所有订阅者都会收到通知。 在实际项目中,Redis常被用作缓存,提高读取速度,减少对后端数据库的压力。例如,你可以将频繁...

    redis快速入门详解.ppt

    * Redis 的功能非常丰富,包括持久化、主从复制、事务支持、发布订阅、管道、虚拟内存等。 * Redis 的性能非常高,可以满足大多数应用程序的需求。 * Redis 的应用场景非常广泛,可以用来实现各种类型的应用程序。

    尚硅谷周阳Redis笔记

    Redis支持简单的事务功能,可以一次性执行多个命令,确保原子性。通过`MULTI`、`EXEC`命令组合实现,但不支持回滚。 【Redis主从复制】 主从复制是Redis高可用性的重要组成部分,一个主节点可以有多个从节点,数据...

    Redis学习实践 - 超实用超详细

    数据持久化 内存回收策略 单线程高性能原理 在Redis中使用Lua脚本 原子性问题 效率问题 Lua Redis与Lua Redis集群 主从复制 主从复制原理 哨兵机制 Redis-Cluster Redis Java API 操作方法及原理分析 Jedis-sentinel...

    Redis6知识点汇总完整版PDF最新版本

    《Redis6知识点汇总》将全面概述Redis 6的知识点,从基本概念到高级应用,涵盖...12.Redis持久化之RDB 13.Redis持久化之AOF 14.Redis_主从复制 15.Redis集群 16.Redis应用问题解决 17.Redis6.0新功能 18.Redis网路模型

    redis-window安装包+redis可视化工具.rar

    此外,Redis还支持事务、发布/订阅、主从复制、持久化和LUA脚本等功能,使其成为高性能和高可用性应用程序的理想选择。 "redis.desktop.manager.exe"是一个Redis的可视化管理工具,它为用户提供了图形化的界面来...

    Redis学习实践 - 适合初学者 从0到精通

    数据持久化 内存回收策略 单线程高性能原理 在Redis中使用Lua脚本 原子性问题 效率问题 Lua Redis与Lua Redis集群 主从复制 主从复制原理 哨兵机制 Redis-Cluster Redis Java API 操作方法及原理分析 Jedis-sentinel...

    redis安装包,redis-desktop-manager可视化工具,连接redis jar包

    3. **主从复制**:Redis支持主从复制,可以创建多个从节点来备份主节点的数据,提高系统的可用性和容错性。 4. **事务**:Redis支持事务,可以一次执行多个命令,并确保它们在一个原子操作内完成,确保数据的一致性...

    redis和redisdesktop

    5. **事务**:Redis提供了简单的事务功能,允许多个操作在原子性下执行,确保数据一致性。 6. **发布/订阅**:Redis的pub/sub(发布/订阅)模式可以实现消息传递,让多个客户端订阅同一个主题,当有新消息发布时,...

    redis学习笔记

    Redis 还支持主从复制,用于扩展读取能力,并具备简单的事务支持以及发布订阅功能。 **一、Redis 环境搭建** 在 Linux 系统中,你可以通过以下步骤安装 Redis: 1. 下载 Redis 源代码包,例如从官方网站或 GitHub...

Global site tag (gtag.js) - Google Analytics