redis
石灰聪
这个作者很懒,什么都没留下…
展开
-
redis基础篇——布隆过滤器
布隆过滤器在1970年的时候,有一个叫做布隆的前辈对于判断海量元素中元素是否存在的问题进行了研究,也就是到底需要多大的位图容量和多少个哈希函数,它发表了一篇论文,提出的这个容器就叫做布隆过滤器。工作原理首先,布隆过滤器的本质就是一个位数组和若干个哈希函数。集合里面有3个元素,要把它存到布隆过滤器里面去,应该怎么做?首先是a元素,这里我们用3次计算。b.c元素也一样。元素已经存进去之后,现在我要来判断一个元素在这个容器里面是否存在,就要使用同样的三个函数进行计算。比如d元素,我用第一原创 2020-12-01 13:04:17 · 919 阅读 · 0 评论 -
redis基础篇——高并发问题(缓存雪崩,缓存穿透)
高并发问题(缓存雪崩,缓存穿透)在Redis存储的所有数据中,有一部分是被频繁访问的。有两种情况可能会导致热点问题的产生,一个是用户集中访问的数据,比如抢购的商品,明星结婚和明星出轨的微博。还有一种就是在数据进行分片的情况下,负载不均衡,超过了单个服务器的承受能力。热点问题可能引起缓存服务的不可用,最终造成压力堆积到数据库。出于存储和流量优化的角度,我们必须要找到这些热点数据。热点数据发现首先,Redis的缓存淘汰机制,能够留下那些热点的key,不管是LRU还是LFU除了自动的缓存淘汰机制原创 2020-12-01 12:31:18 · 647 阅读 · 0 评论 -
redis基础篇——数据一致性
数据一致性缓存使用场景针对读多写少的高并发场景,我们可以使用缓存来提升查询速度。当我们使用Redis作为缓存的时候,一般流程是这样的:如果数据在Redis存在,应用就可以直接从Redis拿到数据,不用访问数据库。应用新增了数据,只保存在数据库中,这个时候Redis没有这条数据。如果Redis里面没有,先到数据库查询,然后写入到Redis,再返回给应用。一致性问题的定义因为数据最终是以数据库为准的(这是我们的原则),如果Redis没有数据,就不存在这个问题。当Redi原创 2020-12-01 11:41:51 · 3283 阅读 · 1 评论 -
redis基础篇——Redis客户端(Jedis,Lettuce,Redisson)
Redis客户端通信协议Redis监听默认6379的端口号,可以通过TCP方式建立连接。服务端约定了一种特殊的消息格式,每个命令都是以rn(CRLF回车+换行)结尾。这种编码格式我们之前在AOF文件里面见到了,叫做Redis Serialization Protocol(RESP,Redis序列化协议),发消息或者响应消息需要按这种格式编码,接收消息需要按这种格式解码。Redis设计这种格式的原因:容易实现、解析快、可读性强。Redis6.0新特性里面说的RESP协议升级到了3.0版本,其实就是原创 2020-12-01 00:44:19 · 1252 阅读 · 0 评论 -
redis基础篇——Redis分布式方案(数据的分片)
Redis分布式方案(数据的分片)Redis ClusterRedis Cluster是在Redis 3.0的版本正式推出的,用来解决分布式的需求,同时也可以实现高可用。它是去中心化的,客户端可以连接到任意一个可用节点。Redis Cluster可以看成是由多个Redis实例组成的数据集合。客户端不需要关注数据的子集到底存储在哪个节点,只需要关注这个集合整体。以3主3从为例,节点之间两两交互,共享数据分片、节点状态等信息。Cluster解决分片的问题,数据怎么分布?Redis既没有用原创 2020-11-29 15:44:24 · 494 阅读 · 0 评论 -
redis基础篇——哨兵机制(Sentinel)
哨兵机制(Sentinel)问题:怎么实现高可用呢?第一个对于服务端来说,能够实现主从自动切换;第二个,对于客户端来说,如果发生了主从切换,它需要获取最新的master节点。思路:创建一台监控服务器来监控所有Redis服务节点的状态,比如,master节点超过一定时间没有给监控服务器发送心跳报文,就把master标记为下线,然后把某一个slave变成master,应用每一次都是从这个监控服务器拿到master的地址。Sentinel原理Redis的高可用是通过哨兵Sentinel来保证的原创 2020-11-29 11:01:37 · 429 阅读 · 0 评论 -
redis基础篇——主从复制
主从复制Reids支持集群的架构,集群的节点有主节点和从节点之分。主节点叫master,从节点叫slave,slave会通过复制的技术,自动同步master的数据。主从复制配置只需要在配置文件里面添加一行配置就可以了。例如一主多从,186是主节点,在每个slave节点的redis.conf配置文件增加一行。replicaof 192.168.44.186 6379从节点启动之后,就会自动连接到master节点,开始同步数据。如果master节点变了,比如原来的master宕机,选举出了新原创 2020-11-29 10:10:11 · 133 阅读 · 0 评论 -
redis基础篇——持久化机制
持久化机制Redis提供了两种持久化的方案,一种是RDB快照(Redis DataBase),一种是AOF(Append Only File)RDBRDB是Redis默认的持久化方案(注意如果开启了AOF,优先用AOF)。当满足一定条件的时候,会把当前内存中的数据写入磁盘,生成一个快照文件dump.rdb,Redis重启会通过加载dump.rdb文件恢复数据。#文件路径#rdb文件默认在启动目录下(相对路径)#config get dir获取dir./#文件名称dbfilename原创 2020-11-28 10:04:39 · 113 阅读 · 0 评论 -
redis基础篇——内存回收
内存回收要实现key过期,有三种思路。立即过期(主动淘汰),惰性过期(被动淘汰),定期过期。立即过期:每个设置过期时间的key都需要创建一个定时器,到过期时间就会立即清除。该策略可以立即清除过期的数据,对内存很友好;但是会占用大量的CPU资源去处理过期的数据,从而影响缓存的响应时间和吞吐量。惰性过期:只有当访问一个key时,才会判断该key是否已过期,过期则清除。该策略可以最大化地节省CPU资源,却对内存非常不友好。极端情况可能出现大量的过期key没有再次被访问,从而不会被清除,占用大量内存。原创 2020-11-27 17:05:30 · 175 阅读 · 0 评论 -
redis基础篇——Lua脚本
Lua脚本Lua是一种轻量级脚本语言,它是用C语言编写的,跟数据的存储过程有点类似。使用Lua脚本来执行Redis命令的好处:1、一次发送多个命令,减少网络开销。2,Redis会将整个脚本作为一个整体执行,不会被其他请求打断,保持原子性。3、对于复杂的组合命令,我们可以放在文件中,可以实现命令复用。语法格式redis> eval lua-script key-num [key1 key2 key3 ...] [value1 value2 values3 ...]eval代原创 2020-11-27 16:06:37 · 1407 阅读 · 0 评论 -
redis基础篇——发布订阅模式、事务(没多大用)
发布订阅模式通过队列的rpush和blpop可以实现消息队列,没有任何元素可以弹出的时候,连接会被阻塞。但是基于list实现的消息队列,不支持一对多的消息分发,相当于只有一个消费者。如果要实现一对多的消息分发就需要发布订阅模式。消息的生产者和消费者是不同的客户端,连接到同一个Redis的服务。Redis的模型中是通过channel(频道)把生产者和消费者关联起来的。订阅者可以订阅一个或者多个channel,消息的发布者可以给指定的channel发布消息。只要有消息到达了channel,所有订阅了这原创 2020-11-27 11:00:26 · 232 阅读 · 0 评论 -
redis基础篇——redis常用的数据类型
数据模型Redis的存储我们叫做key-value存储,或者叫做字典结构。key的最大长度限制是512M,值的限制不同,有的是用长度限制的,有的是用个数限制的。Redis是KV的数据库,Key-Value我们一般会用什么数据结构来存储它?哈希表。Redis的最外层确实是通过hashtable实现的,在Redis里面,这个哈希表怎么实现呢?我们看一下C语言的源码每个键值对都是一个dictEntry,通过指针指向key的存储结构和value的存储结构,而且next存储了指向下一个键值对的指针。typede原创 2020-11-26 18:39:40 · 530 阅读 · 1 评论 -
redis基础篇——redis的基本命令
redis-cli -p 5566 -a password:登录redis-cli -a password shutdown :关闭redis./redis_init_script stop :关闭redisauth pwd :输入密码redis-cli -a password ping :查看是否存活exists key:检查key是否存在ksys *4:搜索某关键字type key:返回一个key的类型set key value:设置一个键的值get key :获得键值del .原创 2020-11-12 11:58:02 · 369 阅读 · 0 评论 -
redis基础篇——redis的安装和配置
redis的安装一、redis官网:https://redis.io,下载安装包,示例以6.0.9版本为主。二、把安装包上传到linux并解压tar -zxvf redis-6.0.9.tar.gz 解压后三、安装依赖,即安装gcc编译环境,如果已经安装过了,那么就是 nothing to do。yum install gcc-c++四、进入解压目录redis-6.0.9,进行编译make此时我遇到了一个小插曲,编译之后,报了一堆的错误。原创 2020-11-12 11:41:15 · 264 阅读 · 0 评论