Spring整合Redis
前言
Spring整合Redis的环境可以使用搭建好的ssm环境下进行构建,方(懒)便(人)快(专)捷(用),首推!
@
1、准备依赖Jar包
<!-- ================ spring 整合 Redis================== -->
<!-- 1、java连接Redis的jar包,也就是使用jedis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.4.2</version>
</dependency>
<!-- 2、spring整合Redis的jar包 -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>1.4.2.RELEASE</version>
</dependency>
1.1、Jedis概述
是的,在上面使用到了Jedis的jar包,这里简单介绍一下Jedis。
Java客户端访问Redis有
Jedis
、Redisson
、Jredis
、JDBC-Redis
等,其中官方推荐使用Jedis和Redisson。常用Jedis。Jedis的操作跟使用原生的Redis命令来操作是基本一致的,或者说,Jedis其实就是原生命令的Java实现,好处是使用起来非常方便,不用再去记忆其他的API,缺点是偏底层了一些,有一些内容还是需要我们手动封装处理。对于初学者来说,Jedis上手更快,更能适应。
2、Spring-redis.xml 中的配置
在spring的xml中开始如下配置:
2.1、配置连接池信息
<!-- 1、配置连接池信息 -->
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<!-- 最大连接数-->
<property name="maxTotal" value="50"></property>
<property name="maxIdle" value="5"></property>
<!-- 这里只是Spring整合Redis测试,配两个做个样子就得了-->
</bean>
当然配置的话,redis.clients.jedis.JedisPoolConfig中也有默认的配置信息!毕竟是魔是仙我自己说了才算。
2.2、配置连接池信息
<!--2、spring整合Jedis(Redis) 也就是配置连接工厂JedisConnectionFactory-->
<bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<!--需要自定义(指定)一些工厂属性配置信息-->
<!-- 指定服务器地址-->
<property name="hostName" value="192.168.113.231"></property>
<!-- 指定服务端口号-->
<property name="port" value="6379"></property>
<!-- 指定密码(Redis3之前可以不指定,之后都要)-->
<property name="password" value="yichun"></property>
<!-- 自定义连接池配置:再把第一步配置好的连接池信息通过属性注入进来 如果不自定义会采用默认的连接池配置,工厂中有属性new JedisPoolConfig-->
<property name="poolConfig" ref="jedisPoolConfig"></property>
</bean>
把第一步配置好的连接池信息通过属性注入进来 如果不自定义会采用默认的连接池配置,工厂中有属性new JedisPoolConfig
,如下:
2.3、配置RedisTemplate模板
既然配置RedisTemplate模板,那么我们就来认识认识下RedisTemplate模板。
RedisTemplate概述
Spring-data-redis
提供了RedisTemplate
来实现Redis
的访问操作,它封装了redis连接池管理的逻辑,业务代码无须关心获取,释放连接逻辑;spring redis
同时支持了Jedis、Jredis、rjc
客户端操作; 在RedisTemplate
中提供了几个常用的接口方法的使用,里面的方法分别存着操作Redis的字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等多种数据类型。
RedisTemplate可以极大地简化Redis数据访问,能够让我们持久化各种类型的key和value,并不局限于字节数组。
配置RedisTemplate模板
<!-- 3、配置RedisTemplate模板 把第二步配置好的连接工厂JedisConnectionFactory通过属性注入到RedisTemplate模板中-->
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
<property name="connectionFactory" ref="jedisConnectionFactory"></property>
<!--如下配置是为了之后的key和value的序列化操作,暂时不配制也是OK的-->
<property name="keySerializer">
<bean class="org.springframework.data.redis.serializer.StringRedisSerializer"></bean>
</property>
<property name="valueSerializer">
<bean class="org.springframework.data.redis.serializer.StringRedisSerializer"></bean>
</property>
</bean>
具体可以自行进行进入源码观看,下面贴个自个的简单分析:
3、service代码编写
首先编写个接口
package com.gx.service;
public interface RedisUserService {
public String getString(String key);
}
再编写service现实代码
package com.gx.service.Impl;
import com.gx.service.RedisUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Service;
import java.util.concurrent.TimeUnit;
@Service
public class RedisUserServiceImpl implements RedisUserService {
/**
* 主要业务代码是通过某个key得到值:
* Redis中 不存在:进数据库查询
* 存在:进Redis中查询
*/
@Autowired
RedisTemplate<String,String> redisTemplate;
@Override
public String getString(String key) {
ValueOperations<String,String> string=redisTemplate.opsForValue();//opsForValue是存储String数据的,opsForValue中提供了很多操作Redis的String类型的数据!!!
// redisTemplate.opsForValue().set("cs1","cs数据1",1, TimeUnit.HOURS); //设置存储数据并设置过期时间为1小时
if (redisTemplate.hasKey(key)) {
System.out.println("在Redis中取出并返回");
return string.get(key);
}else {
String result="RedisTemplate的Value值";
string.set(key,result);
System.out.println("在数据库中取出并返回");
return result;
}
}
}
4、RedisTemplateTest测试代码编写
package com.gx.test;
import com.gx.service.RedisUserService;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class RedisTemplateTest {
public static void main(String[] args) {
//这里之所以只加载applicationContext.xml是因为我把spring-Redis.xml的配置直接放进了applicationContext.xml,不要问我为什么,因为我骚啊。
ClassPathXmlApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
RedisUserService userService=ctx.getBean(RedisUserService.class);
String key="cs2";
String result=userService.getString(key); //这里是调用我们编写userService中的getString(key)方法
System.out.println(result);
}
}
运行前千万记得开启端口和防火墙等操作,不然连接不了会报错,这里提个醒!!!
运行第一遍
运行第二遍
当然,也可以去Redis中查询数据是否存入。
OK,到这里Spring整合Redis就初步整合完成了!
如果本文对你有一点点帮助,那么请点个赞呗,你的赞同是我最大的动力,谢谢~
最后,若有不足或者不正之处,欢迎指正批评,感激不尽!如果有疑问欢迎留言,绝对第一时间回复!
欢迎各位关注我的公众号,里面有一些java学习资料和一大波java电子书籍,比如说周志明老师的深入java虚拟机、java编程思想、核心技术卷、大话设计模式、java并发编程实战.....都是java的圣经,不说了快上Tomcat车,咋们走!最主要的是一起探讨技术,向往技术,追求技术,说好了来了就是盆友喔...