rdb

redis基础(结合网上博客整理)

对着背影说爱祢 提交于 2020-01-06 18:45:34
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> redis是什么(定义、特点、作用) 定义: Redis是C语言开发的一个开源的(遵从BSD协议)支持网络、可基于内存亦可持久化的日志型、高性能键值对(key-value)的内存数据库,可以用作数据库、缓存、消息中间件等。它是一种NoSQL(not-only sql,泛指非关系型数据库)的数据库。 特点: 丰富的数据类型 :string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。 性能优秀,执行速度快。 数据在内存中, 纯内存操作 ,避免大量访问数据库,减少直接读取磁盘数据,redis将数据储存在内存里面,读写数据的时候都不会受到硬盘 I/O 速度的限制,所以速度快; 单线程操作 ,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗;采用了 非阻塞I/O多路复用机制 读写速度非常快。 支持数据持久化 。可以将内存中数据保存在磁盘中,重启时加载;redis提供了两种持久化的方式,分别是 RDB (Redis DataBase)和 AOF (Append Only File)。 RDB AOF 定义 是指用数据集快照的方式(半持久化模式

Redis设计与实现-AOF持久化

一笑奈何 提交于 2020-01-06 16:59:23
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 上一篇: Redis设计与实现-RDB持久化 RDB持久化虽然解决了内存丢失的问题,但是它依然有不少缺点,比如:生成RDB文件耗时,耗资源,生成RDB文件期间数据丢失等问题。 为此Redis提供了另外一种持久化技术AOF 概要 AOF持久化不同于RDB持久化,前者存放的是命令对应的redis协议字符串,而后者存放是压缩后的二进制,格式如下: 比如执行了如下命令:SELECT 0 *2\r\n$6\r\nSELECT\r\n$1\r\n0\r\n 各部分解释: *2:命令有2部分 $6:SELECT 为6个字符 $1:0 为1个字符 Redis默认是关闭aof持久化的,可以在redis.conf中配置如下参数 # 开启aof持久化 appendonly yes # 指定文件名 appendfilename "your file name" # no:重写时会阻塞appendfsync; # yes:不会阻塞appendfsync,最多可能出现30秒的数据延迟,甚至丢失30秒数据 # 如果将主节点的no-appendfsync-on-rewrite 设置为yes,添加从节点。 no-appendfsync-on-rewrite no # aof重写触发条件,生产环境一定要修改这两个值 auto-aof

Extract columns from tab separated file

余生长醉 提交于 2019-12-24 03:04:03
问题 I have a file ( data.rdb ) with the following format: col1 col2 col3 col4 col5 col6 col7 aaa1 bbb1 ccc1 ddd1 eee1 fff1 ggg1 aaa2 bbb2 ccc2 ddd2 eee2 fff2 ggg2 aaa3 bbb3 ccc3 ddd3 eee3 fff3 ggg3 Some properties of the data: all columns are tab separated the columns do not have the same width the cells might not have the same length the file will have much more columns than presented and a few hundreds of lines the columns names I provided are just generic, the real names can be any word, with

Redis 数据存储位置 导出数据

半世苍凉 提交于 2019-12-18 10:55:09
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> redis是一款支持多种数据类型的Key-Value数据库。 这里介绍下如何从Redis中导出数据。 数据是如何存储的?、 Redis中是把数据保存到内存中的,但是它也会定期的把数据写会到硬盘中。 Redis保存数据有两种方式: 快照模式(Snapshot) 它支持两种快照模式: 定时快照,即按一定时间将内存中的数据保存到磁盘上。 定量快照,即数据变化一定次数后将数据保存到磁盘上。 也可以结合这两种方式,比如变化1000次,距离上次保存时间60秒以上才保存数据。 写模式( Append Only File ) 这种模式下Redis会把所以修改数据的命令(如Update,Set)等保存到一个只能追加的ASAP文件中,当Redis重启时,它会把这个文件里的命令重新执行一遍。 数据保存到哪里? 数据是保存到一个数据文件中的,具体文件名要看Redis的配置文件,即Redis.conf 这里以安装到/usr/local/redis为例,配置文件在/usr/local/redis/redis.conf dbfilename demo.rdb 就是这个demo.rdb文件。 数据如何到导出? Redis写数据时先写到一个temp文件中,然后再把temp文件重命名为预定义的文件,所以即使Redis在运行

redis 运维异常文件解决

家住魔仙堡 提交于 2019-12-17 12:22:03
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 问题1 2019-12-17 11:26:04.482 [http-nio-8183-exec-10] ERROR o.l.litemall.core.config.GlobalExceptionHandler -able to persist on disk. Commands that may modify the data set are disabled, because this instance is ctes-on-bgsave-error option). Please check the Redis logs for details about the RDB error. redis.clients.jedis.exceptions.JedisDataException: MISCONF Redis is configured to save RDB snapshots, b data set are disabled, because this instance is configured to report errors during writes if RDB snapsogs for details about the RDB error. at redis.clients

redis sentinel 安装

时光总嘲笑我的痴心妄想 提交于 2019-12-16 21:09:13
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 启动方式 redis-server redis-6381.conf /rdb/6380/redis-6381.conf port 6380 bind 127.0.0.1 requirepass "myredis" daemonize yes logfile "6381.log" dbfilename "dump-6381.rdb" dir "/Users/huitingting/notes/rdb/6380" #如若master设置了认证密码,那么所有redis数据节点都配置上masterauth属性 #masterauth "myredis" slaveof 127.0.0.1 6379 ~/notes/rdb/rdb_sentinel/26379/sentinel-26379.conf #filename: sentinel-26379.conf port 26379 daemonize yes logfile "26379.log" dir "/Users/huitingting/notes/rdb/rdb_sentinel/26379" #redis数据master节点设置了认证,则需要如下配置 # sentinel myid

分布式缓存的应用场景、选型比较、问题和挑战

谁说胖子不能爱 提交于 2019-12-16 16:03:07
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 为什么要使用分布式缓存 高并发环境下,例如典型的淘宝双11秒杀,几分钟内上亿的用户涌入淘宝,这个时候如果访问不加拦截,让大量的读写请求涌向数据库,由于磁盘的处理速度与内存显然不在一个量级,服务器马上就要宕机。从减轻数据库的压力和提高系统响应速度两个角度来考虑,都会在数据库之前加一层缓存,访问压力越大的,在缓存之前就开始CDN拦截图片等访问请求。 并且由于最早的单台机器的内存资源以及承载能力有限,如果大量使用本地缓存,也会使相同的数据被不同的节点存储多份,对内存资源造成较大的浪费,因此,才催生出了分布式缓存。 分布式缓存应用场景 页面缓存:用来缓存Web 页面的内容片段,包括HTML、CSS 和图片等。 应用对象缓存:缓存系统作为ORM 框架的二级缓存对外提供服务,目的是减轻数据库的负载压力,加速应用访问。 解决分布式Web部署的session同步问题 状态缓存:缓存包括Session会话状态及应用横向扩展时的状态数据等,这类数据一般是难以恢复的,对可用性要求较高,多应用于高可用集群。 并行处理:通常涉及大量中间计算结果需要共享。 云计算领域提供分布式缓存服务。 分布式缓存比较:Memcache VS Redis 1、Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset

redis 详解(4)持久化

故事扮演 提交于 2019-12-16 10:14:06
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 定义 redis 所有数据保存在内存中,对数据更新将异步保存到磁盘 持久化的作用 方式 说明 快照 mysql dump,redis RDB 日志 mysql binlog,redis AOF,hbase Hlog RDB 定义 redis 创建二进制的 RDB 文件 redis 启动载入已经存在的 RDB 文件 三种主要方式触发 save(同步) client 发送 save 命令到 server,server 创建 RDB 文件,会阻塞主进程 如果存在老文件,新文件会替换老文件 时间复杂度 O(n) bgsave(异步) client 发送 bgsave 命令到 server,server fork 一个子进程创建 RDB 文件 server 返回给 client 成功信息 命令 save bgsave IO 类型 同步 异步 是否阻塞 是 是,阻塞发送在 fork 时间复杂度 O(n) O(n) 优点 不会消耗额外内存 不阻塞客户端命令 缺点 阻塞客户端命令 需要 fork,消耗内存 自动配置 配置 seconds changes save 900 1 save 300 10 save 60 10000 其他方式触发 全量复制 debug reload shutdown 总结 RDB 是 redis

(大致了解下)从单机到2000万QPS: 知乎Redis平台发展与演进之路

旧巷老猫 提交于 2019-12-13 22:02:12
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 导读:知乎存储平台团队基于开源Redis 组件打造的 知乎 Redis 平台 ,经过不断的研发迭代,目前已经形成了一整套完整自动化运维服务体系,提供很多强大的功能。本文作者是是该系统的负责人,文章深入介绍了该系统的方方面面,作为后端程序员值得仔细研究。 作者简介: 陈鹏,现知乎存储平台组 Redis 平台技术负责人,2014 年加入知乎技术平台组从事基础架构相关系统的开发与运维,从无到有建立了知乎 Redis 平台,承载了知乎高速增长的业务流量。 背景 知乎作为知名中文知识内容平台,每日处理的访问量巨大,如何更好的承载这样巨大的访问量,同时提供稳定低时延的服务保证,是知乎技术平台同学需要面对的一大挑战。 知乎存储平台团队基于开源Redis 组件打造的 Redis 平台管理系统,经过不断的研发迭代,目前已经形成了一整套完整自动化运维服务体系,提供一键部署集群,一键自动扩缩容, Redis 超细粒度监控,旁路流量分析等辅助功能。 目前,Redis 在知乎规模如下: ● 机器内存总量约70TB,实际使用内存约40TB; ● 平均每秒处理约1500万次请求,峰值每秒约2000万次请求; ● 每天处理约1万亿余次请求; ● 单集群每秒处理最高每秒约400万次请求; ● 集群实例与单机实例总共约800个; ●

Redis面试题详解:哨兵+复制+事务+集群+持久化等

﹥>﹥吖頭↗ 提交于 2019-12-10 22:15:10
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> Redis主要有哪些功能? 1.哨兵(Sentinel)和复制(Replication) Redis服务器毫无征兆的罢工是个麻烦事,如何保证备份的机器是原始服务器的完整备份呢?这时候就需要哨兵和复制。 Sentinel可以管理多个Redis服务器,它提供了监控,提醒以及自动的故障转移的功能,Replication则是负责让一个Redis服务器可以配备多个备份的服务器。 Redis也是利用这两个功能来保证Redis的高可用的 2.事务 很多情况下我们需要一次执行不止一个命令,而且需要其同时成功或者失败。redis对事务的支持也是源自于这部分需求,即支持一次性按顺序执行多个命令的能力,并保证其原子性。 3.LUA脚本 在事务的基础上,如果我们需要在服务端一次性的执行更复杂的操作(包含一些逻辑判断),则lua就可以排上用场了 4.持久化 redis的持久化指的是redis会把内存的中的数据写入到硬盘中,在redis重新启动的时候加载这些数据,从而最大限度的降低缓存丢失带来的影响。 5.集群(Cluster) 单台服务器资源的总是有上限的,CPU资源和IO资源我们可以通过主从复制,进行读写分离,把一部分CPU和IO的压力转移到从服务器上,这也有点类似mysql数据库的主从同步。 在Redis官方的分布式方案出来之前