Spring Redis 使用总结

news/2024/12/22 1:47:44/

1.简介

Spring中常用Redis做数据库的缓存,第一次查询走数据库并缓存到redis,第二次查询由redis直接返回数据。

2.安装Redis

mac安装:

brew install redis

linux安装:

sudo apt-get install lsb-release curl gpg
curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
sudo chmod 644 /usr/share/keyrings/redis-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list
sudo apt-get update
sudo apt-get install redis

查询config文件在哪:

redis-cli INFO | grep config_file

通过config文件设置密码

#mac下
vim /opt/homebrew/etc/redis.conf 
#linux下
vim /etc/redis/redis.conf

添加

requirepass 12345678

启动redis

#linux下
systemctl restart redis-server
#mac下
brew services start redis

命令行测试redis已经启动:

redis-cli -a 12345678
127.0.0.1:6379> ping
PONG

查看所有key:

127.0.0.1:6379> keys * 
1) "article::getArticles" 

查看key对应的value:

127.0.0.1:6379> get article::getArticles

3. 拉起

pom.xml加入:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

application.yaml配置文件中加入:

spring:data:redis:host: 127.0.0.1port: 6379

添加Redis配置类:

java">@Configuration
@EnableCaching
public class RedisConfig {@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory){RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();redisTemplate.setConnectionFactory(factory);redisTemplate.setKeySerializer(new StringRedisSerializer());redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());redisTemplate.setHashKeySerializer(new StringRedisSerializer());redisTemplate.setHashValueSerializer(new Jackson2JsonRedisSerializer<Object>(Object.class));return redisTemplate;}@Beanpublic RedisCacheManager redisCacheManager(RedisTemplate redisTemplate){RedisCacheWriter redisCacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(redisTemplate.getConnectionFactory());RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig().serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer((redisTemplate.getValueSerializer())));return new RedisCacheManager(redisCacheWriter, redisCacheConfiguration);}
}

测试基本功能:

java">@SpringBootTest
public class RedisTester {@Autowiredprivate RedisTemplate redisTemplate;@Autowiredprivate ArticlesMapper articlesMapper;@Testpublic void testSet(){//存入数据redisTemplate.boundValueOps("name").set("zhangsan");}@Testpublic void testGet(){//获取数据Object name = redisTemplate.boundValueOps("name").get();System.out.println("name = " + name);}@Testpublic void testReadSql(){List<Article> articles = articlesMapper.getArticles();Map<String ,String> map = articles.stream().collect(Collectors.toMap(article -> article.getId().toString(), article -> article.getText()));redisTemplate.opsForHash().putAll("test",map);Object test = redisTemplate.opsForHash().get("test", "82");System.out.println("test = " + test);}
}

实战添加注解:

java">@Cacheable(value = "article", key="'getArticles'")//第一次访问mysql,之后创建缓存,不再访问mysql
@Override
public Result getArticles() {...
}//数据未找到时不保存缓存,Cacheable返回值使用unless判断(返回使用),不能用condition(入参判断使用)
@Cacheable(value = "article", key="'article:' + #articleId",unless = "#result.getData() == null")
@Override
public Result getArticle(Integer articleId) {...return Result.ok(article);
}//数据变化时更新缓存,删除群缓存
@CachePut(value = "article",key = "'article:' + #article.id")
@CacheEvict(value= "article", key="'getArticles'")
@Override
public Result createArticle(Article article){...
}//数据变化时更新缓存,删除群缓存
@CachePut(value = "article",key = "'article:' + #article.id")
@CacheEvict(value= "article", key="'getArticles'")
@Override
public Result modifyArticle(Article article) {...
}//数据变化时更新缓存,删除群缓存
@Caching(evict = {@CacheEvict(value = "article", key="'article:' + #articleId"),@CacheEvict(value= "article", key="'getArticles'")
})
@Override
public Result deleteArticle(Integer articleId) {...
}

http://www.ppmy.cn/news/1534195.html

相关文章

【CSS】兼容处理

兼容前缀兼容查询 由于不同浏览器对CSS标准的支持程度不同&#xff0c;可能会导致在不同浏览器中出现样式差异。为了解决这个问题&#xff0c;需要采取一些措施来提高CSS的兼容性 兼容前缀 兼容前缀针对的浏览器-webkit-WebKit 内核浏览器&#xff0c;如&#xff1a;Safari 、…

#git 问题failed to resolve head as a valid ref

问题如下&#xff1a; 解决方法&#xff1a; 1、运行 git fsck --full 可以查看具体error信息&#xff0c;一般都是head索引问题 2、.git\refs\heads\xxx&#xff08;当前分支&#xff09;txt编辑器打开显示乱码&#xff0c;而不是hash编码 3、在.git\logs\refs\heads\xxx&a…

【代码随想录Day29】贪心算法Part03

134. 加油站 题目链接/文章讲解&#xff1a;代码随想录 视频讲解&#xff1a;贪心算法&#xff0c;得这么加油才能跑完全程&#xff01;LeetCode &#xff1a;134.加油站_哔哩哔哩_bilibili class Solution {public int canCompleteCircuit(int[] gas, int[] cost) {// 创建一…

基于深度学习的不遗忘训练

基于深度学习的不遗忘训练&#xff08;也称为抗遗忘训练或持久性学习&#xff09;是针对模型在学习新任务时可能会忘记已学习内容的一种解决方案。该方法旨在使深度学习模型在不断接收新信息的同时&#xff0c;保持对旧知识的记忆。以下是这一领域的主要内容和方法&#xff1a;…

OpenCV-图像拼接

文章目录 一、基本原理二、步骤三、代码实现1.定义函数2.读取图像3.图像配准&#xff08;1&#xff09;.特征点检测&#xff08;2&#xff09;.特征匹配 4.透视变换5.图像拼接 四、图像拼接的注意事项 图像拼接是一种将多张有重叠部分的图像合并成一张无缝的全景图或高分辨率图…

JAVA并发编程高级——JDK 新增的原子操作类 LongAdder

LongAdder 简单介绍 前面讲过,AtomicLong通过CAS提供了非阻塞的原子性操作,相比使用阻塞算法的同步器来说它的性能已经很好了,但是JDK开发组并不满足于此。使用AtomicLong 时,在高并发下大量线程会同时去竞争更新同一个原子变量,但是由于同时只有一个线程的CAS操作会成功,…

Mac中访达显示/关闭隐藏文件

Mac中访达显示/关闭隐藏文件 您可以使用特殊的键盘快捷键查看 Mac 上的所有不可见项目。下面是具体步骤&#xff1a; 1、激活 Finder 应用程序&#xff0c; 打开可能包含此类文件的文件夹。 Command Shift 句点 【CMDShift.】3、如果您想再次隐藏文件&#xff0c;请再次重…

新品 | Teledyne FLIR IIS 推出Forge 1GigE SWIR 短波红外工业相机系列

近日&#xff0c;51camera的合作伙伴Teledyne FLIR IIS推出了新品Forge 1GigE SWIR 130万像素的红外相机。 Forge 1GigE SWIR系列的首款相机配备宽频带、高灵敏度的Sony SenSWIR™️ 130万像素IMX990 InGaAs传感器。这款先进的传感器采用5um像素捕捉可见光和SWIR光谱&#xff…