随笔分类 - Redis
摘要:背景 缓存是软件开发中一个非常有用的概念,数据库缓存更是在项目中必然会遇到的场景。而缓存一致性的保证,针对不同的要求,选择恰到好处的一致性方案。 缓存是什么 存储的速度是有区别的。缓存就是把低速存储的结果,临时保存在高速存储的技术。 如图所示,金字塔上层的存储,可以作为下层存储的缓存。 数据存储和访
阅读全文
摘要:Redis是一个基于内存的快速数据存储系统。它是一个开源的、内存中的数据库,允许使用者在其内存中存储数据,并提供高度可用性、高性能以及可扩展性的支持。Redis支持多种数据结构,包括字符串、列表、哈希、集合等,并适用于各种场景,包括缓存、会话存储、队列等。 Redis为什么不能存null Redis
阅读全文
摘要:哈希冲突链上的元素只能通过指针逐一查找再操作。如果哈希表里写入的数据越来越多,哈希冲突可能也会越来越多,这就会导致某些哈希冲突链过长,进而导致这个链上的元素查找耗时长,效率降低。对于追求“快”的 Redis 来说,这是不太能接受的。 所以,Redis 会对哈希表做 rehash 操作,也就是增加现有
阅读全文
摘要:1. 字典的实现 redis的字典数据类型的实现主要分为两个部分: typedef struct dict { dictType *type; void *privdata; dictht ht[2]; long rehashidx; unsigned long iterators; } dict;
阅读全文
摘要:Redis 特点 1. 内存数据库 Redis 数据主要存储在内存,综合性能标准 100k+ QPS。 需要说明下,十万QPS只是个综合参考,实际性能跟CPU性能、操作的命令复杂度有较大关系,对于简单的 set/get 操作50万QPS也没问题。 2. 丰富的数据结构 所有 Redis 的数据都是以
阅读全文
摘要:1、不进行数据淘汰的策略 noeviction(Redis3.0之后,默认的内存淘汰策略) :它表示当运行内存超过最大设置内存时,不淘汰任何数据,这时如果有新的数据写入,则会触发 OOM,但如果没有数据写入的话,只是单纯的查询或者删除操作的话,还是可以正常工作。 2、进行数据淘汰的策略 针对「进行数
阅读全文
摘要:Redis 中提供了三种过期删除的策略: 分类 1、被动删除:惰性删除 2、主动删除 1)定时删除 2)定期删除 3)当前已用内存超过maxmemory限定时,触发内存淘汰策略(主动清理) 含义 1)定时删除在设置某个 key 的过期时间,同时创建一个定时器,让定时器在该过期时间到来时,立即执行对其
阅读全文
摘要:1. 配置合理的最大内存限制 设置maxmemory参数:在Redis的配置文件中(通常是redis.conf),可以设置maxmemory参数来限制Redis实例可以使用的最大内存量。当达到这个限制时,Redis会根据配置的内存淘汰策略来释放部分内存空间。 2. 选择合适的内存淘汰策略 Redis
阅读全文
摘要:一、基础命令 1、ping(心跳命令) 若看到PONG响应,则说明客户端与Redis的连接正常。 2、select(切换数据库) redis默认有 16 个数据库,默认使用的是0号DB。 3、dbsize(查看key数量) 查看当前数据库中 key 的数量。 4、flushdb(删除当前库中所有数据
阅读全文
摘要:这个错误提示是因为执行HSET命令时参数数量不正确导致,HSET只能设置一组key/value,设置多组则使用HMSET。 HSET命令需要指定三个参数:Hash键、Hash字段和字段值。如果参数数量不正确,Redis服务器将返回"ERR wrong number of arguments for
阅读全文
摘要:Redis负载高的原因可能有以下几个: 1)数据量过大:如果Redis中存储的数据量非常大,超过了Redis服务器的内存容量,会导致Redis负载过高。 2)访问量过大:如果Redis服务器面临大量的并发请求,超过了服务器处理能力,会导致负载过高。 3)慢查询:如果Redis中存在慢查询语句,会导致
阅读全文
摘要:Redis取数据慢的原因可能有以下几个: 1)网络延迟:Redis是一个基于网络的内存数据库,如果网络延迟高,会导致数据取得慢。 2)数据量过大:如果Redis中存储了大量的数据,每次取数据时需要遍历整个数据集,会导致取数据的速度变慢。 3)频繁的数据持久化:如果Redis开启了持久化功能,频繁地将
阅读全文
摘要:Redis是一个开源、内存中的数据结构存储器,用作数据库、缓存和消息中间件中。由于其明了的语法和功能的极其丰富,它是一种应用非常广泛的服务器,但即使Redis是一款十分受欢迎的数据库,也可能由于某些原因而导致Redis返回nil。 Redis 返回 nil 的原因可能有以下几种: 1)Redis实例
阅读全文
摘要:go-cache是一种内存中的key:value store/cache库,类似于Memcached,适用于在一台机器上运行的应用程序(单机应用程序)。 文档 https://pkg.go.dev/github.com/patrickmn/go-cache https://github.com/pa
阅读全文
摘要:原因:用的方法与redis服务器中存储数据的类型存在冲突。 比如:有一个key的数据存储的是list类型的,但使用redis执行数据操作的时候却使用了非list的操作方法。 对一个Redis键执行不兼容的操作,这个错误通常发生在以下情况: 1、类型不匹配:试图执行的操作与键存储的数据类型不匹配。例如
阅读全文
摘要:一、Redis的持久化机制概述 RDB持久化机制: RDB持久化机制是一种将Redis在内存中的数据保存到磁盘上的方式,保存的数据是某个时间点的快照。 在RDB持久化机制中,Redis会周期性地将内存中的数据快照写入磁盘,保存为一个RDB文件。 通过快照的方式将数据保存在磁盘上,可以减小数据集的大小
阅读全文
摘要:大概场景是这样的,今天做了一些测试数据,下班了关机走人了, 第二天来打开一看,redis数据丢失了都没有了, 开始认为是redis自动数据过期了,但是我查看了没有设置过期时间, 要么就是redis自动清理了,要么是redis重启导致数据的丢下,结果是后者。 这是window下redis所有的配置文件
阅读全文
摘要:Redis的key是String类型的,如果Value如果也是String类型,相当于把两个字符串映射起来,即key-value。这里字符串不仅仅是传统意义上的字符串,例如“hello world”,也可以是JSON、HTML等。 1、string 字符串 //string key := "go2k
阅读全文
摘要:日常工作中存储对象信息时,一般有两种做法,一种是用 String存储,另一种是Hash 存储。既然两种数据结构都可以存储结构体信息。到底哪种更加合适呢? String 和 Hash 占用内存的比较 首先用代码先插入 10000 条数据,然后用可视化工具来看看内存的占用情况。 const Redis
阅读全文
摘要:1.将对象序列化后保存到Redis2.将对象用FastJSON转为JSON字符串后存储3.将对象用Hash数据类型存储(利用Hash存储对象,适用于全部字段的部分值经常变化)
阅读全文
浙公网安备 33010602011771号