spring-data-redis提供了多种serializer策略,这对使用jedis的开发者而言,实在是非常便捷。sdr提供了4种内置的serializer:
- JdkSerializationRedisSerializer:使用JDK的序列化手段(serializable接口,ObjectInputStrean,ObjectOutputStream),数据以字节流存储,jdk序列化和反序列化数据
- StringRedisSerializer:字符串编码,数据以string存储
- JacksonJsonRedisSerializer:json格式存储
- OxmSerializer:xml格式存储
其中JdkSerializationRedisSerializer和StringRedisSerializer是最基础的序列化策略,其中“JacksonJsonRedisSerializer”与“OxmSerializer”都是基于stirng存储,因此它们是较为“高级”的序列化(最终还是使用string解析以及构建java对象)。
RedisTemplate中需要声明4种serializer,默认为“JdkSerializationRedisSerializer”:
1) keySerializer :对于普通K-V操作时,key采取的序列化策略
2) valueSerializer:value采取的序列化策略
3) hashKeySerializer: 在hash数据结构中,hash-key的序列化策略
4) hashValueSerializer:hash-value的序列化策略
无论如何,建议key/hashKey采用StringRedisSerializer。 这redis服务端用命令行好查看 配置如下
1、maven配置
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <spring.version>4.1.1.RELEASE</spring.version> </properties> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>1.4.1.RELEASE</version> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.6.0</version> <type>jar</type> <scope>compile</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> </dependencies>
2、spring xml配置文件
配置jedis的缓冲池
<!-- 配置Jedis的 缓冲池 --> <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig" p:maxTotal="32" p:maxIdle="6" p:maxWaitMillis="15000"> </bean>
配置ConnectionFactory
<!-- 配置Jedis connection --> <bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" p:poolConfig-ref="jedisPoolConfig" p:hostName="127.0.0.1" p:port="6379" p:usePool="true"> </bean>
创建RedisTemplate
<!-- 配置 redisTemplate 利用Stringserializer --> <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate" p:connectionFactory-ref="connectionFactory"> <property name="defaultSerializer"> <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" /> </property> <!-- 使用string主要是key 在redis端用命令好读 不然默认的序列化没办法读 --> <property name="keySerializer"> <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" /> </property> <property name="hashKeySerializer"> <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" /> </property> </bean>
3、案例
private static ApplicationContext context = null; private static RedisTemplate redisTemplate=null; @org.junit.BeforeClass public static void BeforeClass() { if (context == null) { System.out.println("ctx inited...."); context = new ClassPathXmlApplicationContext("spring-context.xml"); redisTemplate = context.getBean("redisTemplate",RedisTemplate.class); } }
1.String
@Test public void testString(){ ValueOperations opsForValue = redisTemplate.opsForValue(); opsForValue.set("string:name", "achuan"); opsForValue.set("string:id","1"); Object name = opsForValue.get("string:name"); assertNotNull(name); assertEquals("achuan", name.toString()); }
2.List
说到List Redis 提供了类似于消息队列的操作,
@Test public void testList() { ListOperations opsForList = redisTemplate.opsForList(); String keyName = "ListKey"; redisTemplate.delete(keyName); opsForList.leftPush(keyName, "zhangsan"); opsForList.leftPush(keyName, "lisi"); opsForList.leftPushAll(keyName, "wangwu", "zhaoliu", "qianqi"); Long size = opsForList.size(keyName); System.out.println("size:" + size); for (long i = 0; i < size; i++) { Object value = opsForList.index(keyName,i); System.out.println("i:"+i+",value:"+value.toString()); } Object leftPop = opsForList.leftPop(keyName); System.out.println("after pop size:"+opsForList.size(keyName)); }
3 Hashes (SETS 自己看看吧。。)
今天就先到这里,Redis 还有很多东西,比如cache transcation 等等 看下目录结构