Redis由浅入深
文章平均质量分 93
简单易学的Redis教程,只要我们懂一点点的编程,那么你就可以很轻松的学会。
codingjav
骑马Coding
展开
-
分布式锁实现方案
1、什么是锁在单进程环境中,存在多个线程可以同时改变某个变量,就需要对变量或代码块做同步,使其修改这种变量时能够线性执行,防止并发带来不可控的结果。而这种同步的本质就是通过锁实现的。为了实现多个线程在一个时刻同一个代码块只能有一个线程可执行,那么就需要在某个地方做个标记,这个标记必须每个线程都能看到,当标记不存在时可以设置该标记,其余线程发现已经有标记后则等待标记的线程结束同步代码块取消后再尝试标记。这个标记可以理解为锁。不同地方实现锁不同,只要满足线程看到标记即可。...原创 2021-10-14 11:33:39 · 181 阅读 · 0 评论 -
Redis进阶-高可用:集群
前言前面几篇文章中,已经介绍了Redis的几种高可用技术:持久化、主从复制和哨兵,但这些方案仍有不足,其中最主要的问题是存储能力受单机限制,以及无法实现写操作的负载均衡。Redis集群解决了上述问题,实现了较为完善的高可用方案。本文将详细介绍集群,主要内容包括:集群的作用;集群的搭建方法及设计方案;集群的基本原理;客户端访问集群的方法;以及其他实践中需要的集群知识(集群扩容、故障转移、参数优化等)。一、集群的作用集群,即Redis Cluster,是Redis 3.0开始引入的分布式存.原创 2021-07-11 12:07:12 · 232 阅读 · 1 评论 -
Redis进阶高可用之哨兵
目录一、作用与架构1. 作用2. 架构二、部署1. 部署主从节点2. 部署哨兵节点3. 总结三、客户端访问哨兵系统1. 代码示例2. 客户端原理3. 总结四、基本原理1. 哨兵节点支持的命令2. 基本原理五、配置与实践建议1. 配置2. 实践建议六、总结一、作用与架构1. 作用在介绍哨兵之前,首先从宏观角度回顾一下Redis实现高可用相关的技术。它们包括:持久化、复制、哨兵和集群,其主要作用和解...原创 2021-07-10 23:12:39 · 192 阅读 · 0 评论 -
Redis进阶高可用之主从复制
主从复制概述主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave);数据的复制是单向的,只能由主节点到从节点。主从复制的作用主要包括:数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。 故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。 负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时..原创 2021-07-09 23:39:24 · 146 阅读 · 0 评论 -
Redis的三种集群原理
redis有三种集群方式:主从复制、哨兵模式和Cluster集群1、主从复制原理:从服务器连接主服务器,发送SYNC命令; 主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有写命令; 主服务器BGSAVE执行完后,向所有从服务器发送快照文件,并在发送期间继续记录被执行的写命令; 从服务器收到快照文件后丢弃所有旧数据,载入收到的快照; 主服务器快照发送完毕后开始向从服务器发送缓冲区中的写命令; 从服务器完成对快照的载入,开始接收命令请求,并原创 2021-07-09 17:23:10 · 362 阅读 · 0 评论 -
Redis持久化详解
目录Redis持久化简介为什么需要持久化Redis持久化有哪些方式?为什么重点学习RDB和AOF?快照原理触发方式:手动触发:自动触发:bgsave运作流程RDB深入理解RDB的优缺点AOF日志原理为什么采用写后日志?如何实现AOF深入理解AOF重写总结操作Redis4.0 混合持久化性能与实践Redis持久化简介为什么需要持久化Redis的数据全部在内存里,如果突然宕机,数据就会全部丢失,因此必须有一种机制来保证Redis的数原创 2021-07-09 12:24:30 · 192 阅读 · 3 评论 -
redis详解- 过期删除策略和内存淘汰策略
设置redis键过期时间Redis提供了四个命令来设置过期时间(生存时间)。 ①、EXPIRE <key> <ttl> :表示将键 key 的生存时间设置为 ttl 秒。 ②、PEXPIRE <key> <ttl> :表示将键 key 的生存时间设置为 ttl 毫秒。 ③、EXPIREAT <key> <timestamp> :表示将键 key 的生存时间设置为 timestamp 所指定的秒数时间戳。 ..原创 2021-07-05 17:41:46 · 131 阅读 · 0 评论 -
Redis进阶-缓存问题
Redis 最常用的一个场景就是作为缓存,本文主要探讨Redis作为缓存,在实践中可能会有哪些问题?比如一致性、击穿、穿透、雪崩、污染等。目录为什么要理解Redis缓存问题缓存穿透缓存击穿缓存雪崩缓存污染(或满了)缓存淘汰策略数据库和缓存一致性Cache Aside Pattern方案:队列 + 重试机制方案:异步更新缓存(基于订阅binlog的同步机制)参考文章为什么要理解Redis缓存问题在高并发业务场景下,数据库大多数情况都是用户并发访问.原创 2021-07-02 20:13:12 · 137 阅读 · 0 评论 -
安利公众号
Java开发相关:微信号:didispace、keeppuresmile、ali_tech、lovestblog原创 2018-07-07 17:02:25 · 1196 阅读 · 0 评论 -
深入详解Redis布隆过滤器
前面学习HyperLogLog数据类型来进行估算,还是非常有意义的,能解决很多精度要求不高的统计问题。 但是对于某一个值是否存在于HyperLogLog结构里面,就变现的无能为力,因为它只提供了 pfadd 和 pfcount 方法,没有提供 pfcontains 方法。讲个使用场景,比如我们在使用新闻客户端浏览新闻时,会不停的给我们推荐新的内容,而且每次推荐都会是不同的,以去掉那些我们已经浏览过的新闻。想一想它们是咱们做到推送去重呢?你可能会想到,服务器已经记录了用户看过的所有历史记录,当推送..原创 2021-06-28 10:43:40 · 1165 阅读 · 0 评论 -
redis的HyperLogLog与布隆过滤器
HyperLogLog与布隆过滤器都是针对大数据统计存储应用场景下的知名算法。HyperLogLog是在大数据量的情况下关于数据基数的空间复杂优化实现,而布隆过滤是在大数据量情况下关于检索一个元素是否存在于一个集合中的空间复杂优化后的实现。在传统的数据量较低的应用服务中,我们实现数据基数和数据是否存在分析的功能,通常是简单把数据存储下来,直接count一下就是基数了,而直接检索一个元素是否存在集合中也是非常简单。但是随着数据量的急剧增大,传统方式已经很难达到工程上的诉求了。海量数据无论是原创 2021-06-27 18:59:40 · 259 阅读 · 0 评论 -
Redis-Bitmap介绍及使用
目录1、Bitmap是什么2、Bitmap 基本命令3、Bitmap的优点和限制4、Bitmap使用场景4.1、引入依赖、配置4.2、活跃用户4.3、查询指定日期 活跃的用户数4.4、扩展 周活跃用户数4.5、用户/员工签到总结1、Bitmap是什么可以把BitMap想象成一个数组,树组的下标即是 偏移量,数组只能存储 0 1。bitmap = 位图,就是 byte 数组,用二进制表示,这个数组只能存储0或者1 。bitmap 就是用最小的单位bit来原创 2021-06-27 14:59:45 · 2643 阅读 · 2 评论 -
HyperLogLog 算法原理及其在 Redis 中的实现
一、问题引入大家在项目上可能会遇到过下面这些相同或者类似的需求: 统计一个APP的日活量(DAU)和月活量(MAU)。日活(月活)是指在一个统计日(统计月)之内,登录或者使用产品的不同用户数量,它是产品运营情况的重要指标之一,反映了用户的活跃度。 统计网站上各个网页的独立访客数,例如有些网页上面有阅读数。独立访客数需要对用户做去重,同一个用户多次访问只计算一次。 概括来说,这类需求就是去统计一个集合中不重复元素的个数。在数学上把一个集合不重复元素的个数称为集合的基数(cardin..转载 2021-06-27 13:00:28 · 427 阅读 · 0 评论 -
Redis-HyperLogLog
关于基数统计维基百科解释:cardinality of a set is a measure of the “number of elements“ of the set中文释义是:一个集合(可以包含重复元素)中不重复元素的个数。例如集合{1,2,3,1,2},有5个元素,但它的基数为3。基数统计通常是用来统计一个集合中不重复的元素个数。场景分析如果你负责开发维护一个网站,有天老板找你要网站上每个网页的UV,然后让你开发这个统计模块,你会如何实现?如果统计PV,非常简单,原创 2021-06-26 23:36:43 · 144 阅读 · 0 评论 -
Redis数据结构——对象多态及回收
前言本篇会是Redis基础数据结构最后一篇,整个Redis基础系列将要告一段落。后面会依据《redis设计与实现》继续分享Redis持久化、高可用、实战相关,敬请期待!!!原创 2021-06-12 19:24:05 · 114 阅读 · 0 评论 -
Redis数据结构-对象
Redis并没有直接使用这些数据结构来实现键值对数据库,而是基于这些数据结构创建了一个对象系统,这个系统包含字符串对象、列表对象、哈希对象、集合对象和有序集合对象这五种类型的对象,每种对象都用到了至少一种我们前面所介绍的数据结构。通过这五种这五种不同类型的对象,redis可以在执行命令之前,根据对象的类型来判断一个对象是否可以执行给定的命令。使用对象的另一个好处是,我们可以针对不同的使用场景,为对象设置多种不同的数据结构实现,从而优化对象在不同场景下的使用效率。除此之外,redis的对象..原创 2021-06-12 18:46:19 · 169 阅读 · 2 评论 -
Redis持久化
Redis的数据全部在内存里,如果突然宕机,数据就会全部丢失,因此必须有一种机制来保证Redis的数据不会因为故障而丢失,这种机制就是Redis的持久化机制。Redis的持久化机制有两种方式,第一种是快照,第二种是AOF日志。快照是一次全量备份,AOF日志是连续的增量备份。快照是内存数据的二进制序列化形式,在存储上非常紧凑,而 AOF 日志记录的是内存数据修改的指令记录文本。AOF日志在长期的...原创 2020-02-02 16:28:32 · 277 阅读 · 0 评论 -
Redis数据结构——整数集合-intset
整数集合整数集合是集合键的底层实现之一,当一个集合只包含整数值元素,并且这个集合的元素数量不多时,Redis就会使用整数集合作为集合键的底层实现。1、整数集合实现:整数集合是redis用于保存整数值的集合抽象数据结构,它可以可以保存类型位int16_t、int32_t、int64_t的整数值,并且保证集合中不会出现重复元素。typedef struct intset { ...原创 2020-01-13 22:09:01 · 218 阅读 · 0 评论 -
Redis数据结构——字典-hashtable
字典简介:字典,又称为符号表(symbol table)、关联数组(associative array)或映射(map),是一种用于保存键值对的抽象数据结构。字典是一种用于保存键值对的抽象数据结构。由于C没有内置这种数据结构,Redis构建自己的字典实现。Redis的数据库就是使用字典来作为底层实现的。字典还是哈希键的底层实现之一。除了用来实现数据库之外,字典还是哈希键的底层实现之...原创 2020-01-12 21:54:33 · 953 阅读 · 0 评论 -
Redis数据结构——跳跃表-skiplist
跳跃表简介:跳跃表是一种有序数据结构,通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。跳跃表支持评价O(logN)、最坏O(N)复杂度的节点查找,还可以通过顺序性操作来批量处理节点。在大部分情况下,跳跃表的效率可以和平衡树相媲美,并且因为跳跃表的实现比平衡树来得更简单,所以有不少程序都是用跳跃表来代替平衡树。Redis使用跳跃表作为有序结合键的底层实现之一,...原创 2020-01-12 21:38:29 · 203 阅读 · 0 评论 -
Redis数据结构——链表-linkedlist
链表简介:因为C语言没有内置链表这种数据结构,所以Redis构建了自己的链表实现。列表键的底层实现之一就是链表。当一个列表键包含了数量比较多的元素,又或者列表中包含的元素都是比较长的字符串时,Redis就会使用链表作为列表键的底层实现。1、链表实现:链表结点数据结构:typedef struct listNode { struct listNode *prev; ...原创 2020-01-12 17:13:01 · 407 阅读 · 0 评论 -
Redis数据结构——简单动态字符串-SDS
1、SDS简介: redis没有使用C语言传统的字符串表示(以空字符结尾的字符数组),而是自己构建了一种名为简单动态字符串(SDS)的抽象类型,并将SDS用作redis的默认字符串表示。除了用来保存数据库中的字符串值之外,SDS还被用作缓冲区;AOF模块中的AOF缓存区,以及客户端状态中的输入缓冲区,都是SDS实现的。2、SDS定义:struct sdshdr { ...原创 2020-01-12 17:09:38 · 252 阅读 · 0 评论 -
LRU算法java实现
LRU全称是Least Recently Used,即最近最久未使用的意思。LRU算法的设计原则是:如果一个数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也很小。也就是说,当限定的空间已存满数据时,应当把最久没有被访问到的数据淘汰。实现LRU:1.用一个数组来存储数据,给每一个数据项标记一个访问时间戳,每次插入新数据项的时候,先把数组中存在的数据项的时间戳自增,并将新数据项...原创 2020-01-11 18:26:50 · 274 阅读 · 0 评论 -
Redis系列-主从复制配置
Redis虽然有着卓越的性能,但我们仍然可以通过master/slave这种简单架构,进行读写分离,进一步挖掘redis的性能,提高系统的可用性。redis怎么进行主从复制呢?redis复制主要是通过master server持久化的rdb文件实现的。master server 先dump出内存快照文件,然后将rdb文件传给slave server,slave server 根据rdb文件原创 2017-04-26 02:07:06 · 432 阅读 · 0 评论 -
Redis事务介绍
Redis事务Redis中的事务(transaction)是一组命令的集合。事务同命令一样都是Redis最小的执行单位,一个事务中的命令要么都执行,要么都不执行。Redis事务的实现需要用到 MULTI 和 EXEC 两个命令,事务开始的时候先向Redis服务器发送 MULTI 命令,然后依次发送需要在本次事务中处理的命令,最后再发送 EXEC 命令表示事务命令结束。我们连接上redis后原创 2017-04-25 16:33:09 · 322 阅读 · 0 评论 -
redis持久化RDB和AOF
Redis 持久化: 提供了多种不同级别的持久化方式:一种是RDB,另一种是AOF. RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot)。 AOF 持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。 AOF 文件中的命令全部以 Redis 协议的格式来保存,新命令会被追加到文件的末尾。 Re原创 2017-04-25 00:25:32 · 708 阅读 · 0 评论 -
redis.conf 配置详解
# 当配置中需要配置内存大小时,可以使用 1k, 5GB, 4M 等类似的格式,其转换方式如下(不区分大小写)## 1k => 1000 bytes# 1kb => 1024 bytes# 1m => 1000000 bytes# 1mb => 1024*1024 bytes# 1g => 1000000000 bytes# 1gb => 1024*1024*1024原创 2017-04-24 23:58:19 · 372 阅读 · 0 评论 -
redis中list类型详解及常用命令
redis中的list类型有点类似于编程语言中的数组,list类型如下图所示,实际上是一种双向链表结构,通过lpush、lpop、rpush、rpop这几个命令来控制链表中数据出入,所以list类型可以用作栈,也可以用作队列一样。从元素插入和删除的效率来看,如果从链表的两头插入或删除元素,会非常的高效,即使链表中已经存储了上百万条的记录,也可以在很短的时间内完成。然而需要说明的原创 2017-04-22 04:48:02 · 1556 阅读 · 0 评论 -
redis常用命令(高级篇)
在我们学习过r edis一些基础命令后,再来学习一下redis高级篇的命令,下面列举一些常用的,可以供大家学习参考:1.【 mset key1 value1 key2 value2 ... keyN valueN 】 一次性存入多个key和值。2.【 mget key1 key2 ... keyN 】 一次性读取多个key。3.【 incr key 】 可以对key类型原创 2017-04-22 04:34:48 · 639 阅读 · 0 评论 -
redis常用命令(基础篇)
下面仅列出一些常用的redis命令行下的基础命令,供大家学习参考: 1.【set key value】存入一个key和值,如:set myname haha 2.【get key】读取一个key的值 3.【del key】删除一个key 4.【del key1 key2... keyN】 删除多个key,如:del myname1 myname2原创 2017-04-22 04:20:06 · 502 阅读 · 0 评论 -
redis常用的几种数据类型介绍
Redis支持5种数据类型字符串Redis中的字符串是一个字节序列。Redis中的字符串是二进制安全的,这意味着他们的长度不由任何特殊的终止字符决定。因为,可以在一个字符串中存储高达512兆字节的任何内容。 常用操作命令有get、set等散列/哈希Redis散列/哈希是键值对的集合。Redis散列/哈希是字符串字段和字符串值之间的映射,但字段值只能是字符串,不支持其他类型。因原创 2017-04-22 03:53:11 · 6715 阅读 · 2 评论 -
Redis和Memcached的一些区别
我们知道把一些热数据存到缓存中可以极大的提高速度,那么问题是用Redis好还是Memcached好呢,以下做出一些简单的区别和比较:1.、Redis不仅支持简单的k/v类型的数据,同时还支持list、set、zset(sorted set)、hash等数据结构的存储,使得它拥有更广阔的应用场景。2、Redis最大的亮点是支持数据持久化,它在运行的时候可以将数据备份在磁盘中,断电原创 2017-04-22 01:20:39 · 443 阅读 · 0 评论 -
Linux环境下Redis安装配置步骤
redis是当前比较热门的NOSQL系统之一,它是一个key-value存储系统。和Memcached类似,但很大程度补偿了memcached的不足,它支持存储的value类型相对更多,包括string、list、set、zset和hash。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作。在此基础上,redis支持各种不同方式的排序。Redis数据都是缓存原创 2017-04-21 01:54:07 · 5916 阅读 · 0 评论 -
redis概念、做什么及其应用场景
1、什么是RedisRedis是由意大利人Salvatore Sanfilippo(网名:antirez)开发的一款内存高速缓存数据库。Redis全称为:Remote Dictionary Server(远程数据服务),该软件使用C语言编写,Redis是一个key-value存储系统,它支持丰富的数据类型,如:string、list、set、zset(sorted set)、hash。原创 2017-04-22 00:40:39 · 435 阅读 · 0 评论