首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Redis设计与实现》笔记1 | Redis单机数据库的实现

参考《Redis设计与实现》 1.对象 1.1 类型 创建键值对时包含 键对象 和 值对象 ,键对象总是一个字符串对象,值对象则有五种常用对象:字符串对象、列表对象、哈希对象、集合对象、有序集合对象。...object idletime [key] 2.单机数据库 redis服务器默认会创建16个数据库(0-15),默认为0号数据库,切换命令为select [num] 2.1 RDB RDB全称Redis...DataBase,Redis是内存数据库,把数据存储在内存,但是不能持久,所以redis提供了RDB持久化功能,可以把内存中的数据库状态保存到磁盘中,避免数据意外丢失。...过程:redis内存数据库状态——>RDB文件(经过压缩的二进制文件),落盘——>还原为数据库状态 两个命令生成RDB文件:save和bgsave save命令会阻塞服务器进程,拒绝客户端发送的所有请求...,所以在flushdb之后,如果想恢复数据库,则可以直接kill掉redis-server进程,然后重新启动服务,这样redis重新读取RDB文件,数据恢复到flushdb操作之前的状态。

40410

Redis设计与实现》笔记2 | Redis多机数据库的实现

参考《Redis设计与实现》 1.主从复制 主从复制的作用 数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。...通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。...高可用性(高可用通常来描述一个系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性)的解决方案:由一个或多个实例组成的sentinel系统可以监视任意多个主服务器以及其属下的从服务器,并且主服务器下线时...集群环境 槽指派 redis集群通过分片的方式来保存数据库中的键值对:集群的整个数据库分为16384个槽(slot),数据库中的每个键都属于这16384个槽的其中一个,集群的每个节点都可以处理0个或最多...16384个槽 只有当数据库中的16384(0~16383)个槽都有节点在处理时,集群才能处于上线状态(ok),相反,如果数据库汇总有任何一个槽没有得到处理,那么集群都将处于下线状态(fail) 上述7000

25730
您找到你想要的搜索结果了吗?
是的
没有找到

RedisRedis数据库

Redis读写键空间时的维护操作 当redis命令对数据库进行读写时,服务器不仅会对键空间执行指定的读写操作,还会执行一些额外的维护操作 在读取一个键之后(读写都会对键进行读取),服务器会根据键是否存在...服务器每次修改一个键之后,都会对脏(dirty)键计数器的值增1,这个计数器会触发服务器的持久化及复制操作 如果服务器开启了数据库通知功能,那么在对键进行修改之后,服务器将按配置发送相应的数据库通知。...过期时间 redisDb结构的expires字典保存了数据库中所有键的过期时间,我们称这个字典为过期字典; 过期字典的键是一个指针,这个指正指向键空间中的某个键对象(就是也是 键,跟键空间的键指向同一个...;例如键都是 a, 过期字典的键和键空间的键 都是指向 a 这个键对象的,所以不会浪费内存) 过期字典的值是一个 long long类型的整数,这个整数保存了键所指向的数据库键的过期时间---- 一个毫秒精度的...,删除里面的过期键,至于要删除多少过期键,以及要检查多少个删除库,由算法决定; 定期删除策略难点在于确定删除操作执行的时长和频率,服务器必须根据情况,合理的设置执行时长和频率 Redis的过期删除策略

1.3K40

RedisRedis 数据库操作 ① ( 数据库操作 | Redis 数据库连接参数 | Redis 数据库个数 | Redis 访问机制 )

文章目录 一、Redis 数据库连接参数 二、Redis 数据库个数 三、Redis 访问机制 一、Redis 数据库连接参数 ---- 连接 Redis 数据库 , 只需要 IP 地址 , 端口号..., 访问密码 即可 , 如果没有 设置 访问密码 可忽略该选项 ; Redis 默认端口号是 6379 ; 参考 【RedisRedis 数据库 安装、配置、访问 ( Redis 简介 | 下载 Redis...安装包 | 安装 Redis 数据库 | 命令行访问 Redis | 使用可视化工具访问 Redis ) 博客 , 在 Redis Desktop Manager 可视化工具 中 , 连接 Redis...p 6379 auth 000000 命令 连接 Redis 数据库 即可 ; 二、Redis 数据库个数 ---- Redis 中 默认 提供了 16 个数据库 , 默认使用 0 号数据库 ; 所有的数据库...db0 数据库 ; 三、Redis 访问机制 ---- Redis 数据库 的 访问机制是 单线程 + 多路 IO 复用 机制 ; IO 多路复用 : 在 单个线程 中 , 检查 多个 文件描述符

1.2K30

Redis设计与实现》读书笔记(十一) ——Redis数据库与键空间

Redis设计与实现》读书笔记(十一) ——Redis数据库与键空间 (原创内容,转载请注明来源,谢谢) 一、redis数据库 redis服务器将所有数据库都保存在redisServer结构里的db数组...因此,select命令的原理,就是通过修改redisClient的db指针的指向,来实现数据库的切换。 由于redis没有指示当前在哪个数据库的命令,因此切换数据库后要注意相应的操作。...三、数据库键空间 redis是存储键值对的数据库服务器,每个数据库都是一个redisDb结构,其中用dict字典来保存每个键值对。...键空间的键就是数据库的键,每个键都是一个字符串对象;键空间的值,就是数据库的值,可以是redis5中对象中的任一种。 redis数据库中同时有多个键的情况,如下图所示: ?...redis对于读写键空间,除了上述的正常读写,还会有相应的维护操作。其中,写操作都会先读键,因此下列的读,也包括写之前的读操作。

1.1K60

redis缓存设计-Redis(八)

上篇文章介绍了redis缓存设计,热点key,bigkey注意事项。...redis缓存设计-Redis(七) 一、命令使用 1、hgetall,lrange,smembers,zrange,sinter等并非不能使用,要指定明确的值,遍历的话要使用hscan、sscan、...3、合理的使用select: redis多DB较弱,而且如果每个都有很大的高并发访问,而都接入一个redis,效率是底下且会造成干扰。...因为如果每个客户端处理的是1000,而我们有10个客户端,那么可以处理10000,即使maxclients设计的再大,剩余的也不会存储。 如果我们要求业务QPS是50000?...2、maxIdle和minIdle 最大空闲连接 和 最小空闲连接 当redis在业务峰值期间连接了几十个redis连接,这时候峰值过后,redis会慢慢关闭连接,留下maxIdle空闲连接数,正常配置默认都是

19110

redis设计与实现》2-数据库实现篇

上一篇文章介绍了redis基本的数据结构和对象《redis设计与实现》1-数据结构与对象篇 本文主要关于: redis数据库实现的介绍 前面介绍的各种数据,在redis服务器中的内存模型是什么样的的。...数据库 服务器的数据库 redis是内存型数据库,所有数据都放在内存中 保存这些数据的是redisServer这个结构体,源码中该结构体包括大概300多行的代码。...是内存数据库,为了避免服务器进程异常导致数据丢失,redis提供了RDB持久化功能 持久化后的RDB文件是一个经过压缩的二进制文件 RDB文件的创建与载入 生成rdb文件的两个命令如下,实现函数为rdb.c...头五个字符为‘redis’常量,标识这个rdb文件是redis文件 dv_version:4字节,标识了rdb文件的版本号 databases:数据库文件内容 EOF:常量,1字节,标识文件正文结束 check_sum...设计与实现》 rdbtool wiki rdr分析工具

62840

redis缓存设计-Redis(七)

redis集群-Redis(六) 一、高并发缓存应对策略 缓存穿透 正常情况下,用户访问某条数据,第一次从数据库获取,后面会set进缓存,从缓存获取。...缓存击穿 当系统中redis的key大量一起过期,导致同一时间高并发一起请求这些key,全部打到数据库服务器上,这时候导致数据库宕机怎么解决呢?...(顺便一提redission分布式锁源码里通过lua脚本访问redis,保证事务和原子性) 三、数据库缓存双写不一致设计 线程1:set数据库10,删除缓存 线程2:set数据库6,删除缓存 线程3:...四、键值设计 1、key设计 1)以业务名(或者数据库名)为前缀,防止key冲突,冒号分割。 (微服务的情况下,加上服务名称) 2)统一在一个文件下管理,防止重复定义。...2、Value设计 Bigkey针对value的,绝对不能放大key,前面强调过很多次。在redis一个字符串最大512mb,哈希,set,zest,list可以存储大约40亿元素。

18220

Redis设计与实现》读书笔记(十三) ——Redis数据库其他内容与总结

Redis设计与实现》读书笔记(十三) ——Redis数据库其他内容与总结 (原创内容,转载请注明来源,谢谢) 一、RDB、AOF、复制对过期键的处理 1、RDB 创建RDB:在执行bgsave或save...命令创建一个新的rdb文件时,redis会对数据库中的所有的键进行检查,已经过期的键不会被加入新的rdb文件中。...二、数据库通知 1、设置方式 redis2.8开始新增的数据库通知功能,客户端可以通过监控给定的频道或者模式,来获取数据库中键的变化,以及数据库中命令的执行情况。...三、总结 redis服务器的所有数据库都保存在redisServer结构的db属性中,数据库数量保持在dbnum属性中,用户通过修改数据库目标指针指向db的不同位置,实现数据库的切换。...当redis的键被修改或在数据库中执行某些命令,如果键、命令是被监听的,则监听的客户端会收到redis发来的通知。 ——written by linhxx 2017.09.03

74770

Redis数据库

Redis简介 Redis是一种nosql数据库(非关系型数据库),存取数据的格式是像字典一样key->value的形式。...Redis数据库的优势 1、性能高 2、数据类型丰富 3、原子性 4、其他还有很多特性 Redis数据库的安装 windows下安装 后台回复 Redis 获取安装包 解压到你安装的文件夹,打开cmd,...Redis中的数据库redis数据库中我们的数据库是用所以来的,切换数据库用select关键字。新进入一个数据库,都是空的。比如我想进入2数据库,select 2 ,以此来把数据分开。...如何配置用我们的redis数据库来储存我们的session?...' # 端口号 SESSION_REDIS_PORT = 6379 # 那个数据库 SESSION_REDIS_DB = 2 # 密码,我们没有设置密码 SESSION_REDIS_PASSWORD =

95250

Redis数据库

, 3 12月 2021 作者 847954981@qq.com 后端学习, 我的编程之路 Redis数据库 Redis作为最受欢迎的NoSQL数据库之一,包含多种数据结构、支持网络、基于内存、可选持久性的键值对存储数据库...作为NoSQL数据库Redis采用数值对进行数据存储(K-V),其本身具有高性能、分布式、多数据类型的特点,可以应对众多场景。...如在设计验证码短信的时候,在用户验证验证码之前必然需要将验证码信息暂时储存到数据库内,此时作为拥有高性能的键值对数据库Redis就是极好的选择 其次,当数据库需要在短时间内进行高并发操作,MySQL数据库的性能很难完成这类操作...网络不能直接使用Java对象,序列化就是把Java对象变成可以传输的数据 所以在设计存入Redis数据库的数据类时,要实现 java.io.Serializable 保证对象可以序列化。...数据修改 Redis类目数据的修改,不像关系型数据库,可以只修改几个字段。它需要把数据对象重新放入列表中。

97350

Redis数据库

Redis数据库 MySQL的缓存系统就可以胜任大部分的数据存储工作。...Redis数据库,就是一个开源的键值存储数据库,所有的数据全部存放在内存中,它的性能大大高于磁盘IO,并且它也可以支持数据持久化,他还支持横向扩展、主从复制等。...基本操作 在Redis下,数据库是由一个整数索引标识,而不是由一个数据库名称。...默认情况下,我们连接Redis数据库之后,会使用0号数据库,可以通过Redis配置文件中的参数来修改数据库总数,默认为16个。...缓存雪崩 当你的Redis服务器炸了或是大量的Key在同一时间过期,这时相当于缓存直接GG了,那么如果这时又有很多的请求来访问不同的数据,同一时间内缓存服务器就得向数据库大量发起请求来重新建立缓存,很容易把数据库也搞

17330

Redis 缓存设计原则

应避免不同业务出现同名缓存key 可对key进行适当的缩写以节省内存空间 选择合适的数据结构 确保写入缓存中的数据是完整且正确的 避免使用耗时较长的操作命令,如:keys * Redis...默认配置中操作耗时超过10ms即视为慢查询 一个key对应的数据不应过大 对于string类型,一个key对应的value大小应控制在10K以内,1K左右更优 hash类型,不应超过5000行 避免缓存穿透 数据库中未查询到的数据...,可在Redis中设置特殊标识,以避免因缓存中无数据而导致每次请求均达到数据库 缓存层不应抛出异常 缓存应有降级处理方案,缓存出了问题要能回源到数据库进行处理 可以进行适当的缓存预热 对于上线后可能会有大量读请求的应用...,在上线之前可预先将数据写入缓存中 读的顺序是先缓存,后数据库;写的顺序是先数据库,后缓存 数据一致性问题 数据源发生变更时可能导致缓存中数据与数据源中数据不一致,应根据实际业务需求来选择适当的缓存更新策略...被动删除:根据缓存设置的过期时间有Redis负责数据的过期删除。一致性较低,维护成本较低。

1.4K40

Redis字典设计详解

Redis 是一个高性能的 key-value 内存数据库,与 Memcached 只能存储字符串数据类型不一样,它支持存储的数据结构类型包括:字符串(string)、链表(lists)、哈希表(hash...Redis 的高性能得益于其 I/O事件驱动 模型,当然本文并不是讨论 Redis 的所有知识点,下面主要介绍 Redis 的核心数据结构:字典 的设计和实现。...Redis字典介绍 Redis的字典基本遵从了哈希表的设计,当然在通用性和性能上改进了一些地方,下面我们来解释一下Redis字典的设计。...所以Redis通过对数据分批Rehash的方式来解决这个问题,也就是说把一次长耗时的操作分为多次短耗时的操作,这样就不会对Redis的服务造成太大的影响。而分批Rehash的关键就在于第二个哈希表。...总结 本文主要介绍了哈希表和Redis字典的设计与实现,Redis字典是对传统哈希表的一种扩展实现,能够减少Rehash操作对服务造成的阻塞。

57730

Redis缓存设计原理

3.2.2 Redis缓存(最佳) Redis是一个远程内存数据库(非关系型数据库),性能强劲,具有复制特性以及解决问题而生的独一无二的数据模型 Redis数据模型图 ?...Redis的持久化使用了Buffer I/O,对持久化文件的写入和读取操作都会使用物理内存的Page Cache,而大多数数据库系统会使用Direct I/O来绕过这层Page Cache并自行维护一个数据的...Redis分布式集群 ? Redis Cluster是一个实现了分布式且允许单点故障的Redis高级版本,它没有中心节点,具有线性可伸缩的功能。...Redis Cluster使用的分布式算法也很简单:crc16( key ) % HASH_SLOTS_NUMBER 整体设计可总结为: 数据hash分布在不同的Redis节点实例上 M/S的切换采用...LTRIM用来限制列表中的项目数最多为5000 如果用户需要的检索的数据量超越这个缓存容量,这时才需要把请求发送到数据库 删除和过滤 如果一篇文章被删除,可以使用LREM从缓存中彻底清除掉

30520

Redis数据库 专题

Redis是一种内存型数据库。传统的数据库储存在硬盘中,而Redis数据库存在内存中,所以读写速度非常快。因此redis广泛用于缓存方向,除此之外也经常用于实现分布式锁。...-《Redis设计与实现》 基本原理简述如下: fork()执行之后,kernel将父进程中所有的内存页的权限都设置为read-only,然后子进程的地址空间指向父进程。...缓存雪崩 缓存同一时间大面积的失效,所以,后面的请求全都落到数据库上,造成数据库短时间内承受大量请求而崩掉。 解决方法: 事前:尽量保证redis集群的高可用性,发现机器宕机尽快补上。...缓存穿透 大量请求的key根本不在缓存中,导致请求直接到了数据库上,根本没有经过缓存这一层。 解决方法: 缓存无效key:如果缓存和数据库都查不到某个key就写一个到redis中并设置过期时间。...Redis出现问题,不去数据库查询,而是直接返回默认值给用户。

73720

缓存数据库Redis

概念: redis是一款高性能的NOSQL系列的非关系型数据库 1.1.什么是NOSQL NoSQL(NoSQL = Not Only SQL),意即“不仅仅是SQL”,是一项全新的数据库理念...1.3 什么是Redis Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,官方提供测试数据,50个并发执行100000个请求,读的速度是110000次/s,...数据库操作 数据库的数量,可以修改配置中的/app/redis-5.0.5/redis.conf 切换数据库 127.0.0.1...是一个内存数据库,当redis服务器重启,获取电脑重启,数据会丢失,我们可以将redis内存中的数据持久化保存到硬盘的文件中。...* 数据库的表执行 增删改的相关操作,需要将redis缓存数据情况,再次存入 * 在service对应的增删改方法中,将redis数据删除。

2.6K30
领券