网站设计培训班老师,山东网站建设SEO优化制作设计公司,物业公司会计好做吗,局域网创建网站1.Redis面试题-缓存穿透,缓存击穿,缓存雪崩
1 穿透: 两边都不存在#xff08;皇帝的新装#xff09; #xff08;返回空值#xff09;#xff08;互斥锁#xff09;#xff08;黑名单#xff09; #xff08;布隆过滤器#xff09;
2 击穿#xff1a;一个或多个热…1.Redis面试题-缓存穿透,缓存击穿,缓存雪崩
1 穿透: 两边都不存在皇帝的新装 返回空值互斥锁黑名单 布隆过滤器
2 击穿一个或多个热点的key失效了这时大量的并发请求直接到达数据库. 提前预热
3 雪崩大量key同时失效 避免大量的key同一时间失效错峰 【大厂面试题】缓存穿透清晰讲解看完不会你来打我 # 编程 # java # java面试 # 面试题 # 开发 https://v.douyin.com/irdtam1Q/ 复制此链接打开Dou音搜索直接观看视频
2.Spring是如何集成Redis的
Spring Data Redis dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId/dependency dependencygroupIdorg.apache.commons/groupIdartifactIdcommons-pool2/artifactId/dependency3.高级封装 4.Redis配置
Spring.Redis常用配置参数有哪些。 # Redis服务器地址
spring.redis.host10.1.30.222
# Redis数据库索引默认为0
spring.redis.database0
# Redis服务器连接端口
spring.redis.port6379
# Redis服务器连接密码默认为空
#spring.redis.password
## 连接超时时间毫秒
spring.redis.timeout30000
# 连接池最大连接数使用负值表示没有限制 默认 8
spring.redis.lettuce.pool.max-active8
# 连接池中的最大空闲连接 默认 8
spring.redis.lettuce.pool.max-idle8
# 连接池中的最小空闲连接 默认 0
spring.redis.lettuce.pool.min-idle1
#连接池中最大空闲等待时间3s没有活干的时候直接驱逐该链接
spring.redis.lettuce.pool.min-evictable-idle-time-millis 3000
# 连接池最大阻塞等待时间使用负值表示没有限制 默认 -1
spring.redis.lettuce.pool.max-wait-1 5.StringRedisTemplate
String
Autowiredprivate StringRedisTemplate stringRedisTemplate;private final String key zhengzhou;public void test() {stringRedisTemplate.opsForValue().set(key, 我的家乡, 30, TimeUnit.SECONDS);String value stringRedisTemplate.opsForValue().get(key);System.out.println(value);} Hash
Autowiredprivate StringRedisTemplate stringRedisTemplate;private final String key zhouxingxing;public void test(){stringRedisTemplate.opsForHash().put(key,20220325,郑州);stringRedisTemplate.opsForHash().put(key,20220326,洛阳);ListObject values stringRedisTemplate.opsForHash().values(key);for (Object value:values){System.out.println(value);}} List
Autowiredprivate StringRedisTemplate stringRedisTemplate;private final String key onewayroad;void test(){stringRedisTemplate.opsForList().leftPush(key,周星星);stringRedisTemplate.opsForList().leftPush(key,张敏);stringRedisTemplate.opsForList().leftPush(key,李大锤);String value stringRedisTemplate.opsForList().rightPop(key);System.out.println(value);}
}Testvoid test6() {// 如果一些原生命令spring 没有给我们封装redisTemplate.executenew RedisCallbackwhile (true){System.out.println(开始一轮监听);Listbyte[] rawResults redisTemplateProduct.execute(new RedisCallbackListbyte[]() {Overridepublic Listbyte[] doInRedis(RedisConnection connection) throws DataAccessException {return connection.bRPop(5,product.hot.getBytes());}});if(ObjUtil.isNotEmpty(rawResults)){byte[] rawKey rawResults.get(0);byte[] rawValue rawResults.get(1);Product product (Product)redisTemplateProduct.getValueSerializer().deserialize(rawValue);System.out.println(product);}} Set
Component
public class SetDemo {Autowiredprivate StringRedisTemplate stringRedisTemplate;private final String zhouxingxing zhouxingxing;private final String zhangmin zhangming;public void test(){//添加周星星同学感兴趣的科目stringRedisTemplate.opsForSet().add(zhouxingxing,语文);stringRedisTemplate.opsForSet().add(zhouxingxing,数学);stringRedisTemplate.opsForSet().add(zhouxingxing,数学);//添加张敏同学感兴趣的科目stringRedisTemplate.opsForSet().add(zhangmin,数学);stringRedisTemplate.opsForSet().add(zhangmin,英语);//获取两位同学共同感兴趣的科目SetString values stringRedisTemplate.opsForSet().intersect(zhouxingxing, zhangmin);System.out.println(周星星和张敏共同感兴趣的科目为);for(String value : values){System.out.println(value);}}
}ZSet
Component
public class ZSetDemo {Autowiredprivate StringRedisTemplate stringRedisTemplate;private final String key zhouxingxing;public void test(){//添加周星星同学成绩stringRedisTemplate.opsForZSet().add(key,语文,98);stringRedisTemplate.opsForZSet().add(key,数学,87);stringRedisTemplate.opsForZSet().add(key,英语,75);//获取分数最高的成绩ZSetOperations.TypedTupleString values stringRedisTemplate.opsForZSet().popMax(key);//打印值System.out.println(周星星最好成绩科目是values.getValue());System.out.println(周星星最好成绩values.getScore());}
} 6.RedisTemplateT,V泛型约束
6.1泛型约束的使用
Component
public class RedisTemplateDemo {Autowiredprivate StringRedisTemplate stringRedisTemplate;Resourceprivate RedisTemplateString, User redisTemplate;Resource(nameredisTemplate)private ValueOperationsString,User valueOperations;private final String key useris#01;public void test() {User user User.builder().id(1).name(李四).build();redisTemplate.opsForValue().set(key,user );User value redisTemplate.opsForValue().get(key);valueOperations.set(key,user );User value2 valueOperations.get(key);System.out.println(value);}
} 6.2乱码的问题 JdkSerializationRedisSerializer serializer new JdkSerializationRedisSerializer();byte[] serialize serializer.serialize(user.01);System.out.println(new String(serialize));6.3自定义序列化工具
Configuration
public class RedisConfig {Beanpublic RedisTemplateObject, Object redisTemplate(RedisConnectionFactory redisConnectionFactory) {RedisTemplateObject, Object template new RedisTemplate();template.setConnectionFactory(redisConnectionFactory);Jackson2JsonRedisSerializer jackson2JsonRedisSerializer new Jackson2JsonRedisSerializer(Object.class);ObjectMapper objectMapper new ObjectMapper();// 序列化的时候自动推断类型将类型信息作为属性写入JSON// 反序列化时候根据类型的全类名序列化成对应的对象实例objectMapper.activateDefaultTyping(objectMapper.getPolymorphicTypeValidator(), ObjectMapper.DefaultTyping.NON_FINAL);jackson2JsonRedisSerializer.setObjectMapper(objectMapper);//普通key序列化工具template.setKeySerializer(RedisSerializer.string());template.setValueSerializer(jackson2JsonRedisSerializer);//hash 小key 序列化工具template.setHashKeySerializer(RedisSerializer.string());template.setHashValueSerializer(jackson2JsonRedisSerializer);return template;}}7. 直接使用ListOperations、ValueOperations、SetOperations、ZSetOperations、HashOperations接口 在Spring Data Redis中提供了丰富的模板操作接口 如ListOperations、ValueOperations、SetOperations、ZSetOperations、HashOperations 这些都是RedisTemplate的子接口用于针对不同类型的Redis数据结构进行操作 REDIS 注释 redistemplate注入_mob6454cc6f4a4e的技术博客_51CTO博客