随笔分类 - Redis
摘要:在使用 Redis 管道技术时,要注意一些限制,避免踩坑: Pipeline 不能保证原子性 - Pipeline 只是将客户端发送命令的方式改为批量发送,而服务端在接收到 Pipeline 发来的命令后,将其拆解为一条条命令,然后依然是串行执行。执行过程中,服务端有可能执行其他客户端的命令,所以无
阅读全文
摘要:ACID 中关于原子性的定义: 原子性:一个事务(transaction)中的所有操作,或者全部完成,或者全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。即,事务不可分割、不可约简。 Redis事务不支持传
阅读全文
摘要:本文从网络模型、数据结构和内存管理、持久化和多机协作四个角度对redis的设计思路进行分析。 一.网络模型 Redis是典型的基于Reactor的事件驱动模型,单进程单线程,高效的框架总是类似的。网络模型与spp的异步模型几乎一致。 Redis流程上整体分为接受请求处理器、响应处理器和应答处理器三个
阅读全文
摘要:String类型:一个String类型的value最大可以存储512MHash类型:键值对个数最多为2^32-1个,也就是4294967295个(40多亿) List类型:list的元素个数最多为2^32-1个,也就是4294967295个(40多亿) Set类型:元素个数最多为2^32-1个,也就
阅读全文
摘要:一、Redis数据结构 Redis支持五种主要数据结构:字符串(String)、列表(List)、哈希表(Hash)、集合(Set)和有序集合(Sorted Set)。这些数据结构为开发者提供了灵活的数据操作方式,满足了不同场景下的数据存储需求。 字符串(String):最基本的数据类型,可以包含任
阅读全文
摘要:什么是 MongoDB MongoDB 是基于 C++ 开发的 NOSQL 开源文档数据库 ,是最像关系型数据库的 nosql,功能也是最丰富的 nosql,它具有所以的可伸缩性,灵活性,高性能,高扩展性的优势。 大致有如下特性: 面向集合文档的存储,存储 Bson (json的扩展) 格式自由,数
阅读全文
摘要:一、前言 在线人数统计这个功能实现的方式很多,这里说一下常使用的方式:使用Redis的有序集合(zset)实现。 核心方法是这四个:zadd、zrangeByScore、zremrangeByScore、zrem。 二、实现步骤 1. 如何认定用户是否在线? 认定用户在线的条件一般跟网站有关,如果网
阅读全文
摘要:单个命令多次执行 没有使用Pipeline的交互如下: package main import ( "context" "fmt" "github.com/go-redis/redis/v8" "time" ) func main() { // 创建Redis客户端 rdb := redis.New
阅读全文
摘要:1. 引言 1)消费队列 在购买火车票时,发现如果存在一个未支付的订单时,就不能再进行购票了。如果把待支付的订单放在一个队列里面,那队列的长度就只能是 1。 正好最近用 Redis 比较多,于是突发奇想,如何用 Redis 原生的数据结构实现一个简易版的延时消费队列呢? 业务状态图如下: 并且,需要
阅读全文
摘要:在开发中遇到一个问题,使用redis中的set【针对于string类型】更新一个含有过期时间的key时,会使这个key的过期时间变成永久有效: 127.0.0.1:6379> set test hello OK 127.0.0.1:6379> expire test 1000 (integer) 1
阅读全文
摘要:背景 缓存是软件开发中一个非常有用的概念,数据库缓存更是在项目中必然会遇到的场景。而缓存一致性的保证,针对不同的要求,选择恰到好处的一致性方案。 缓存是什么 存储的速度是有区别的。缓存就是把低速存储的结果,临时保存在高速存储的技术。 如图所示,金字塔上层的存储,可以作为下层存储的缓存。 数据存储和访
阅读全文
摘要: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 的过期时间,同时创建一个定时器,让定时器在该过期时间到来时,立即执行对其
阅读全文