- 使用 Spring Initializr 创建 Spring Boot 应用程序
- 在Spring Boot中配置Cassandra
- 在 Spring Boot 上配置 Tomcat 连接池
- 将Camel消息路由到嵌入WildFly的Artemis上
📒博客首页:崇尚学技术的科班人
🍣今天给大家带来的文章是《面试必备Redis知识 -- Redis面试题(二)》
🍣
🍣希望各位小伙伴们能够耐心的读完这篇文章🍣
🙏博主也在学习阶段,如若发现问题,请告知,非常感谢🙏
💗同时也非常感谢各位小伙伴们的支持💗
👨💻**:说一下你对 redis 事务的了解呗。**
Redis 可以通过 MULTI,EXEC,DISCARD 和 WATCH
等命令来实现事务功能。
你也可以通过 DISCARD
命令取消一个事务,它会清空事务队列中保存的所有命令。
WATCH
命令用于监听指定的键,当调用 EXEC
命令执行事务时,如果一个被 WATCH
命令监视的键被修改的话,整个事务都不会执行,直接返回失败。
Redis 是不支持 roll back 的,因而不满足原子性的(而且不满足持久性)。
👨💻**:高并发下分布式系统中的数据线程安全怎么保障?**
/**
* 加锁
* @param key
* @param value
* @return
*/
public boolean lock(String key,String value){
if(redisTemplate.opsForValue().setIfAbsent(key,value)){
// 加锁成功
return true;
}
// 如果锁过期
String currentValue = redisTemplate.opsForValue().get(key);
if(!StringUtils.isEmpty(currentValue) &&
Long.parseLong(currentValue) < System.currentTimeMillis()){
String oldValue = redisTemplate.opsForValue().getAndSet(key,value);
if(!StringUtils.isEmpty(oldValue) &&
oldValue.equals(oldValue)){
return true;
}
}
// 锁已经被其它线程获取
return false;
}
key
不存在的话,那么就进行相关设置,也就是加锁成功。同时我们设置进行的 value
是对应的 key
的过期时间。oldValue
的判断,如果是相同的话,那么就获取锁成功,否则就是被其它线程争抢过去了。/**
* 解锁
* @param key
* @param value
*/
public void unlock(String key,String value){
try{
String currentValue = redisTemplate.opsForValue().get(key);
if(!StringUtils.isEmpty(currentValue) &&
currentValue.equals(value)){
redisTemplate.opsForValue().getOperations().delete(key);
}
}catch (Exception e){
log.error("【redis 分布式锁】 解锁异常,{}",e);
}
}
👨💻**:简要说一下缓存穿透现象和怎样应对 ?**
👨💻**:简要说一下缓存击穿现象和怎样应对 ?**
Redis 分布式锁
)👨💻**:简要说一下缓存雪崩现象和怎样应对 ?**
👨💻**:你了解redis 常见性能问题和解决方案吗?**
👨💻**:redis 如何做内存优化?**
尽可能使用散列表,散列表(是说散列表里面存储的数少)使用的内存非常小,所以你应该尽可能的将你的数据模型抽象到一个散列表里面。比如你的 web 系统中有一个用户对象,不要为这个用户的名称,姓氏,邮箱,密码设置单独的 key,而是应该把这个用户的所有信息存储到一张散列表里面
。
👨💻**:MySQL 里有 2000w 数据,redis 中只存 20w 的数据,如何保证 redis 中的数据都是热点数据?**
volatile-lru
:从已设置过期时间的数据集中挑选最近最少使用的数据淘汰volatile-ttl
:从已设置过期时间的数据集中挑选将要过期的数据淘汰volatile-random
:从已设置过期时间的数据集中任意选择数据淘汰allkeys-lru
:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的 key(这个是最常用的)allkeys-random
:从数据集中任意选择数据淘汰no-eviction
:禁止驱逐数据,也就是说当内存不足以容纳新写入数据时,新写入操作会报错。这个应该没人使用吧!volatile-lfu
:从已设置过期时间的数据集中挑选最不经常使用的数据淘汰allkeys-lfu
:当内存不足以容纳新写入数据时,在键空间中,移除最不经常使用的 key👨💻**:假如 Redis 里面有 1 亿个 key,其中有 10w 个 key 是以某个固定的已知的前缀开头的,如果将它们全部找出来?**
在这篇文章中,我将介绍如何识别导致性能出现问题的查询,如何找出它们的问题所在,以及快速修复这些问题和其他加快查询速度的方法。 你一定知道,一个快速访问的网站能让用户喜欢,可以帮助网站从Goog
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
2021 年,人们喜欢 Linux 的原因比以往任何时候都多。在本系列中,我将分享使用 Linux 的 21 个不同原因。这里有四个开源工具,可以将任何设备变成 Linux 服务器。 有时,我会发
我使用 Web Essentials 在保存时编译我的 typescript 文件(Visual Studio 2012),但我得到一个空的 js 和这条消息: Compile Error. See
我是一名优秀的程序员,十分优秀!