![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
redis
文章平均质量分 70
_李白_
内外兼修,方是正途;外是架构,内是数学。
展开
-
Redis:二进制安全的string
#define HI_SDS_MAX_PREALLOC (1024*1024)hisds hi_sdsMakeRoomFor(hisds s, size_t addlen) { void *sh, *newsh; size_t avail = hi_sdsavail(s); size_t len, newlen; char type, oldtype = s[-1] & HI_SDS_TYPE_MASK; int hdrlen; /* Retu.原创 2021-12-13 00:15:31 · 1150 阅读 · 0 评论 -
Redis:主从复制
目录1、主从复制的概念2、主从复制的机制2.1、全量同步2.2、 增量同步3、redis的主从同步变迁3.1、redis2.8之前3.2、2.8版本3.3、4.0版本1、主从复制的概念redis为了实现高可用(比如解决单点故障的问题),会把数据复制多个副本部署到其他节点上,通过复制,实现Redis的高可用性,实现对数据的冗余备份,保证数据和服务的可靠性。比如:如何配置的:配置⽂件: 在从服务器的配置⽂件中加⼊:slaveof 启动命令: redis-se原创 2021-04-11 17:14:12 · 447 阅读 · 1 评论 -
Redis:Info 命令
Redis Info 命令redis Info 命令基本语法如下:redis 127.0.0.1:6379> INFO [section] Redis Info 命令以一种易于理解和阅读的格式,返回关于 Redis 服务器的各种信息和统计数值。通过给定可选的参数 section ,可以让命令只返回某一部分的信息: server : 一般 Redis 服务器信息,包含以下域: redis_version : Redis 服务器版本 redis_git_sha1 : Git原创 2021-04-11 14:57:40 · 188 阅读 · 0 评论 -
Redis:缓存穿透、缓存击穿、缓存雪崩的原因和解决方法
目录1、缓存穿透2、缓存击穿3、缓存雪崩1、缓存穿透缓存穿透是指访问缓存和数据库中都不存在的数据,造成数据库压力过大解决方法:①设置请求过滤机制,例如布隆过滤器②将均不存在的数据在缓存中设置为key-null形式,过期时间为500ms,即避免了频繁异常请求,也不会太过于影响正常使用(因为一开始不存在的数据后面有可能会存在)2、缓存击穿缓存击穿是指缓存中没有但数据库中有的数据(一般是缓存时间到期),这时由于并发用户特别多,同时读缓存没读到数据,又同时去数据库去取数据,.原创 2021-04-07 15:28:07 · 184 阅读 · 0 评论 -
Redis存储结构源码分析
1、redis的哈希表//dict.htypedef struct dictEntry { void *key; //键 union { void *val; 可以指向不同类型 redisobject uint64_t u64; //用于redis集群 哨兵模式 选举算法 int64_t s64; //记录过期时间 double d; } v; //值 struct dictEntry *原创 2021-03-28 14:21:19 · 1200 阅读 · 4 评论 -
Redis:缩容、扩容、渐进式rehash
目录1、缩容 扩容2、渐进式rehash1、缩容 扩容随着redis的操作的不断执行,哈希表保存的键值会逐渐地增多或者减少,为了让哈希表的负载因子(ratio)维持在一个合理的范围之内,当哈希表保存的键值对数量太多或者太少时,程序需要对哈希表的大小进行相应的扩展或者收缩。ratio= ht[0].used / ht[0].size比如,hash表的size为4,如果已经插入了4个k-v的话,则ratio为1。redis的默认负载因子为1,负载因子最大可以达到5(持久化的时候,需.原创 2021-03-28 12:33:43 · 3198 阅读 · 0 评论 -
Redis:性能测试 redis-benchmark
Redis 性能测试是通过同时执行多个命令实现的。语法redis 性能测试的基本命令如下:redis-benchmark [option] [option value]注意:该命令是在 redis 的目录下执行的,而不是 redis 客户端的内部指令。redis 性能测试工具可选参数如下所示:序号 选项 描述 默认值 1 -h 指定服务器主机名 127.0.0.1 2 -p 指定服务器端口 6379 3 -s原创 2021-03-18 01:08:55 · 536 阅读 · 0 评论 -
Redis:Stream消息队列命令用法实例
XADD使用 XADD 向队列添加消息,如果指定的队列不存在,则创建一个队列,XADD 语法格式:XADD key ID field value [field value ...]key:队列名称,如果不存在就创建 ID:消息 id,我们使用 * 表示由 redis 生成,可以自定义,但是要自己保证递增性。 field value: 记录。xdel和xlength就不多介绍了,下面来介绍一下xtrim。XTRIMxtrim通过驱逐较旧的条目(具有较低ID的条目)来...原创 2021-03-17 22:35:04 · 1032 阅读 · 0 评论 -
Redis:事务
Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证:批量操作在发送 EXEC 命令前被放入队列缓存。 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。一个事务从开始到执行会经历以下三个阶段:开始事务(multi)。 命令入队。 执行事务(exec)。...原创 2021-03-16 19:51:33 · 68 阅读 · 0 评论 -
Redis消息通信模式: 发布订阅
Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。Redis 客户端可以订阅任意数量的频道。下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1 之间的关系:当有新消息通过 PUBLISH 命令发送给频道 channel1 时, 这个消息就会被发送给订阅它的三个客户端:开启两个redis-cli,一个用来创建订阅,一个给创建好的订阅发送.原创 2021-03-16 18:46:09 · 230 阅读 · 0 评论 -
redis:HyperLogLog
Redis 在 2.8.9 版本添加了 HyperLogLog 结构。HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定的、并且是很小的。在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。但是,因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入原创 2021-03-16 18:15:07 · 152 阅读 · 0 评论 -
Redis:五种数据类型及常用操作
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。1、String(字符串)string 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。string 类型是 Redis 最基本的数据类型,string 类原创 2021-03-16 16:42:40 · 204 阅读 · 0 评论 -
redis:源码安装、配置
1、源码安装获取源码并make:wget http://download.redis.io/releases/redis-6.2.0.tar.gztar xzf redis-6.2.0.tar.gzcd redis-6.2.0/make执行完make命令后,redis-6.0.8 的src目录下会出现编译后的 redis 服务程序 redis-server,还有用于测试的客户端程序 redis-cli:下面启动 redis 服务:cd src./redis-...原创 2021-03-16 08:21:36 · 277 阅读 · 0 评论