![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Redis
文章平均质量分 84
Archie_java
求知若饥,虚心若愚(stay hungry,stay foolish)
好记性不如烂笔头
展开
-
【Spring boot】RedisTemplate中String、Hash、List设置过期时间
putIfAbsent 指的是如果传入key对应的value已经存在,就返回存在的value,不进行替换。如果不存在,就添加key和value,返回null。如果传入key对应的value已经存在,就返回存在的value,不进行替换。如果不存在,就添加key和value,返回null。下面这两句话,可以实现向Redis插入Hash数据,并且设置整个Hash的过期时间。TimeUnit.MILLISECONDS:毫秒。TimeUnit.MILLISECONDS:微秒。TimeUnit.MINUTES:分。原创 2023-12-12 21:41:30 · 392 阅读 · 0 评论 -
Redis的opsForValue()和boundValueOps()区别
该模板的序列化机制改变起来也很容易,并且Redis模块在org.springframework.data.redis.serializer包中提供了多种可用的实现,详情请参考Serializers。大部分的用户都喜欢用RedisTemplate,它相应的包是org.springframework.data.redis.core。虽然RedisConnection提供接受和返回二进制值(字节数组)的低级方法,但该模板可以处理序列化和连接管理,使得用户不需要处理太多的细节。如果 两者是实现的效果是相同的。原创 2023-12-12 20:56:03 · 648 阅读 · 0 评论 -
详解 Redis 分布式锁的 5 种方案
基于上面本地锁的问题,我们需要一种支持分布式集群环境下的锁:查询 DB 时,只有一个线程能访问,其他线程都需要等待第一个线程释放锁资源后,才能继续执行。生活中的案例:可以把锁看成房门外的一把锁,所有并发线程比作人,他们都想进入房间,房间内只能有一个人进入。当有人进入后,将门反锁,其他人必须等待,直到进去的人出来。我们来看下分布式锁的基本原理,如下图所示:1.前端将 10W 的高并发请求转发给四个题目微服务。2.每个微服务处理 2.5 W 个请求。原创 2023-10-22 21:53:42 · 301 阅读 · 1 评论 -
Redis:内存淘汰机制
近似LRU在执行时,会随机抽取N个key,找出其中最久未被访问的key(通过redisObject中的lru字段计算得出),然后删除这个key。然后再判当前内存是超过限制,如仍超标则继续上述过程。随机抽取的个数N可以通过redis.conf的配置进行修改,默认为5。之所以设置为5,是Redis官方压测后得出的结论****(***传送门***)。。原创 2023-07-08 23:50:49 · 112 阅读 · 0 评论 -
Redis 分布式锁15问,看看你都掌握了哪些?
当有线程释放了锁之后,其它加锁失败的线程就会来继续加锁,加锁之前会先判断一下set集合的头部的线程跟当前要加锁的线程是不是同一个,如果是的话,那就加锁成功,如果不是的话,那么就加锁失败,这样就实现了加锁的顺序性。指定和不指定超时时间的主要区别是,加锁成功之后的逻辑不一样,不指定超时时间时,会开启watchdog后台线程,不断的续约加锁时间,而指定超时时间,就不会去开启watchdog定时任务,这样就不会续约,加锁key到了过期时间就会自动删除,也就达到了释放锁的目的。答案肯定是有的,接着往下看。原创 2023-06-22 13:52:46 · 290 阅读 · 0 评论 -
RedisTemplate常用集合使用说明-boundHashOps
首先要定义一个BoundHashOperations。获取map中的值jdk要求1.8及以上。根据map键批量获取map值。获取特定键对应的map大小。有兴趣的伙伴可以直接去。添加不存在的map键。转载 2023-03-04 23:55:39 · 1646 阅读 · 0 评论 -
Redis五种数据结构应用场景
文章目录前言二、字符串String2.1、常用操作2.2、应用场景2.2.1、单值缓存(最常用)2.2.2、对象缓存2.2.3、分布式锁2.2.4、计数器三、哈希hash3.1、常用操作3.2、应用场景3.2.1、对象缓存3.2.2、 电商购物车四、列表list4.1、常用操作4.2、应用场景4.2.1 微博和微信公号消息五、 集合set5.1 常用操作5.2 应用场景5.2.1 抽奖5.2.2 微博点赞,收藏,标签5.2.3 微博微信关注模型5.2.4 购物网站商品筛选六、有序集合sorted set6.原创 2022-02-27 10:42:01 · 1669 阅读 · 0 评论 -
Redis使用单线程却快到飞起的原因
文章目录Redis为什么用单线程?多线程的开销Redis使用单线程为什么还这么快?网络与IO操作的潜在阻塞点基于多路复用的高性能IO模型回调机制Redis的性能瓶颈点其他Redis相关的有趣问题1. 为什么要用Redis,直接访问内存不好吗?2. 数据太多内存放不下怎么办?比如我要缓存100G的数据,怎么办?Redis想必大家都或多或少听过吧,我们在工作学习中通常用它来作为缓存使用,既然是作为缓存,大家的第一反应肯定是:这家伙很快!实际上它确实也很快 : ),但Redis底层却是单线程的!有同学可能就转载 2022-02-27 10:05:44 · 131 阅读 · 0 评论 -
Redis五种数据类型及应用场景
Redis五种数据类型及应用场景MySql+Memcached架构的问题实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样的架构,但随着业务数据量的不断增加,和访问量的持续增长,我们遇到了很多问题:1.MySQL需要不断进行拆库拆表,Memcached也需不断跟着扩容,扩容和维护工作占据大量开发时间。2.Memcached与MySQL数据库数据一致性问题。3.Memcached数据命中率低或down机,大量访问直接穿透到DB原创 2022-02-24 22:55:40 · 307 阅读 · 0 评论 -
RedisTemplate常用集合使用说明-opsForZSet(六)
基础配置介绍已经在前面的《RedisTemplate常用集合使用说明(一)]》中已经介绍了,现在我们直接介绍opsForZSet()方法的使用:1、add(K key, V value, double score)添加元素到变量中同时指定元素的分值。redisTemplate.opsForZSet().add("zSetValue","A",1);redisTemplate.opsForZSet().add("zSetValue","B",3);redisTemplate.opsForZSet()原创 2022-02-13 10:31:44 · 3123 阅读 · 0 评论 -
RedisTemplate常用集合使用说明-opsForSet(五)
基础配置介绍已经在前面的《RedisTemplate常用集合使用说明(一)》中已经介绍了,现在我们直接介绍opsForSet()方法的使用:1、add(K key, V… values)向变量中批量添加值。redisTemplate.opsForSet().add("setValue","A","B","C","B","D","E","F");2、members(K key)获取变量中的值。Set set = redisTemplate.opsForSet().members("setValu原创 2022-02-13 10:21:44 · 2037 阅读 · 0 评论 -
RedisTemplate常用集合使用说明-opsForHash(四)
基础配置介绍已经在前面的《RedisTemplate常用集合使用说明(一)》中已经介绍了,现在我们直接介绍opsForHash()方法的使用:1、put(H key, HK hashKey, HV value)新增hashMap值。redisTemplate.opsForHash().put("hashValue","map1","map1-1");redisTemplate.opsForHash().put("hashValue","map2","map2-2");2、values(H key原创 2022-02-13 10:09:35 · 1838 阅读 · 1 评论 -
RedisTemplate常用集合使用说明-opsForList(三)
基础配置介绍已经在前面的《RedisTemplate常用集合使用说明(一)》中已经介绍了,现在我们直接介绍opsForList()方法的使用:1、leftPush(K key, V value)在变量左边添加元素值。redisTemplate.opsForList().leftPush("list","a");redisTemplate.opsForList().leftPush("list","b");redisTemplate.opsForList().leftPush("list原创 2022-02-12 17:37:28 · 2547 阅读 · 0 评论 -
RedisTemplate常用集合使用说明-opsForValue(二)
基础配置介绍已经在前面的《RedisTemplate常用集合使用说明(一)》中已经介绍了,现在我们直接介绍opsForValue()方法的使用:1、set(K key, V value) 新增一个字符串类型的值,key是键,value是值。redisTemplate.opsForValue().set("stringValue","bbb");2、get(Object key)获取key键对应的值。String stringValue = redisTemplate.ops原创 2022-02-12 16:07:59 · 1724 阅读 · 0 评论 -
RedisTemplate常用集合使用说明(一)
在这里我使用的是spring-boot框架组合的redisTemplate的jar包spring-boot-starter-data-redis,采用POM的方式引入,引入代码如下:<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.原创 2022-02-12 16:01:45 · 828 阅读 · 0 评论 -
springboot使用redis(StringRedisTemplate的常用方法)
1. 先了解RedisTemplate和StringRedisTemplate之间的关系:RedisTemplate是Spring对于Redis的封装,而StringRedisTemplate继承RedisTemplate。两者的数据是不共通的;也就是说StringRedisTemplate只能管理StringRedisTemplate里面的数据,RedisTemplate只能管理RedisTemplate中的数据。StringRedisTemplate默认采用的是String的序列化策略,保存的原创 2022-01-15 17:39:33 · 9759 阅读 · 2 评论 -
【redis】java操作redis时,StringRedisTemplate的expire()方法的作用,什么时候使用
java操作redis时,StringRedisTemplate的expire()方法的作用,什么时候使用//重新设置过期时间为30分钟,刷新时间redisTemplate.expire(MsOpenApiRedisUtil.SESSION_KEY_IN_LOGIN_NAME+loginName,30,TimeUnit.MINUTES);redisTemplate.expire(userInfoInSessionKey,30,TimeUnit.MINUTES);...原创 2022-01-15 17:36:27 · 5848 阅读 · 0 评论 -
为了拿捏 Redis 数据结构,我画了 40 张图(完整版)
Redis 为什么那么快?除了它是内存数据库,使得所有的操作都在内存上进行之外,还有一个重要因素,它实现的数据结构,使得我们对数据进行增删查改操作时,Redis 能高效的处理。因此,这次我们就来好好聊一下 Redis 数据结构,这个在面试中太常问了。注意,Redis 数据结构并不是指 String(字符串)对象、List(列表)对象、Hash(哈希)对象、Set(集合)对象和 Zset(有序集合)对象,因为这些是 Redis 键值对中值的数据类型,也就是数据的保存形式,这些对象的底层实现的方式就用到了转载 2022-01-15 11:04:53 · 879 阅读 · 1 评论 -
springboot系列——redisTemplate和stringRedisTemplate对比、redisTemplate几种序列化方式比较
文章目录一、redisTemplate和stringRedisTemplate对比1、StringRedisTemplate2、RedisTemplate二、redisTemplate序列化方式比较1、性能测试对比2、性能总结3、方案一、考虑效率和可读性,牺牲部分空间4、方案二、空间敏感,忽略可读性和效率影响5、使用示例一、redisTemplate和stringRedisTemplate对比RedisTemplate看这个类的名字后缀是Template,如果了解过Spring如何连接关系型数据库的,大原创 2021-12-09 23:59:37 · 3692 阅读 · 1 评论 -
深入理解 Redis Template及4种序列化方式__spring boot整合redis实现RedisTemplate三分钟快速入门
概述使用Spring 提供的 Spring Data Redis 操作redis 必然要使用Spring提供的模板类 RedisTemplate, 今天我们好好的看看这个模板类 。RedisTemplate看看4个序列化相关的属性 ,主要是 用于 KEY 和 VALUE 的序列化 。 举个例子,比如说我们经常会将POJO 对象存储到 Redis 中,一般情况下会使用 JSON 方式序列化成字符串,存储到 Redis 中 。Spring提供的Redis数据结构的操作类ValueOperation原创 2021-12-06 00:03:04 · 957 阅读 · 0 评论 -
redis单线程原理___Redis为何那么快-----底层原理浅析
redis单线程原理redis单线程问题单线程指的是网络请求模块使用了一个线程(所以不需考虑并发安全性),即一个线程处理所有网络请求,其他模块仍用了多个线程。1. 为什么说redis能够快速执行(1) 绝大部分请求是纯粹的内存操作(非常快速)(2) 采用单线程,避免了不必要的上下文切换和竞争条件(3) 非阻塞IO - IO多路复用2. redis的内部实现内部实现采用epoll,采用了epoll+自己实现的简单的事件框架。epoll中的读、写、关闭、连接都转化成了事件,然后利用epoll的多原创 2021-12-06 00:02:54 · 841 阅读 · 0 评论 -
Redis的内部运作机制——Redis详解
本文将分五个部分来分析和总结Redis的内部机制,分别是:Redis数据库、Redis客户端、Redis事件、Redis服务器的初始化步骤、Redis命令的执行过程。首先介绍一下Redis服务器的状态结构。Redis使用一个类型为“redisServer”的数据结构来保存整个Redis服务器的状态(每个属性按照即将讲解的顺序进行排序):struct redisServer {int dbnum;//服务器的数据库数量,值由服务器配置的“databases”选项决定,默认为16redisDb *db;原创 2021-12-05 14:55:29 · 519 阅读 · 0 评论 -
Redis之Redis的事务
1.Redis的事务是什么Redis 事务的本质是一组命令的集合,事务支持一次执行多个命令,一个事务中所有命令都会被序列化。(redis事务就是一次性、顺序性、排他性的执行一个队列中的一系列命令).1.1reids事务的特点事务同命令一样都是Redis最小的执行单位,一个事务中的命令要么都执行,要么都不执行在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会插入到事务执行命令序列中Redis的事务还能保证一个事务内的命令依次执行而不被其他命令插入1.2.原创 2021-12-05 14:47:35 · 436 阅读 · 0 评论 -
redis的四大特性和原理
一、redis的过期A.应用场景cookie自动过期,限时优惠价格,限制每分钟的访问次数B.实现方式setex(String key, int seconds, String value)expire key time #秒pexpire key time #毫秒expireat key time #秒pexpireat key time #毫秒C.实现原理定时清理设置key过期时间的时候,就创建一个定时器,不断循环,时间一到就删除掉这个key。优点:过期key马上被删除,内存使用率原创 2021-12-05 14:39:18 · 971 阅读 · 0 评论 -
Redis学习笔记——SpringDataRedis的使用
与Spring集成我需要哪些jar包?<dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId></dependency><dependency> <groupId>redis.clients</groupId> <ar原创 2021-11-30 23:12:37 · 509 阅读 · 0 评论 -
redisTemplate.opsForValue()中方法讲解
查看源码可以看到redisTemplate.opsForValue()中的方法都定义在ValueOperations<K, V> 中,该接口中一共有17个方法:public interface ValueOperations<K, V> { void set(K key, V value); void set(K key, V value, long timeout, TimeUnit unit); Boolean setIfAbsent(K key, V value);原创 2021-11-24 23:30:36 · 15049 阅读 · 2 评论 -
Redis学习笔记
文章目录Redis1. Redis数据库相关指令1.1 数据库操作指令1.2 操作key相关指令1.3 String类型1. 内存存储模型2. 常用操作命令1.4 List类型1.内存存储模型2.常用操作指令1.5 Set类型1.内存存储模型2.常用命令1.6 ZSet类型1.内存模型2.常用命令7.7 hash类型1.内存模型2.常用命令2.数据持久化2.1 快照(RDB)2.2 AOF(append o原创 2021-11-14 16:18:54 · 2354 阅读 · 1 评论 -
springboot 的 RedisTemplate 的 execute 和 executePipelined 功能的区别redis
1.executespring如下是 springboot 官网原文:springbootRedis provides support for transactions through the multi, exec, and discard commands. These operations are available on RedisTemplate, however RedisTemplate is not guaranteed to execute all operations in the原创 2021-11-06 10:33:07 · 4111 阅读 · 0 评论 -
Java面试——Redis系列总结
文章目录:1.什么是Redis?2.为什么要用 Redis / 为什么要用缓存?3.Redis为什么这么快?4.Redis都有哪些数据类型?5.什么是Redis持久化?Redis 的持久化有哪些实现方式?6.什么是Redis事务?7.谈谈你对Redis集群方案——哨兵模式 的理解8.Redis主从复制的原理是什么?9.Redis如何实现分布式锁?10.Redis中的缓存穿透、缓存击穿、缓存雪崩是什么?1.什么是Redis?Redis(Remote Dictionary Serve原创 2021-10-17 23:08:36 · 302 阅读 · 0 评论