
Redis
文章平均质量分 78
redis介绍
TABE_
这个作者很懒,什么都没留下…
展开
-
Redis异步消息队列
这里写目录标题使用list实现异步消息队列使用发布-订阅模式实现异步消息队列使用ZSet实现延时队列使用list实现异步消息队列Redis 的 list(列表) 数据结构常用来作为异步消息队列使用,使用rpush和lpush操作入队列,使用lpop 和 rpop来出队列。客户端是通过队列的 pop 操作来获取消息,然后进行处理。处理完了再接着获取消息,再进行处理。如此循环往复,这便是作为队列消费者的客户端的生命周期。可是如果队列空了,客户端就会陷入 pop 的死循环,不停地 pop,没有数据,接着再原创 2022-03-27 16:17:08 · 4198 阅读 · 0 评论 -
Redis管道(pipeline)详解
这里写目录标题pipeline出现的背景原生批命令(mset, mget)与Pipeline对比pipeline的使用注意事项pipeline出现的背景redis客户端执行一条命令分4个过程:发送命令-〉命令排队-〉命令执行-〉返回结果这个过程称为Round trip time(简称RTT, 往返时间),Redis的原生批命令(mget和mset)有效节约了RTT,但大部分命令(如hgetall,并没有mhgetall)不支持批量操作,需要消耗N次RTT ,这个时候需要pipeline来解决这个原创 2022-03-27 16:29:46 · 4278 阅读 · 0 评论 -
Redis分布式锁的实现
这里写目录标题分布式锁介绍方案一:SETNX + EXPIRE方案二:SETNX + value值是(系统时间+过期时间)方案三:使用Lua脚本(包含SETNX + EXPIRE两条指令)方案四:SET的扩展命令(SET EX PX NX)方案五:SET EX PX NX + 校验唯一随机值,再释放锁方案六: 开源框架Redisson方案七:多机实现的分布式锁Redlock分布式锁介绍分布式锁其实就是控制分布式系统不同进程共同访问共享资源的一种锁的实现。如果不同的系统或同一个系统的不同主机之间共享了某原创 2022-03-27 15:46:13 · 1618 阅读 · 0 评论 -
Redis内存淘汰策略
这里写目录标题Redis内存淘汰机制Redis内存淘汰机制Redis配置文件中可以设置maxmemory,即内存的最大使用量,到达设置值时会执行内存淘汰机制。其中,LRU(least recently used)为最近最少用到的,LFU(Least Frequently Used)为最不常用的。volatile-lru -> 使用 LRU 算法删除过期字典中的keyallkeys-lru -> 根据 LRU 算法删除任意keyvolatile-lfu -> 使用 LFU 算法删除原创 2022-03-27 15:00:32 · 603 阅读 · 0 评论 -
Redis过期键的删除策略(过期机制)
这里写目录标题Redis如何判断数据是否过期?Redis如何淘汰过期的keys定时删除惰性删除定期删除Redis 内存淘汰机制Redis如何判断数据是否过期?Redis 通过一个叫做过期字典(可以看作是hash表)来保存数据过期的时间。过期字典是存储在redisDb这个结构里的,过期字典的键指向Redis数据库中的某个key(键),过期字典的值是一个long long类型的整数,这个整数保存了key所指向的数据库键的过期时间(毫秒精度的UNIX时间戳)。Redis如何淘汰过期的keysRedis数据原创 2022-01-16 17:06:58 · 535 阅读 · 0 评论 -
Redis容灾备份的方法
Redis 的容灾备份基本上就是对数据进行备份, 并将这些备份传送到多个不同的外部数据中心。容灾备份可以在 Redis 运行并产生快照的主数据中心发生严重的问题时, 仍然让数据处于安全状态。下面介绍的都是一些实用又便宜的容灾备份方法:Amazon S3 ,以及其他类似 S3 的服务,是一个构建灾难备份系统的好地方。 最简单的方法就是将你的每小时或者每日 RDB 备份加密并传送到 S3 。同时使用多个储存服务来保存数据文件,可以提升数据的安全性。传送快照可以使用 SCP 来完成(SSH 的组件)。 以下原创 2022-01-18 20:38:20 · 1407 阅读 · 0 评论 -
Redis持久化
Redis 提供的持久化方式RDBRDB原理RDB的优点和缺点AOFAOF原理AOF的优点和缺点AOF的日志重写功能如果AOF文件损坏了怎么办主从复制时AOF文件如何处理过期如何选择使用哪种持久化方式RDBRDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储。在默认情况下, Redis 将数据库快照保存在名字为 dump.rdb的二进制文件中。你可以对 Redis 进行设置, 让它在“ N 秒内数据集至少有 M 个改动”这一条件被满足时, 自动保存一次数据集。这种持久化方式被称为快照snapsh原创 2022-01-18 19:48:46 · 1116 阅读 · 0 评论 -
数据库缓存穿透/缓存击穿/缓存雪崩
这里写目录标题缓存穿透解决方案布隆过滤器缓存空对象缓存击穿解决方案缓存雪崩解决方案缓存穿透缓存穿透的概念很简单,用户想要查询一个数据,发现redis内存数据库没有,也就是缓存没有命中,于是向持久层数据库查询。发现也没有,于是本次查询失败。当用户很多的时候,缓存都没有命中,于是都去请求了持久层数据库。这会给持久层数据库造成很大的压力,这时候就相当于出现了缓存穿透。解决方案布隆过滤器布隆过滤器实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空原创 2022-03-27 15:04:47 · 1082 阅读 · 0 评论 -
数据库缓存一致性
这里写目录标题保证缓存一致性(双写一致性)先更新数据库,后更新缓存先更新缓存,后更新数据库先删除缓存,后更新数据库先更新数据库,后删除缓存Redis在更新数据库的值时,为什么要删除缓存,而不是更新缓存缓存穿透解决方案布隆过滤器缓存空对象缓存击穿解决方案缓存雪崩解决方案保证缓存一致性(双写一致性)我们这里列出来所有策略:(1)先更新数据库,后更新缓存;(2)先更新数据库,后删除缓存;(3)先更新缓存,后更新数据库;(4)先删除缓存,后更新数据库。先更新数据库,后更新缓存这种场景一般是没有人使用的,主要原创 2022-01-16 17:18:51 · 783 阅读 · 0 评论 -
Redis单线程模型详解
这里写目录标题Redis 单线程模型简介文件事件常用的文件时间处理器客户端与Redis通信的一次流程Redis 为什么要引入多线程呢?为什么Redis单线程模型也能效率这么高?Redis 单线程模型简介Redis 内部使用文件事件处理器 file event handler ,这个文件事件处理器是单线程的,所以 Redis 才叫做单线程的模型。它采用 IO 多路复用机制同时监听多个 socket,将产生事件的 socket 压入内存队列中,事件分派器根据 socket 上的事件类型来选择对应的事件处理器原创 2022-01-16 16:44:02 · 6081 阅读 · 0 评论 -
Redis 发布与订阅
这里写目录标题Redis发布与订阅基本命令原理Redis订阅系统的优势Redis发布与订阅基本命令PSUBSCRIBE pattern [pattern ...] #订阅一个或多个符合给定模式的频道。PUBSUB subcommand [argument [argument ...]] #查看订阅与发布系统状态。PUBLISH channel message #将信息发送到指定的频道。PUNSUBSCRIBE [pattern [pattern ...]] #退订所有给定模式的频道原创 2022-03-26 19:23:20 · 1504 阅读 · 0 评论 -
Redis高级数据类型
这里写目录标题GEO使用场景常用命令HyperLogLog使用场景常用命令BitMap使用场景常用命令GEO这个功能可以将用户给定的地理位置信息储存起来, 并对这些信息进行操作。使用场景来实现诸如附近位置、摇一摇这类依赖于地理位置信息的功能。geo的数据类型为zset。常用命令GEOADD Sicily 13。361389 38。115556 "Palermo" 15。087269 37。502669 "Catania" #添加地理位置的坐标。GEOPOS Sicily Palermo Cat原创 2022-03-26 19:29:05 · 720 阅读 · 0 评论 -
哈希表hash的扩容
哈希表hash的扩容字典dict的结构哈希表hash的扩容(rehash)渐进式哈希字典dict的结构了解hash的扩容之前,需要先了解hash的底层实现:dict。dict所使用的哈希表由 dict.h/dictht 结构定义:typedef struct dictht { // 哈希表数组 dictEntry **table; // 哈希表大小 unsigned long size; // 哈希表大小掩码,用于计算索引值 // 总是等于 si原创 2022-05-01 21:26:05 · 3993 阅读 · 1 评论 -
有序集合对象 ZSet 的底层原理
这里写目录标题ziplist压缩列表结构压缩列表结构压缩列表节点结构连锁更新压缩列表在Redis中的用途skiplist传统跳表改进后的跳表zset中的跳表skiplist与哈希表、平衡树的比较skiplist与哈希表比较skiplist与平衡树的比较有序集合对象ZSet的编码可以是ziplist(压缩列表)或者skiplist(跳表)。同时满足以下条件时使用ziplist编码:元素数量小于128个。所有member的长度都小于64字节。以上两个条件的上限值可通过zset-max-ziplist原创 2022-01-16 16:15:43 · 3783 阅读 · 0 评论 -
redisObject详解
这里写目录标题Redis的两层数据结构简介Redis数据结构的内部实现redisObject结构体redisObject的作用Redis的两层数据结构简介redis的性能高的原因之一是它每种数据结构都是经过专门设计的,并都有一种或多种数据结构来支持,依赖这些灵活的数据结构,来提升读取和写入的性能。如果要了解redis的数据结构,可以从两个不同的层面来讨论它:第一个层面,是从使用者的角度,这一层面也是Redis暴露给外部的调用接口,比如:string,list,hash,set,sorted set。原创 2022-03-26 19:51:31 · 2607 阅读 · 0 评论 -
Redis底层数据结构
这里写目录标题SDSdictziplistquicklistintsetskiplistSDSSDS全称是Simple Dynamic String,具有如下显著的特点:可动态扩展内存。sds表示的字符串其内容可以修改,也可以追加。在很多语言中字符串会分为mutable和immutable两种,显然sds属于mutable类型的。采用预分配冗余空间的方式来减少内存的频繁分配。内部为当前字符串实际分配的空间,一般要高于实际字符串的长度,当字符串的长度小于1M时,扩容都是扩一倍,如果超过1M,扩容是最原创 2022-03-26 20:22:43 · 823 阅读 · 0 评论 -
Redis基本数据类型
这里写目录标题String常用命令List使用场景常用命令Set使用场景常用命令ZSet使用场景常用命令Hash使用场景常用命令GEO使用场景常用命令使用场景常用命令BitMap使用场景常用命令Redis发布与订阅基本命令原理Redis订阅系统的优势StringString是简单的key-value类型,value其实不仅可以是String,也可以是数字。string 数据结构是简单的 key-value 类型。虽然 Redis 是用 C 语言写的,但是 Redis 并没有使用 C 的字符串表示,原创 2022-01-11 21:50:03 · 463 阅读 · 0 评论 -
Redis的特点
这里写目录标题优点缺点Redis为什么这么快优点基于内存操作,内存读写速度快。Redis是单线程的,避免线程切换开销及多线程的竞争问题。单线程是指网络请求使用一个线程来处理,即一个线程处理所有网络请求,Redis 运行时不止有一个线程,比如数据持久化的过程会另起线程。支持多种数据类型,包括String、Hash、List、Set、ZSet等。支持持久化。Redis支持RDB和AOF两种持久化机制,持久化功能可以有效地避免数据丢失问题。支持事务。Redis的所有操作都是原子性的,同时Redis还原创 2022-03-27 13:58:31 · 910 阅读 · 0 评论 -
hiredis API
hiredis同步调用同步API总览连接redis数据库函数原型参数说明返回值使用例子使用redisCommand()发送需要执行的命令函数原型参数说明返回值使用redisCommandArgv()发送需要执行的命令函数原型参数说明使用例子使用redisAppendCommand()发送需要执行的命令函数原型参数说明使用例子释放资源函数原型参数说明同步API总览hiredis主要有以下同步API:/**连接数据库*/redisContext *redisConnect(const char *ip,原创 2021-11-02 19:12:34 · 1407 阅读 · 0 评论 -
关系型和非关系型数据库的区别
这里写目录标题关系型数据库优点缺点非关系型数据库优点缺点关系型数据库关系型数据库,是指采用了关系模型来组织数据的数据库,关系型数据库的最大特点就是事务的一致性。关系型数据天然就是表格式的,因此数据存储在数据表的行和列中。数据表可以彼此关联协作存储,也很容易提取数据。。优点易于维护:都是使用表结构,格式一致。使用方便:SQL语言通用,可用于复杂查询。复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询。缺点读写性能比较差,尤其是海量数据的高效率读写。固定的表结构,灵活度稍欠。原创 2021-12-30 21:07:18 · 432 阅读 · 0 评论