SpringData Redis 简介:
Redis是一个基于内存的数据结构存储系统,它可以用作数据库或者缓存。它支持多种类型的数据结构,
这些数据结构类型分别为 String(字符串)、List(列表)、Set(集合)、Hash(散列)和 Zset(有序集合)。
SpringData Redis的作用是通过一段简单的配置即可访问redis服务,它的底层是对java提供的redis开发包(比如jedis等)进行了高度封装,主要提供了如下功能:
连接池自动管理,提供了一个高度封装的 RedisTemplate类,基于这个类的对象可以对redis进行各种操作
针对 jedis客户端中大量api进行了归类封装,将同一类型操作封装为operation接口
ValueOperations :简单字符串类型数据操作
SetOperations :set类型数据操作
ZSetOperations :zset类型数据操作
HashOperations :map类型的数据操作
ListOperations :list类型的数据操作
SpringData Redis 入门案例:
1.创建工程,引入坐标
<dependencies> <!-- jedis依赖 --> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.3</version> </dependency> <!-- springdata整合redis --> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>2.1.8.RELEASE</version> </dependency> <!-- 单元测试 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>5.1.6.RELEASE</version> </dependency> <!-- 进行json数据转换 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.8</version> </dependency> </dependencies>
2.创建配置文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 配置Jedis连接池参数 --> <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"> <!-- 最大连接数 --> <property name="maxTotal" value="30"></property> <!--最大空闲数--> <property name="maxIdle" value="20"/> <!-- 最小空闲连接数 --> <property name="minIdle" value="10"></property> <!--连接时的最大等待毫秒数--> <property name="maxWaitMillis" value="3000"/> <!--在提取一个jedis实例时,是否提前进行验证操作;如果为true,则得到的jedis实例均是可用的--> <property name="testOnBorrow" value="false"/> </bean> <!-- 配置Jedis连接工厂,用于产生连接 --> <bean id="jedisConnectionFactory" p:hostName="192.168.43.182" p:port="6379" p:poolConfig-ref="jedisPoolConfig" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"/> <!-- 配置redis模板,操作数据库时使用 --> <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"> <!-- 注入Jedis连接工厂,用于获取连接 --> <property name="connectionFactory" ref="jedisConnectionFactory"></property> </bean> </beans>
3.创建测试类,完成一条简单数据的存取
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:applicationContext-redis.xml") public class RedisTest { @Autowired private RedisTemplate redisTemplate; @Test public void testSave() { // ValueOperations :简单字符串类型数据操作 // SetOperations :set类型数据操作 // ZSetOperations :zset类型数据操作 // HashOperations :map类型的数据操作 // ListOperations :list类型的数据操作 ValueOperations ops = redisTemplate.opsForValue(); ops.set("name", "lily"); } @Test public void testGet() { ValueOperations ops = redisTemplate.opsForValue(); Object name = ops.get("name"); System.out.println(name); } }
SpringData Redis 的序列化器:
通过Redis提供的客户端查看存入redis的数据,会发现存入的数据并不是简单的字符串,而是一些类似于二进制的数据
SpringData Redis在保存数据的时候,底层有一个序列化器在工作,它会将要保存的数据(键和值)按照一定的规则进行序列化操作后再进行存储。
spring-data-redis提供如下几种序列化器:
StringRedisSerializer: 简单的字符串序列化
GenericToStringSerializer: 可以将任何对象泛化为字符串并序列化
Jackson2JsonRedisSerializer: 序列化对象为json字符串
GenericJackson2JsonRedisSerializer: 功能同上,但是更容易反序列化
OxmSerializer: 序列化对象为xml字符串
JdkSerializationRedisSerializer: 序列化对象为二进制数据
RedisTemplate默认使用的是JdkSerializationRedisSerializer对数据进行序列化。
SpringData提供了两种方式选择自己想要的序列化器:
1. 通过配置文件配置(作用范围是全局)
<!-- 配置redis模板,操作数据库时使用 --> <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"> <!-- 注入Jedis连接工厂,用于获取连接 --> <property name="connectionFactory" ref="jedisConnectionFactory"></property> <!-- 配置非hash类型的序列化器 key --> <property name="keySerializer"> <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"></bean> </property> <!-- value --> <property name="valueSerializer"> <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"></bean> </property> </bean>
2 . 通过RedisTemplate设定(作用范围是局部)
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:applicationContext-redis.xml") public class RedisTest { @Autowired private RedisTemplate redisTemplate; @Before public void init() { redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setValueSerializer(new StringRedisSerializer()); } @Test public void testSave() { // ValueOperations :简单字符串类型数据操作 // SetOperations :set类型数据操作 // ZSetOperations :zset类型数据操作 // HashOperations :map类型的数据操作 // ListOperations :list类型的数据操作 ValueOperations ops = redisTemplate.opsForValue(); ops.set("name", "lily"); } }