Redis
文章平均质量分 74
Fairy要carry
欲戴其冠,必承其重
展开
-
RedisTemplate重写的一些模板
这样更切合业务并且代码操作更加简单,SpringBoot官方的设置也是当你手动注入一个RedisTemplate的Bean时,优先使用你手动注入的RedisTemplate。(如使用第二种的话,我需要。要求value值类型也为String,导致数据操作步骤繁琐,较为影响运行效率。所以我们一般重写一RedisTemplate,影响代码效率,存储起来也非常麻烦)这两种或多或少都有一些问题;对key所采用的序列化方式是。在存入Redis数据库时会被。原创 2024-02-15 21:22:17 · 596 阅读 · 0 评论 -
RedLock
1.当我们三个节点或者多个节点是主从架构时,还是会出现丢数据的情况,比如主+key,写成功了,但是主从同步,从机还没拿到数据主机就挂了,这时候从机上去没有key,又可以拿到锁了。2.当我们AOF持久化时,假如说1s一次持久化可能出现宕机情况,那么1s内如果有加锁就会丢失,那么下一次请求又能加锁。当客户端2来的时候进来向我们的服务端发送setnx命令,此时3个节点已经有两个节点被锁了,所以加锁失败;会导致所有的节点进行执行,当有半数以上的redis节点加锁成功才算成功;原创 2022-09-17 02:18:12 · 184 阅读 · 0 评论 -
Redis分布式锁的实现
1)加锁和解锁都用Lua脚本,脚本中判断各种可能的逻辑(有过期时间的设置,判断是不是自己的锁,是否是重入等),也保证了判断和加锁的原子性 解决上面讲的问题一二三四。总结:所谓的分布式锁,就是用一个第三方的数据库,所有线程(包括同一个进程中的和不同进程中的)都访问的是这个数据库(这对于所有线程就是唯一的),使用逻辑锁就可以使各个线程之间不会出现并发问题。解锁用 redisTemplate.opsForValue().delete("lock");原创 2022-09-16 01:13:09 · 2565 阅读 · 0 评论 -
对Redis布隆过滤器的实现
非常关键在这里,计算key的hash值后,然后^key的hash>>>16,目的是保留key的特点,保证散列均匀,因为size-1-i(像hashMap默认size为16,那么15对应的二进制为1111,那么就只能与hash的低位四个进行运算,那么保留特点就很少),所以>>>16保留了key hash低位16的特点,然后再^key.hashCode()->保证了高位16的特点(这样就保证了key的特点)计算key的hash(利用辅助hash数组对key进行多次hash),得到位置index后放入数组。原创 2022-09-07 10:12:54 · 482 阅读 · 0 评论 -
Redis布隆过滤器
解决二:将十亿个号码存入内存中,比如Redis缓存中,这里我们算一下占用内存大小:10亿*8字节=8GB,通过内存查询,准确性和速度都有了,但是大约8gb的内存空间,挺浪费内存空间的;我们知道"b"的二进制表示为0110 0010,我们将第7位(从0开始)设置为1,那0110 0011 表示的就是字符“c”,所以最后的字符 “big”变成了“cig”;比如,下图hash1(key)=1,那么在第2个格子将0变为1(数组是从0开始计数的),hash2(key)=7,那么将第8个格子置位1,依次类推;转载 2022-09-06 22:06:59 · 591 阅读 · 0 评论 -
Redis的各种部署
1.首先tar解压redis——>2.进入redis解压后的目录,利用make进行编译——>3.利用make install,默认会将redis编译好的文件放到/usr/local/bin下——>4.将redis未编译的文件也就是解压的文件目录,将配置文件redis.conf中的daemon no修改为yes,并且复制一份到其他目录/opt下——>5.最后进入编译好的文件中redis-server /opt/redis.conf ——>6.redis-cli启动完毕。分片集群搭建(无中心化)原创 2022-09-06 19:33:37 · 621 阅读 · 0 评论 -
深入Redis的切片
在客户端收到关于 槽 i 的 ASK 错误之后,客户端只会在接下来的一次命令请求中将关于 槽 i 的命令请求发送到 ASK 错误指向的节点,但是 ,如果客户端再次请求 槽 i 中的数据,它还是会给原来负责 槽 i 的节点发送请求。那么就不是一个环,像hash(key)%3这样,就会因为添加一个redis实例到集群中——>导致redis集群中每一个实例都会发生移动,因为节点数量变了,那么切片规则就会发生改变,每个节点的插槽就会改变,这样非常影响效率。原创 2022-09-06 11:13:12 · 553 阅读 · 0 评论 -
Redis缓存淘汰策略
(37条消息) Redis 缓存有哪些淘汰策略?_秃头大魔王_的博客-CSDN博客_redis 淘汰策略有哪些?(37条消息) LRU 和LFU 算法简单对比_萝卜头LJW的博客-CSDN博客转载 2022-09-06 01:25:51 · 76 阅读 · 0 评论 -
Redis安装
(37条消息) Linux下tar命令解压到指定的目录_段刘昌的博客-CSDN博客_tar解压到指定目录下(37条消息) Redis安装教程(超详细)_老子大威天龙的博客-CSDN博客_redis安装转载 2022-09-06 01:01:53 · 84 阅读 · 0 评论 -
Redis面试
大多数情况下,Redis使用简单字符串SDS作为字符串的表示,相对于C语言字符串,SDS具有常数复杂度获取字符串长度,杜绝了缓存区的溢出,减少了修改字符串长度时所需的内存重分配次数,以及二进制安全能存储各种类型的文件,并且还兼容部分C函数。通过为链表设置不同类型的特定函数,Redis链表可以保存各种不同类型的值,除了用作列表键,还在发布与订阅、慢查询、监视器等方面发挥作用(后面会介绍)。.........原创 2022-08-17 00:29:26 · 398 阅读 · 0 评论 -
缓存同步-Canal
场景:缓存不是设置了有效期吗,说明在有效期范围内数据是一直在的,那么当数据库中的数据发送改变,那么缓存还是之前的,就会造成数据不一致——>尤其在高并发场景下,如果对一个数据进行修改(比如抢单),就gg了,我踏马抢了还是下单成功,毕竟我是从缓存取值,缓存中是有的对嘛;也就是数据不一致解决:异步通知:我们这里可以参考RabbitMQ,利用消息队列传送消息,缺点:时效性低,发送消息的人是不知道处理是否成功的;SpringAMQP_Fairy要carry的博客-CSDN博客这里我们用的是canal,他相比于mq实现原创 2022-06-18 01:17:51 · 729 阅读 · 0 评论 -
多级缓存实现亿级流量
目录为什么要用多级缓存?JVM进行缓存 进程缓存:实现商品的查询的本地进程缓存Lua语法 Lua中的数据类型 lua语法+函数 lua条件控制 案例:自定义函数,打印table,条件参数为nil打印提示信息 多级缓存实现实践测试 请求参数处理 案例返回商品数据: 我们的nginx怎么去请求到tomcat中呢?我们的请求处理(service)需要编写一个lua脚本在openresty下的lualib中common.lua获取nginx.conf的http请求作出处理响应 Tomcat集群的负载均衡添加red原创 2022-06-17 16:19:49 · 365 阅读 · 0 评论 -
Redis分片集群
目录搭建集群 散列插槽slot将数据保存在同一个redis实例,我们可以用{}指定实例Redis集群伸缩测试添加节点: 故障转移 无痛数据交接(手动故障转移)测试7002重新夺回master:RedisTemplate访问分片集群 首先抛出两个问题:redis对于海量数据储存和高并发写的问题我们可以采用分片集群来解决问题——>意思就是配置多个master,每个master保存不同的数据,这样我们就可以处理高并发写的问题(毕竟多个master嘛,有点像CurrentHashMap中的Segment),有利原创 2022-06-15 16:32:44 · 410 阅读 · 0 评论 -
分布式Redis
数据丢失问题:实现Redis持久化,用备份并发能力问题:单节并发度较低,搭建主从集群,实现读写分离储存能力问题:搭建分片集群,利用插槽机制实现动态扩容故障恢复问题:redis宕机,服务不可用,会出现很多状况,需要自动故障恢复手段,哨兵,实现健康监测和自动恢复RDB被称为Redis数据快照, 记录内存数据到磁盘中,当Redis实例故障重启后,会从磁盘读取快照文件恢复数据;快照文件为RDB文件,默认保存在当前运行目录,有两种保存方式:save,bgsave,Redis挂了也会执行一次RDB;bgsave:创建一原创 2022-06-14 19:37:09 · 238 阅读 · 0 评论 -
Redis实操
(21条消息) RedisTemplate使用最详解(五)--- opsForZSet()_学习中啊哈哈的博客-CSDN博客_opsforzset如何使用RedisTemplate访问Redis数据结构之Zset - 晨子语 - 博客园 (cnblogs.com)转载 2022-06-03 14:17:42 · 284 阅读 · 0 评论 -
分布式锁Redis
目录介绍解决方案:使用redis实现分布式锁问:当有人占用锁资源太久怎么办?问:当我们上锁setnx key 之后,服务器突然挂了怎么办?UUID防止误删锁引入:解决方案:介绍在单体应用中,上锁可以,但是当你是分布式集群中,你其他服务器就识别不到这把锁了(因为JVM不能跨服务器访问),所以我们需要一个叫分布式锁的东西——>让所有服务器都能共享这把锁;解决方案:使用redis实现分布式锁需要释放锁资源,别人才能拿到这个资源;指令..原创 2022-03-13 14:50:45 · 2086 阅读 · 0 评论 -
Redis常见问题-缓存击穿、缓存穿透、雪崩(白中白简单介绍版本)
目录缓存穿透理解解决方案缓存击穿解决方案击穿和穿透的区别缓存雪崩解决方案缓存穿透理解1、首先出现缓存穿透的根本是因为应用服务器压力变大了:当客户端传来巨多请求时,首先先经过redis,看缓存中有没有结果,如果没有就会去数据库进行访问,然而这巨多请求绝大数在缓存中都没有(也就是redis命中率很低很低),所以压力直接给到数据库,导致服务器崩溃;2、另外一种可能就是别人故意发送恶意请求(也就是那些非正常请求),当数量到达一定程度,一直访问数据库,最终...原创 2022-03-13 02:41:04 · 141 阅读 · 0 评论 -
Redis集群(初学)
引出问题原创 2022-03-13 01:59:36 · 2536 阅读 · 0 评论 -
Redis主从复制
配置多从创建myredis文件;将配置文件放到文件夹中;配置一主两从,创建三个配置文件(在三个配置文件写入内容)需要配置内容1、引入公共部分 include /myredis/redis.conf2、文件位置,pid进程号:pidfile /var/run/redis_6379.pid3、端口号4、rdb文件名称我们这里配置三个redis配置文件,并且将它们的服务全部启动然后我们再创建新的几个客户端,分别连上不同端口(6379、6380、6381)的red...原创 2022-03-12 01:20:55 · 2884 阅读 · 0 评论 -
Redis事务和锁机制(乐观锁+秒杀)
Redis事务是一个单独的隔离操作,事务中的所有命令都会序列化,按顺序的执行,就像上述图一样,不会被别的客户端送来的命令请求所打断;目的:串联多个命令,防止别的命令插队;命令Multi(组队阶段):将命令按顺序放到队列中,但是不会执行Exec(执行阶段):提交,类似于commit,提交完后就代表事务已经结束了discard(回滚阶段):如果你觉得执行的命令有问题,可以使用该阶段来放弃组队;discard:代表上述组队已经被放弃了,前面的命令作废...原创 2022-03-10 17:00:12 · 1549 阅读 · 0 评论 -
SpringBoot集成Redis
配置依赖<!-- Redis依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency><!-- .原创 2022-03-09 20:31:12 · 127 阅读 · 1 评论 -
Jedis实操redis
介绍:jedis类似jdbc,在客户端下java代码实现redis操作;1、new一个Jedis实例(ip地址,端口号);2、认证密码一些问题记得在redis.conf里面把默认访问端口给注释,还有那个保护机制设置为no,防火墙需要放行6379端口;package com.atguigu.jedis;import org.junit.jupiter.api.Test;import redis.clients.jedis.Jedis;import java.uti.原创 2022-03-09 19:53:21 · 595 阅读 · 0 评论 -
Redis配置文件+发布订阅+新数据类型
目录Redis配置文件redis.conflimits限制maxclients:maxmemory-policy:Redis的发布和订阅发步频道(接收信息):subscribe channel给频道发送消息:publish channel 消息新数据类型Bitmaps案例:判断用户是否访问过该网站,访问为1,否则为0,我们将id作为用户的偏移量,以区分不同用户(对比上面来看)案例:求两天都访问的用户数量 和 任意一天都访问过用户的数量(类似游戏的月活跃...原创 2022-03-09 00:54:06 · 386 阅读 · 0 评论 -
Redis介绍和五大数据类型指令
web2.0使用NOSQL,涉及负载均衡什么是负载均衡?就是把请求均匀的分给服务器(集群,多个服务器处理请求)问题来了,如果用户认证时,一个服务器认证了,session保存在这个服务器中,但你第二次登录时,如果不在这个服务器上认证怎么办?这时候,就需要考虑NoSql了,我们可以将session放到nosql中,进行认证时,服务器从这里面去调用即可;Nosql还一个特点:它是完全在内存中的,速度很快,数据结构简单与传统数据库的区分传统关系数据库:...原创 2022-03-08 19:53:51 · 555 阅读 · 2 评论