Redis
文章平均质量分 83
跟着黑马继续学Redis !
课程分为四大篇章,涵盖了Redis的各种数据结构和命令,Redis的各种常见Java客户端的应用和最佳实践。还有Redis在企业中的应用方案。
https://www.bilibili.com/video/BV1cr4y1671t/
Masked5
These violent delights have violent ends
And in their triumph die, like fire and powder,
Which, as they kiss, consume.
展开
-
Redis内存淘汰策略(过期策略 淘汰策略)
RedisKey的TTL记录方式:在RedisDB中通过一个Dict记录每个Key的TTL时间过期key的删除策略:惰性清理:每次查找key时判断是否过期,如果过期则删除定期清理:定期抽样部分key,判断是否过期,如果过期则删除。定期清理的两种模式:SLOW模式执行频率默认为10,每次不超过25msFAST模式执行频率不固定,但两次间隔不低于2ms,每次耗时不超过1ms。转载 2023-05-05 22:28:36 · 89 阅读 · 0 评论 -
基于Socket自定义Redis客户端(建立连接 发送请求 解析结果)
Redis支持TCP通信,因此我们可以使用Socket来模拟客户端,与Redis服务端建立连接。转载 2023-05-05 21:55:15 · 319 阅读 · 0 评论 -
Redis通信协议——RESP协议
但目前,默认使用的依然是RESP2协议,也是我们要学习的协议版本(以下简称RESP)。因此客户端发送命令的格式、服务端响应结果的格式必须有一个规范,这个规范就是通信协议。 如果大小为0,则代表空字符串:“$0\r\n\r\n”客户端(client)向服务端(server)发送一条命令。 如果大小为-1,则代表不存在:“$-1\r\n”服务端解析并执行命令,返回响应结果给客户端。转载 2023-05-05 21:50:18 · 204 阅读 · 0 评论 -
Redis网络模型(IO多路复用+事件派发机制)
服务器大多都采用Linux系统,这里我们以Linux为例来讲解:ubuntu和Centos 都是Linux的发行版,发行版可以看成对linux包了一层壳,任何Linux发行版,其系统内核都是Linux。我们的应用都需要通过Linux内核与硬件交互用户的应用,比如redis,mysql等其实是没有办法去执行访问我们操作系统的硬件的,所以我们可以通过发行版的这个壳子去访问内核,再通过内核去访问计算机硬件计算机硬件包括,如cpu,内存,网卡等等,内核(通过寻址空间)可以操作硬件的,但是内核需要不同设备的驱动,有了原创 2023-05-05 21:25:07 · 233 阅读 · 0 评论 -
Redis五种数据结构(String List Set ZSet Hash)详解
比如字符串”32”,如果按照字符数组来解释,它包含两个字符,它们的ASCII码分别是0x33和0x32。而value则比较复杂,为了在同⼀个dict内能够存储不同类型的value,这就需要⼀个通⽤的数据结构,这个通用的数据结构就是robj,全名是redisObject。String的内部存储结构⼀般是SDS(Simple Dynamic String,可以动态扩展内存),但是如果⼀个String类型的value的值是数字,那么Redis内部会把它转成long类型来存储,从⽽减少内存的使用。转载 2023-05-05 19:47:46 · 1027 阅读 · 0 评论 -
Redis几种底层数据结构(SDS IntSet Dict ZipList QuickList SkipList)
而value则比较复杂,为了在同⼀个dict内能够存储不同类型的value,这就需要⼀个通⽤的数据结构,这个通用的数据结构就是robj,全名是redisObject。从Redis的使用者的角度来看,⼀个Redis节点包含多个database(非cluster模式下默认是16个,cluster模式下只能是1个),而一个database维护了从key space到object space的映射关系。我们存储k1=v1,假设k1的哈希值h =1,则1&3 =1,因此k1=v1要存储到数组角标1位置。转载 2023-05-05 17:22:34 · 233 阅读 · 0 评论 -
Redis批处理优化
第二种方案:串行slot,简单来说,就是执行前,客户端先计算一下对应的key的slot,一样slot的key就放到一个组里边,不同的,就放到不同的组里边,然后对每个组执行pipeline的批处理,他就能串行执行各个组的命令,这种做法比第一种方法耗时要少,但是缺点呢,相对来说复杂一点,所以这种方案还需要优化一下。第三种方案:并行slot,相较于第二种方案,在分组完成后串行执行,第三种方案,就变成了并行执行各个命令,所以他的耗时就非常短,但是实现呢,也更加复杂。这个时候,我们可以找到4种解决方案。转载 2023-05-04 22:20:15 · 61 阅读 · 0 评论 -
Redis键值设计最佳实践
Key的最佳实践固定格式:[业务名]:[数据名]:[id]足够简短:不超过44字节不包含特殊字符Value的最佳实践:合理的拆分数据,拒绝BigKey选择合适数据结构Hash结构的entry数量不要超过1000设置合理的超时时间。转载 2023-05-04 22:17:52 · 109 阅读 · 0 评论 -
Redis服务器端集群优化-集群还是主从?
有关这个问题咱们已经探讨过了,当我们使用批处理的命令时,redis要求我们的key必须落在相同的slot上,然后大量的key同时操作时,是无法完成的,所以客户端必须要对这样的数据进行处理,这些方案我们之前已经探讨过了,所以不再这个地方赘述了。集群中节点越多,集群状态信息数据量也越大,10个节点的相关信息可能达到1kb,此时每次集群互通需要的带宽会非常高,这样会导致集群中大量的带宽都会被ping信息所占用,这是一个非常可怕的问题,所以我们需要去解决这样的问题。转载 2023-05-04 22:14:31 · 79 阅读 · 0 评论 -
Redis内存划分和内存配置
客户端缓冲区:指的就是我们发送命令时,客户端用来缓存命令的一个缓冲区,也就是我们向redis输入数据的输入端缓冲区和redis向客户端返回数据的响应缓存区,输入缓冲区最大1G且不能设置,所以这一块我们根本不用担心,如果超过了这个空间,redis会直接断开,因为本来此时此刻就代表着redis处理不过来了。一般包括客户端缓冲区、AOF缓冲区、复制缓冲区等。2、增加我们带宽的大小,避免我们出现大量数据从而直接超过了redis的承受能力。以上复制缓冲区和AOF缓冲区 不会有问题,最关键就是客户端缓冲区的问题。转载 2023-05-04 21:39:57 · 552 阅读 · 0 评论 -
Redis安全配置建议
为什么会出现不需要密码也能够登录呢,主要是Redis考虑到每次登录都比较麻烦,所以Redis就有一种ssh免秘钥登录的方式,生成一对公钥和私钥,私钥放在本地,公钥放在redis端,当我们登录时服务器,再登录时候,他会去解析公钥和私钥,如果没有问题,则不需要利用redis的登录也能访问,这种做法本身也很常见,但是这里有一个前提,前提就是公钥必须保存在服务器上,才行,但是Redis的漏洞在于在不登录的情况下,也能把秘钥送到Linux服务器,从而产生漏洞。我们可以采用如下几种方案。转载 2023-05-04 21:21:31 · 150 阅读 · 0 评论 -
Redis慢查询相关命令
并不是很慢的查询才是慢查询,而是:在Redis执行时耗时超过某个阈值的命令,称为慢查询。慢查询的危害:由于Redis是单线程的,所以当客户端发出指令后,他们都会进入到redis底层的queue来执行,如果此时有一些慢查询的数据,就会导致大量请求阻塞,从而引起报错,所以我们需要解决慢查询问题。:慢查询阈值,单位是微秒。默认是10000,建议1000:慢查询日志(本质是一个队列)的长度。默认是128,建议1000config set。转载 2023-05-04 20:47:10 · 452 阅读 · 0 评论 -
Redis分片集群搭建(散列插槽、集群伸缩、故障转移、RedisTemplate配置)
例如:key是num,那么就根据num计算,如果是{itcast}num,则根据itcast计算。利用cluster failover命令可以手动让集群中的某个master宕机,切换到执行cluster failover命令的这个slave节点,实现无感知的数据迁移。如图,在7001这个节点执行set a 1时,对a做hash运算,对16384取余,得到的结果是15495,因此要存储到103节点。时,对num做hash运算,对16384取余,得到的结果是2765,因此需要切换到7001节点.转载 2023-05-02 16:25:30 · 684 阅读 · 0 评论 -
Redis哨兵集群搭建 & RedisTemplate集成哨兵机制
在Sentinel集群监管下的Redis主从集群,其节点会因为自动故障转移而发生变化,Redis的客户端必须感知这种变化,及时更新连接信息。书接上回, 我们搭建了Redis主从同步, slave节点宕机后可以找master节点同步数据, 那master节点宕机怎么办?要在同一台虚拟机开启3个实例,必须准备三份不同的配置文件和目录,配置文件所在目录也就是工作目录。这里我们搭建一个三节点形成的Sentinel集群,来监管之前的Redis主从集群。Sentinel如何判断一个redis实例是否健康?转载 2023-05-01 21:09:58 · 481 阅读 · 0 评论 -
Redis主从同步搭建、主从同步原理(全量同步、增量同步、repl_backlog)、主从同步优化
因为slave原本也是一个master,有自己的replid和offset,当第一次变成slave,与master建立连接时,发送的replid和offset是自己的replid和offset。不过,旧的数据只要是绿色的,说明是已经被同步到slave的数据,即便被覆盖了也没什么影响。master判断发现slave发送来的replid与自己的不一致,说明这是一个全新的slave,就知道要做全量同步了。单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,就需要搭建主从集群,实现读写分离。转载 2023-05-01 16:22:41 · 327 阅读 · 0 评论 -
Redis的两种持久化方案 RDB & AOF
就是在重写时,Redis根据数据库的现状创建一个新的AOF⽂件,也就是说,读取 数据库中的所有键值对,然后对每⼀个键值对⽤⼀条命令记录它的写入。所谓的“多变一”,也就 是说,旧日志文件中的多条命令,在重写后的新日志中变成了一条命令。因为是记录命令,AOF文件会比RDB文件大的多。通过执行bgrewriteaof命令,可以让AOF文件执行重写功能,用最少的命令达到相同效果。Redis处理的每一个写命令都会记录在AOF文件,可以看做是命令日志文件。RDB会在什么时候执行?文件,再次运行时,数据就会自动恢复。原创 2023-05-01 11:32:30 · 1123 阅读 · 1 评论 -
Redis的Java客户端Jedis Lettuce SpringDataRedis
RedisTemplate可以接收任意Object作为值写入Redis:只不过写入前会把Object序列化为字节形式,默认是采用JDK序列化,得到的结果是这样的:可读性差内存占用较大// 创建RedisTemplate对象 RedisTemplate < String , Object > template = new RedisTemplate < >();// 设置连接工厂 template . setConnectionFactory(connectionFactory);转载 2023-04-27 12:07:50 · 233 阅读 · 0 评论 -
Redis基础数据结构常见命令
Redis的SortedSet是一个可排序的set集合,与Java中的TreeSet有些类似,但底层数据结构却差别很大。SortedSet中的每一个元素都带有一个score属性,可以基于score属性对元素排序,底层的实现是一个跳表(SkipList)加 hash表。例如,需要存储用户、商品信息到redis,有一个用户id是1,有一个商品id恰好也是1,此时如果使用id作为key,那就会冲突了,该怎么办?Hash类型,也叫散列,其value是一个无序字典,类似于Java中的HashMap结构。转载 2023-04-26 21:56:35 · 187 阅读 · 0 评论 -
CentOS 7安装Redis详细说明
大多数企业都是基于Linux服务器来部署项目,而且Redis官方也没有提供Windows版本的安装包。因此课程中我们会基于Linux系统来安装Redis.此处选择的Linux版本为CentOS 7.Redis的官方网站地址:https://redis.io/转载 2023-04-26 21:15:59 · 246 阅读 · 0 评论 -
初识NoSQL,关系型数据库与关系型数据库啥关系捏?
存储方式关系型数据库基于磁盘进行存储,会有大量的磁盘IO,对性能有一定影响非关系型数据库,他们的操作更多的是依赖于内存来操作,内存的读写速度会非常快,性能自然会好一些扩展性关系型数据库集群模式一般是主从,主从数据一致,起到数据备份的作用,称为垂直扩展。非关系型数据库可以将数据拆分,存储在不同机器上,可以保存海量数据,解决内存大小有限的问题。称为水平扩展。关系型数据库因为表之间存在关联关系,如果做水平扩展会给数据查询带来很多麻烦。转载 2023-04-26 20:29:37 · 134 阅读 · 0 评论