redis
文章平均质量分 70
redis相关
lovoo
不要抱怨生活,只因你还不够努力!
展开
-
Springboot 定时任务,分布式下幂等性如何解决
在分布式环境下,定时任务的幂等性问题需要考虑多个节点之间的数据一致性和事务处理。一种解决方法是使用分布式锁来保证同一时间只有一个节点能够执行该任务。具体实现可以使用Redis或Zookeeper等分布式协调工具提供的分布式锁功能。另一种解决方法是使用消息队列来保证任务的幂等性。当一个节点执行任务时,先将任务发送到消息队列中,然后等待其他节点确认任务已经执行完毕后再进行后续操作。如果有节点出现故障或者网络异常导致任务未能成功执行,则可以重新发送任务并等待其他节点确认。原创 2023-06-30 10:56:55 · 871 阅读 · 0 评论 -
Redission的RSemaphore信号量有什么作用?
RSemaphore是Redisson基于Redis实现的分布式信号量,用于限制同时访问共享区域的线程数量。与Java的Semaphore相似,RSemaphore也有一个acquire()方法用于获取资源,但在获取资源的顺序上是不可预测的,因此它是一种非公平锁。原创 2023-06-30 10:19:17 · 517 阅读 · 0 评论 -
Springboot 如何自动上传秒杀商品数据到Redis中上架商品
如下图秒杀活动:在这个秒杀活动中,需要自动上架一定时间段的商品,我们如何实现自动上传呢?我们可以通过定时任务来实现的。在秒杀活动开始前,需要将商品信息存储到数据库中,并设置好库存和价格等信息。然后,可以通过定时任务的方式,每天定时从数据库中读取商品信息,并将其上传到秒杀页面上。这样,就可以实现自动上传商品的功能了。原创 2023-06-29 15:20:20 · 744 阅读 · 1 评论 -
Redis 缓存数据库双写不一致怎么处理?
Redis 缓存数据库可能会出现双写不一致的情况,这是因为在进行缓存更新时,同时有多个线程或进程对同一个缓存键进行读写操作,导致了数据的不一致性。具体来说,假设有两个线程 A 和 B 都要对同一个缓存键进行写操作,此时缓存键的值是过期了的,即需要从数据库中读取最新的值,并进行更新。线程 A 开始执行,它首先要从数据库中读取最新的值,然后将其更新到缓存中。在线程 A 执行的过程中,线程 B 也开始了执行,它也要对同一个缓存键进行写操作。原创 2023-06-27 20:57:59 · 1429 阅读 · 0 评论 -
Redis 2023面试5题(七)
Redis缓存穿透是指查询一个不存在的数据,由于Redis中没有缓存数据,所以每次请求都会直接查询数据库,导致缓存失效,严重影响系统性能和稳定性。缓存空对象:在Redis中缓存一个空对象,当查询一个不存在的数据时,先将空对象从缓存中取出,然后再次查询数据库,如果数据库中也没有该数据,则返回空对象。这样可以避免多次查询数据库,同时也可以避免缓存穿透。static {// 连接Redis// 查询数据库// .. .// 将空对象存入缓存} }原创 2023-06-24 22:32:26 · 1280 阅读 · 0 评论 -
Redis 2023面试5题(六)
因为新master的选举需要大于半数的集群master节点同意才能选举成功,奇数个master节点可以在满足选举该条件的基础上节省一个节点,比如三个master节点和四个master节点的集群相比,大家如果都挂了一个master节点都能洗举新master节点,如果都挂了两个master节点都没法选举新master节点了,所以奇数的master节点更多的是。具体来说,当一个线程获取了分布式锁并执行业务逻辑时,如果主Redis实例挂掉了,那么在主从切换过程中,从Redis实例上就不会有该线程持有的锁。原创 2023-06-24 10:24:34 · 1172 阅读 · 0 评论 -
Redis 2023面试5题(五)
需要注意的是,在备份数据时,需要同时备份Redis的配置文件和日志文件等,以便在恢复时可以完全恢复Redis服务器的状态。Redis主从复制风暴是指当Redis主从复制出现故障时,大量的从节点会同时进行主节点复制操作,导致网络带宽和CPU资源被大量占用,引起系统性能下降,甚至导致系统崩溃。需要注意的是,网络抖动的原因可能不是单一的,而是多种因素共同作用的结果。8. 对于大量的从节点复制操作,可以使用Redis Sentinel或Cluster的自动化分片功能,将数据分散到多个节点上,避免单个节点压力过大。原创 2023-06-23 22:34:13 · 1554 阅读 · 0 评论 -
Redis 2023面试5题(四)
注意,虽然bgsave命令是异步的,但在快照创建期间,新的数据写操作可能会被延迟,这取决于你的硬件资源和当时的Redis负载情况。通过同时启用RDB和AOF持久化,Redis可以根据你的需求自动选择使用哪种持久化方式,或者将两种持久化方式结合使用。Redis的RDB持久化是通过快照(Snapshot)的方式来保存数据,即定时将内存中的数据写入到硬盘中,以防止断电等情况下数据的丢失。AOF(Append Only File)持久化是 Redis 的一种持久化方式,它通过记录所有收到的写命令来保存数据。原创 2023-06-22 13:37:48 · 1068 阅读 · 0 评论 -
Redis 2023面试5题(三)
在混合持久化模式下,Redis 会根据配置文件中的规则,将一些常用的数据保存到 RDB 快照文件中,其他的数据则记录到 AOF 文件中。当主节点恢复后,从节点晋升为主节点,此时该节点的数据可能比其他从节点的数据更旧,导致其他从节点在同步数据时可能会出现缓存雪崩的情况。slave 自己是不会清理过期 key,当一个 key 要过期时,master 会先清理删除它,之后 master 向 slave 发送一个 DEL 命令,告知 slave 也删除这个 key,以此达到主从库的数据一致性。原创 2023-06-21 22:35:36 · 861 阅读 · 0 评论 -
Redis 2023面试5题(二)
如果一个key没有被设置过期时间,但是已经很久没有被访问了,那么Redis会将其标记为“过期”,并在下一次垃圾回收时将其删除。需要注意的是,如果你设置了太多的键,而且这些键的过期时间很短,那么 Redis 的内存占用可能会迅速增加,从而导致性能下降或者宕机。总的来说,删除Key的操作在Redis中是一个相对较快的操作,不会阻塞其他操作。但是,在某些情况下,它可能会对其他操作产生影响,因此需要仔细考虑在使用Redis时如何处理删除Key的操作。然而,在某些情况下,删除Key可能会阻塞Redis。原创 2023-06-20 22:38:38 · 1234 阅读 · 0 评论 -
Redis 2023面试5题(一)
当进行插入或删除操作时,Redis会根据元素的值计算出该元素在跳表中的位置,然后将元素插入到相应的级别中。Redis的底层使用跳表(SkipList)来存储数据,跳表是一种基于链表的数据结构,可以在链表的基础上增加多级索引,从而提高查询效率。需要注意的是,Redis的跳表实现并不是严格按照SkipList的标准算法实现的,而是在SkipList的基础上进行了一些优化和调整,例如使用双向链表代替了单向链表,使用哈希表代替了每个节点都有的游标等。原创 2023-06-19 22:49:25 · 1221 阅读 · 0 评论 -
Redis 批处理优化
第二种方案:串行slot,简单来说,就是执行前,客户端先计算一下对应的key的slot,一样slot的key就放到一个组里边,不同的,就放到不同的组里边,然后对每个组执行pipeline的批处理,他就能串行执行各个组的命令,这种做法比第一种方法耗时要少,但是缺点呢,相对来说复杂一点,所以这种方案还需要优化一下。第三种方案:并行slot,相较于第二种方案,在分组完成后串行执行,第三种方案,就变成了并行执行各个命令,所以他的耗时就非常短,但是实现呢,也更加复杂。在批处理时,可以使用管道技术来提高效率。原创 2023-06-18 09:48:20 · 1839 阅读 · 0 评论 -
什么是Redis的BigKey,如何处理BigKey?
Key本身的数据量过大:一个String类型的Key,它的值为5 MB。Key中的成员数过多:一个ZSET类型的Key,它的成员数量为10,000个。Key中成员的数据量过大:一个Hash类型的Key,它的成员数量虽然只有1,000个但这些成员的Value(值)总大小为100 MB。原创 2023-06-15 22:25:55 · 2441 阅读 · 0 评论 -
Redis搭建分片集群
Redis分片集群是用于将Redis的数据分布在多个Redis节点上的分布式系统。通过分片集群,可以将数据分成多个部分,并将每个部分存储在不同的节点上,以便实现Redis的高可用性和高性能。原创 2023-06-08 11:54:10 · 3106 阅读 · 1 评论 -
Redis主从集群与哨兵集群
如果一个哨兵实例出现故障,其他哨兵实例仍然可以监控 Redis 实例的状态,并执行故障转移操作。如果哨兵实例无法与 Redis 实例通信,则哨兵实例会认为该实例已经出现故障,并开始执行故障转移操作。故障转移操作包括将故障实例的故障状态通知其他哨兵实例,并选举出一个新的主节点来接管故障实例的职责。一旦新的主节点被选举出来,所有哨兵实例都会将新的主节点添加到自己的配置中,并停止向故障实例发送 PING 命令。要在同一台虚拟机开启3个实例,必须准备三份不同的配置文件和目录,配置文件所在目录也就是工作目录。原创 2023-06-06 21:37:29 · 1299 阅读 · 2 评论 -
使用Redis的HyperLogLog进行海量数据统计
Redis的HyperLogLog(HyperLogLog)是一种用于估算集合中不重复元素数量的数据结构。它是Redis的一个流行功能,经常用于处理大型数据集的基数估计(即不重复元素的数量)。HyperLogLog的关键思想是使用一段随机二进制码序列的长度来估计输入集合中不重复元素数量的近似值。散列(Hash):将每个元素转换为4字节的哈希值。这是通过将元素的每个比特位都转换为0或1,然后对2的幂进行取模来实现的。这个哈希值用于确定该元素在HyperLogLog中的位置。原创 2023-06-04 22:06:00 · 694 阅读 · 0 评论 -
Redis GEO功能详细介绍与实战
Redis的Geo功能主要用于存储地理位置信息,并对其进行操作。该功能在Redis 3.2版本新增。geoadd:添加地理位置的坐标;geopos:获取地理位置的坐标;geodist:计算两个位置之间的距离;georadius:根据用户给定的经纬度坐标来获取指定范围内的地理位置集合;georadiusbymember:根据储存在位置集合里面的某个地点获取指定范围内的地理位置集合;geohash:返回一个或多个位置对象的geohash值。原创 2023-06-03 21:33:00 · 2303 阅读 · 1 评论 -
使用Redis的zset集合实现小程序的滚动分页
其中,ZRangeArgs构造函数中的参数表示从集合的起始位置开始返回文档ID,lastDocId表示只返回大于lastDocId且score值小于当前时间戳的文档ID,86400000L表示一天的毫秒数,表示向前滚动一页。原创 2023-06-03 11:16:46 · 1363 阅读 · 0 评论 -
什么是Redission可重入锁,其实现原理是什么?
Redission是一个可重入锁,它可以在分布式系统中用于实现互斥锁。这种锁可以允许多个线程同时获取锁,但在任何给定时间只有一个线程可以执行受保护的代码块。Redission锁提供了一种简单的方法来保证在分布式系统中的互斥性,同时支持可重入性。这意味着一个线程可以在获取锁之后再次获取同一个锁,而不需要等待锁释放。Redission锁使用lua脚本来实现加锁和解锁操作。当一个线程想要获取锁时,它会发送一个lua脚本到redis服务器。原创 2023-05-28 15:39:33 · 2308 阅读 · 0 评论 -
缓存穿透的解决办法有哪些?
缓存穿透是指查询一个不存在的数据,由于缓存和数据库都没有命中,导致每次请求都需要从数据库中读取数据,增加了数据库的负担。解决缓存穿透的方法有以下几种:布隆过滤器(Bloom Filter):使用位数组来表示一个集合,并通过哈希函数将元素映射到数组上。在查询数据时,先判断该数据是否存在于布隆过滤器中,如果存在则直接返回结果,否则再从数据库中查询数据。缓存空对象:在缓存中存储空对象,当查询一个不存在的数据时,直接返回空对象,而不是默认值或者错误信息。原创 2023-05-21 10:39:04 · 2166 阅读 · 1 评论 -
使用Redis实现短信验证码登录功能
方便快捷:用户无需记忆复杂的用户名和密码,只需通过短信验证码就可以快速登录。安全性高:短信验证码通常是由运营商或第三方服务提供商发送的,具有较高的安全性。防止恶意攻击:通过短信验证码登录可以有效防止恶意攻击,例如密码被盗、网站挂马等情况。方便记忆:短信验证码可以使用户更方便地记忆密码,不用担心密码被遗忘。兼容性好:短信验证码适用于各种类型的网站和应用程序,可以在不同的设备上使用。综上所述,短信验证码登录是一种安全、方便、快捷的登录方式,有助于提高用户的使用体验。原创 2023-05-20 11:15:42 · 1164 阅读 · 0 评论 -
什么是Redisson分布式锁?有什么作用?
如果你的简历中写了做过电商项目,那么面试官基本都会从SpringBoot、SpringCloud以及Dubbo这些微服务架构涉及的知识问起,然后深入到问什么是分布事务、分布式锁以及分布式缓存等内容。这篇文章主要聊聊什么是Redisson分布式锁,Redisson分布式锁的实现原理以及运用示例。原创 2023-05-17 16:36:53 · 1152 阅读 · 0 评论 -
Redis常见命令有哪些?怎么使用?
在了解Redis命令之前,我们要先了解Redis的数据结构,Redis是NoSQL数据库,采用了json存储模式,比MySQL等关系数据库更易于扩展,拥有丰富的数据类型,分基本类型与特殊类型。基本类型包括:String、Hash、List、Set、SortedSet;特殊类型包括:GEO、BitMap、HyperLog等。原创 2023-05-11 21:42:54 · 627 阅读 · 0 评论 -
单机版部署Redis详细教程
大多数企业都是基于Linux服务器来部署项目,而且Redis官方也没有提供Windows版本的安装包。因此课程中我们会基于Linux系统来安装Redis.此处选择的Linux版本为CentOS 7.Redis的官方网站地址:https://redis.io/原创 2023-05-06 19:50:13 · 1536 阅读 · 0 评论 -
Centos7全面安装Redis
一、安装gcc依赖由于 redis 是用 C 语言开发,安装之前必先确认是否安装 gcc 环境(gcc -v),如果没有安装,执行以下命令进行安装[root@localhost local]# yum install -y gcc 二、下载并解压安装包[root@localhost local]# wget http://download.redis.io/releases/redis-5.0.3.tar.gz[root@localhost local]# tar -zxvf redis-5.原创 2021-10-29 14:02:11 · 143 阅读 · 0 评论 -
页面重复提交数据时产生的幂不等性问题及解决措施
一、什么是幂等性接口幂等性就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因 为多次点击而产生了副作用;比如说支付场景,用户购买了商品支付扣款成功,但是返回结 果的时候网络异常,此时钱已经扣了,用户再次点击按钮,此时会进行第二次扣款,返回结 果成功,用户查询余额返发现多扣钱了,流水记录也变成了两条...,这就没有保证接口 的幂等性。二、哪些情况需要防止用户多次点击按钮 用户页面回退再次提交微服务互相调用,由于网络问题,导致请求失败。feign 触发重试机制其他业务情况三原创 2021-07-12 17:28:22 · 447 阅读 · 0 评论 -
使用SpringRedisSession改变Session的作用域
前言在微服务中及分布式部署的项目中,如果使用HttpSession,会发生session不能共享的问题,如auth.mall.com中login方法中设置的session中mall.com的主页中不能访问,因为子域名的限制;一台服务器上创建的session在另一台服务器不能访问。虽然可通过tomcat设置session同步,但这样做内存消耗非常大,对于大型的项目不合适;我们也可通过ip_hash固定访问,但不容易扩展,目前最好的方法就是将session存储到redis中,每台服务器都可直接调用,保证了se原创 2021-07-06 22:29:47 · 401 阅读 · 0 评论 -
将Spring自带的RedisCache保存的值改为json格式
前言为了方面在redis管理器察看保存的缓存数据,我们要把原来序列化的数据改为json格式。在springboot项目中配置代码:@EnableConfigurationProperties(CacheProperties.class)@Configuration@EnableCachingpublic class MyCacheConfig { // @Autowired // public CacheProperties cacheProperties; /**原创 2021-06-29 18:31:35 · 823 阅读 · 2 评论 -
Redis信号量Semaphore解决停车位问题
前言在生活中有这样的问题,当你开车进入车库时,发现没车位怎么办,只有等待别人开走留下空车位,当然如果有空车位,我们就可直接停进去,此时车位数就会减少,Semaphore信号量就是实现这种现象的一个功能。代码 @ResponseBody @GetMapping("/park") public String park() throws InterruptedException { //获得信号量 RSemaphore park = redissonClien原创 2021-06-29 14:27:28 · 787 阅读 · 0 评论 -
Redis闭锁CountDownLatch
前言闭锁简言之就是一个学校的人全部走完了,才关上大门。在Redis框加提供的闭锁是CountDownLatch,它同步工具类,允许一个或多个线程一直等待,直到其他线程执行完后再执行。例如,应用程序的主线程希望在负责启动框架服务的线程已经启动所有框架服务之后执行。代码实例 @ResponseBody @GetMapping("/lockDoor") public String lockDoor() throws InterruptedException { //获得锁原创 2021-06-29 14:07:01 · 481 阅读 · 0 评论 -
Redis读写锁
前言读写锁的好处就是能帮助客户读到的数据一定是最新的,写锁是排他锁,而读锁是一个共享锁,如果写锁一直存在,那么读取数据就要一直等待,直到写入数据完成才能看到,保证了数据的一致性。代码示例在这个例子中,使用redis在writeLock()写数据,然后在readLock()函数中读出来@ResponseBody @GetMapping("/writeLock") public String writeLock(){ //获得锁 RReadWriteLoc原创 2021-06-29 13:46:26 · 3460 阅读 · 0 评论 -
Redission 最常用的可重入锁(Reentrant Lock)
前言在分布式项目中,如果采用本地锁synchronized,只能锁住当前服务器的资源,对于其它服务器的资源无效,如果有100万个周时访问同一接口的数据,还是会有相当一部份会去读取数据库,造成数据库的压力,而redission提供了一个相当完美的锁机制,解决了分布式项目的缓存问题。流程图:安装<dependency> <groupId>org.redisson</groupId> <artifactId>原创 2021-06-29 11:10:52 · 1089 阅读 · 0 评论 -
Redis缓存穿透、缓存击穿、缓存雪崩区别和解决方案
一、缓存处理流程前台请求,后台先从缓存中取数据,取到直接返回结果,取不到时从数据库中取,数据库取到更新缓存,并返回结果,数据库也没取到,那直接返回空结果。二、缓存穿透描述:缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,如发起为id为“-1”的数据或id为特别大不存在的数据。这时的用户很可能是攻击者,攻击会导致数据库压力过大。解决方案:接口层增加校验,如用户鉴权校验,id做基础校验,id<=0的直接拦截;从缓存取不到的数据,在数据库中也没有取到,这时也可以将key-valu原创 2021-06-28 18:06:27 · 71 阅读 · 0 评论 -
Redis就这么简单,看这篇就全懂了
前言Redis相信很多读者已经经常听说或者在网络上常看见,但在实际项目中缺很少使用实战过,也不清楚倒底能为项目带来哪些效益的提升,本篇就从头到尾把Redis的安装、搭建及使用、作用等内容讲述明白!一、Redis是什么?Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。它支持字符串、哈希表、列表、集合、有序集合,位图,hyperloglogs等数据类型。内置复制、Lua脚本、LRU收回、事务以及不同级别磁盘持久化功能,同时通过Redis Sentinel原创 2021-06-11 11:58:13 · 168 阅读 · 2 评论 -
Redis工具类
package com.wys.mall.common.redis;import com.google.gson.Gson;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.dao.DataAccessException;import org.springframework.data.redis.connection.RedisConnection;import org原创 2021-04-29 22:43:18 · 59 阅读 · 0 评论 -
Redis模版与缓存配置
说明:RedisTemplate模版主要存储的是Object对象,所以在存入前必须将key、value以及hash相关的都必须序列化,@Configuration@EnableCachingpublic class RedisConfig extends CachingConfigurerSupport { @Bean public CacheManager cacheManager(RedisConnectionFactory factory) { RedisSer原创 2021-04-29 22:30:18 · 71 阅读 · 0 评论 -
使用Redis和token实现保持登录状态
1、登录后存储用户对象的redis函数 @Autowired private StringRedisTemplate redisTemplate; @PostMapping(value = "/login") public R login(UserInfo userInfo){ String uuid = Utils.getUUID(); String value = JSON.toJSONString(userInfo); str原创 2021-04-29 09:48:08 · 1410 阅读 · 0 评论 -
Redis命令大全
1、连接操作命令redis-cliquit:关闭连接(connection)auth:简单密码认证help cmd: 查看cmd帮助,例如:help quit2、持久化save:将数据同步保存到磁盘bgsave:将数据异步保存到磁盘lastsave:返回上次成功将数据保存到磁盘的Unix时戳shundown:将数据同步保存到磁盘,然后关闭服务3、远程服务控制info:提供服务器的信息和统计monitor:实时转储收到的请求slaveof:改变复制策略设置config:在运行时配原创 2021-04-29 09:12:02 · 3956 阅读 · 0 评论