博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Springboot整合redis(一般人都能看懂的Lettuce版本)
阅读量:4036 次
发布时间:2019-05-24

本文共 3311 字,大约阅读时间需要 11 分钟。

去年学习的Redis,刚刚学习完就迫不及待的在实战中用了一下,走了很多坑不过幸好都填上了,需求的不断变化发现用不上Redis,一开始去掉了,后来想想加进来比较合适。这篇文章主要讲解Springboot如何整合开发Redis实现一个基本的案例。使用的是目前Springboot2.x的Lettuce版本。希望对你有帮助。

这里因为不是专门讲解Redis的,所以假定你已经学习了Redis,只是希望在SpringBoot2.x中使用。

废话不多说,直接按照步骤开始,以下的案例均在我自己的电脑上测试成功,如有问题可以联系我。

一、开发环境

名称 版本
Idea 2018专业版(已破解)
Maven 4.0.0
SpringBoot 2.2.2
Redis 3.2.1
RedisDesktopManager 0.8.8
jdk 1.8

版本的话其实差不不大就没问题,最主要的就是Springboot的版本,在这里说一下Jedis和Lettuce的区别在哪?

1、Jedis 是直连模式,在多个线程间共享一个 Jedis 实例时是线程不安全的,每个线程都去拿自己的 Jedis 实例,当连接数量增多时,物理连接成本就较高了。

2、Lettuce的连接是基于Netty的,连接实例可以在多个线程间共享,如果你不知道Netty也没事,大致意思就是一个多线程的应用可以使用同一个连接实例,而不用担心并发线程的数量。通过异步的方式可以让我们更好的利用系统资源。

既然有这么大的好处,干脆就用了这个,跟上时代的变化。下面新建一个SpringBootRedis项目,开始整合。

二、整合

步骤一:添加依赖

org.springframework.boot
spring-boot-starter-data-redis
org.apache.commons
commons-pool2

步骤二:application.properties配置文件

# Redis数据库索引(默认为0)spring.redis.database=0  # Redis服务器地址spring.redis.host=localhost# Redis服务器连接端口spring.redis.port=6379  # Redis服务器连接密码(默认为空)spring.redis.password=# 连接池最大连接数(使用负值表示没有限制) 默认 8spring.redis.lettuce.pool.max-active=8# 连接池最大阻塞等待时间(使用负值表示没有限制) 默认 -1spring.redis.lettuce.pool.max-wait=-1# 连接池中的最大空闲连接 默认 8spring.redis.lettuce.pool.max-idle=8# 连接池中的最小空闲连接 默认 0spring.redis.lettuce.pool.min-idle=0

当然如果你的属性文件是yml的,把格式调整一下就OK了。

步骤三:新建config包,创建RedisConfig类

默认情况下RedisTemplate模板只能支持字符串,我们自定义一个RedisTemplate,设置序列化器,这样我们可以很方便的操作实例对象。

@Configurationpublic class RedisConfig {
@Bean public RedisTemplate
redisTemplate(LettuceConnectionFactory connectionFactory) {
RedisTemplate
redisTemplate = new RedisTemplate<>(); redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer()); redisTemplate.setConnectionFactory(connectionFactory); return redisTemplate; }}

步骤四:新建bean包,创建User类

public class User implements Serializable {
private Integer id; private String userName; private String userSex; public User() {
} public User(Integer id, String userName, String userSex) {
this.id = id; this.userName = userName; this.userSex = userSex; } //getter和setter方法 //toString方法}

步骤五:测试插入一个User

@RunWith(SpringRunner.class)@SpringBootTestpublic class SpringBootredisApplicationTests {
@Autowired private RedisTemplate redisTemplate; @Test public void testObj() throws Exception {
User user=new User(1, "java的架构师技术栈", "man"); ValueOperations
operations=redisTemplate.opsForValue(); operations.set("fdd2", user); boolean exists=redisTemplate.hasKey("fdd2"); System.out.println("redis是否存在相应的key"+exists); User getUser = (User)redisTemplate.opsForValue().get("fdd2"); System.out.println("从redis数据库获取的user:"+getUser.toString()); }}

在上面这个例子中我们使用redisTemplate调用了opsForValue会得到一个ValueOperations操作。这个是专门操作String类型的数据,所以里面的键值对中键为String,而值是我们的User。当然redisTemplate还为我们提供了下面几个。

redisTemplate.opsForValue();//操作字符串redisTemplate.opsForHash();//操作hashredisTemplate.opsForList();//操作listredisTemplate.opsForSet();//操作setredisTemplate.opsForZSet();//操作有序set

具体使用的时候,你可以根据自己的数据类型选择相应的方法即可,网上有各种RedisUtil工具类

喜欢的可以关注我的公众号:java的架构师技术栈,获取各种文章和教程资源

转载地址:http://asbdi.baihongyu.com/

你可能感兴趣的文章
补充自动屏蔽攻击ip
查看>>
谷歌走了
查看>>
多线程使用随机函数需要注意的一点
查看>>
getpeername,getsockname
查看>>
让我做你的下一行Code
查看>>
浅析:setsockopt()改善程序的健壮性
查看>>
关于对象赋值及返回临时对象过程中的构造与析构
查看>>
VS 2005 CRT函数的安全性增强版本
查看>>
SQL 多表联合查询
查看>>
Visual Studio 2010:C++0x新特性
查看>>
drwtsn32.exe和adplus.vbs进行dump文件抓取
查看>>
cppcheck c++静态代码检查
查看>>
在C++中使用Lua
查看>>
C++中使用Mongo执行count和distinct运算
查看>>
一些socket的编程经验
查看>>
socket编程中select的使用
查看>>
关于AIS编码解码的两个小问题
查看>>
GitHub 万星推荐:黑客成长技术清单
查看>>
可以在线C++编译的工具站点
查看>>
关于无人驾驶的过去、现在以及未来,看这篇文章就够了!
查看>>