spring整合jedis(单节点)

1 场景

spring中使用jedis整合单节点redis。

redis官网: https://redis.io/

spring集成redis官网: https://spring.io/projects/spring-data-redis

1.1 版本说明

jdk版本: 1.8

spring版本:5.2.2.RELEASE

spring-data-redis版本: 2.3.2.RELEASE

jedis版本: 3.3.0

redis版本:5.0.8

连接redis组件: jedis

redis部署方式: 单节点

1.2 代码地址

https://github.com/yjhcpdd/mymvc

1.3 项目结构
--java
--resources
    --conf
        -mybatis-redis.xml**[1]
    	-spring.xml*********[2]
    --properties
    	-redis.properties***[3]

2 整合步骤

2.1 配置maven依赖

pom.xml中配置相关依赖包(完整配置,可参见源码):

<dependencies>
    ...
	<!-- ==========【redis】========== -->
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-redis</artifactId>
        <version>2.3.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-pool2</artifactId>
        <version>2.8.1</version>
    </dependency>
    <dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
        <version>3.3.0</version>
    </dependency>
</dependencies>
2.2 配置redis配置文件

创建数据库配置文件redis.properties[3],增加如下配置:

#redis数据库连接配置
redis.hostName=192.168.1.11
redis.port=6379
redis.password=123456
redis.database=0
2.3 引入redis配置文件

spring配置文件中引入redis配置文件

<context:property-placeholder location="classpath:properties/redis.properties" />
2.4 spring中配置redis

更改jedis的spring配置文件mybatis-redis.xml[1]

<!-- 密码配置 -->
<bean id="redisPassword" class="org.springframework.data.redis.connection.RedisPassword" factory-method="of">
    <constructor-arg name="passwordAsString" value="${redis.password}" />
</bean>

<!-- 连接配置 -->
<bean id="redisStandaloneConfiguration"
      class="org.springframework.data.redis.connection.RedisStandaloneConfiguration">
    <property name="hostName" value="${redis.hostName}"/>
    <property name="port" value="${redis.port}"/>
    <property name="password" ref="redisPassword"/>
    <property name="database" value="${redis.database}"/>
</bean>

<!-- 连接池配置(根据需要配置连接池优化参数) -->
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
	<!-- 优化参数 -->
</bean>

<!-- 客户端连接配置 -->
<bean id="jedisClientConfiguration"
      class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory$MutableJedisClientConfiguration"
      factory-method="create">
    <constructor-arg name="jedisPoolConfig" ref="jedisPoolConfig"/>
</bean>

<!-- 连接工厂 -->
<bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
    <!-- "单机"连接配置 -->
    <constructor-arg name="standaloneConfig" ref="redisStandaloneConfiguration"/>
    <!-- 客户端连接配置 -->
    <constructor-arg name="clientConfig" ref="jedisClientConfiguration"/>
</bean>

<!-- 字符串句柄 -->
<bean id="stringRedisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate">
    <constructor-arg name="connectionFactory" ref="jedisConnectionFactory"/>
</bean>

这里配置了redis常用的操作句柄stringRedisTemplate,如需要其他句柄实现,可以自己集成泛型类org.springframework.data.redis.core.RedisTemplate,自定义自己的泛型实现。

3 使用

spring中使用redis,只需要将redis的句柄stringRedisTemplate注入到spring环境中即可。

@Autowired
private StringRedisTemplate stringRedisTemplate;

句柄使用时,可调用对应的opsForXXX来操作不同类型的数据,如下:

//字符串句柄写法
stringRedisTemplate.opsForValue().set("k1", "v1");
stringRedisTemplate.opsForValue().get("k1");

在使用此句柄时,不需要自己手动关闭连接,查看源码,可以看到RedisTemplate.java中已经自动执行了连接的回收操作:

@Nullable
<T> T execute(RedisCallback<T> callback, boolean exposeConnection) {
    return template.execute(callback, exposeConnection);
}

public <T> T execute(RedisCallback<T> action, boolean exposeConnection, boolean pipeline) {
	//校验
    RedisConnectionFactory factory = getRequiredConnectionFactory();
    RedisConnection conn = null;
    try {
        //真正的数据库操作action
    } finally {
        RedisConnectionUtils.releaseConnection(conn, factory, enableTransactionSupport);
    }
}

4 扩展

如默认jedis默认提供的操作句柄stringRedisTemplate中提供的方法不能满足自己需求,又不想自定义泛型扩展类RedisTemplate。可以通过stringRedisTemplate获取原始的redisTemplate,手动编写回调方法execute,来实现需要的功能:

//调用原生jedis回调写法
stringRedisTemplate.execute((RedisCallback<Object>) connection -> {
    connection.flushAll();
    return null;
});

此种方式,可以通过更改匿名类中的泛型类型,来设置回调方法返回的数据类型,从而返回相应的执行结果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值