前言 Spring整合Redis的环境可以使用搭建好的ssm环境下进行构建,方(懒)便(人)快(专)捷(用),首推!
@[toc]
<!-- ================ 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> 复制代码
是的,在上面使用到了Jedis的jar包,这里简单介绍一下Jedis。
Java客户端访问Redis有 Jedis
、 Redisson
、 Jredis
、 JDBC-Redis
等,其中官方推荐使用 Jedis 和Redisson。 常用Jedis 。Jedis的操作跟使用原生的Redis命令来操作是基本一致的,或者说,Jedis其实就是原生命令的Java实现,好处是使用起来非常方便,不用再去记忆其他的API,缺点是偏底层了一些,有一些内容还是需要我们手动封装处理。对于初学者来说,Jedis上手更快,更能适应。
在spring的xml中开始如下配置:
<!-- 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、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
,如下:
既然配置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> 复制代码
具体可以自行进行进入源码观看,下面贴个自个的简单分析:
首先编写个接口
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; } } } 复制代码
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车,咋们走!最主要的是一起探讨技术,向往技术,追求技术,说好了来了就是盆友喔...