spring-data-redis RedisTemplate操作
使用RedisTemplate来对对象、String等做缓存处理
首先定义一个对象并重写toString方法
public class UserInfo implements Serializable{
private int id;
private String name;
private String password;
private String salt;
private String role;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getSalt() {
return salt;
}
public void setSalt(String salt) {
this.salt = salt;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
@Override
public String toString(){
return "name="+name+", password="+password+", salt="+salt+", role="+role;
}
}
自定义RedisConfig文件,自定义RedisTemplate,设定相应的序列化方式
Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport{
public RedisConfig() {
super();
}
@Bean
public CacheManager cacheManager(RedisTemplate<?,?> redisTemplate) {
RedisCacheManager rcm = new RedisCacheManager(redisTemplate);
return rcm;
}
@Override
public KeyGenerator keyGenerator() {
KeyGenerator keyGenerator = new KeyGenerator() {
@Override
public Object generate(Object o, Method method, Object... objects) {
StringBuilder sb = new StringBuilder();
sb.append(o.getClass().getName());
sb.append(method.getName());
for (Object obj : objects) {
sb.append(obj.toString());
}
return sb.toString();
}
};
return keyGenerator;
}
@Override
public CacheResolver cacheResolver() {
return super.cacheResolver();
}
@Override
public CacheErrorHandler errorHandler() {
return super.errorHandler();
}
/**
* redis 序列化策略 ,通常情况下key值采用String序列化策略
* StringRedisTemplate默认采用的是String的序列化策略,保存的key和value都是采用此策略序列化保存的。StringRedisSerializer
* RedisTemplate默认采用的是JDK的序列化策略,保存的key和value都是采用此策略序列化保存的。JdkSerializationRedisSerializer
* @param factory
* @return
*/
@Bean
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory factory){
RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(factory);
// 使用Jackson2JsonRedisSerialize 替换默认序列化
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
//设置value的序列化方式
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
//设置key的序列化方式
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
}
对各种RedisTemplate进行操作测试
@Test
public void getUser() throws Exception {
UserInfo userInfo = new UserInfo();
userInfo.setId(4);
userInfo.setName("1");
userInfo.setSalt("1");
userInfo.setRole("1");
userInfo.setPassword("1");
UserInfo userInfo1 = new UserInfo();
userInfo.setId(6);
userInfo1.setName("2");
userInfo1.setSalt("2");
userInfo1.setRole("2");
userInfo1.setPassword("2");
ArrayList<UserInfo> list = new ArrayList<>();
list.add(userInfo);
list.add(userInfo1); //redis 基本的key value
ValueOperations<String, UserInfo> valueOperations = redisTemplate.opsForValue();
valueOperations.set(String.valueOf(17), userInfo); /**
* ["java.util.ArrayList",[["com.redistest.domain.UserInfo",{"id":6,"name":"1","password":"1","salt":"1","role":"1"}],["com.redistest.domain.UserInfo",{"id":0,"name":"2","password":"2","salt":"2","role":"2"}]]]
*/
//redis list对象保存, 会存bean的名字
ValueOperations<String, List> valueOperations1 = redisTemplate.opsForValue();
valueOperations1.set(String.valueOf(18), list); //redisTemplate.setDefaultSerializer(new Jackson2JsonRedisSerializer<UserInfo>(UserInfo.class)); //如果用Jackson2JsonRedisSerializer ,存储的有bean的名字,则能直接转换为相应的对象,不需要再做转换
//如果存储的string里面没有bean的名字则返回的arrayList里面是 LinkedHasMap, 需要用Jsos转为String再转为Bean
ArrayList<UserInfo> arrayList = (ArrayList<UserInfo>) redisTemplate.opsForValue().get(18+"");
for (UserInfo o :arrayList){
// JSONObject userInfo = JSONObject.parseObject(JSONObject.toJSONString(o));
// UserInfo userInfo1 = userInfo.toJavaObject(UserInfo.class);
System.out.println(o.toString());
} // redisTemplate.opsForValue();
// Object o = redisTemplate.opsForValue().get(6+"");
// redisTestController.getUser(6);
}
不适用RedisTemplate的序列化方式,使用fastJson首先对对象转换为相应的String再进行存储
@Test
public void testGson(){
UserInfo userInfo = new UserInfo();
userInfo.setPassword("g");
userInfo.setRole("g");
userInfo.setName("g");
userInfo.setSalt("g");
userInfo.setId(1);
//将java的bean作为一个json的字符串存储到redis中
String str = JSONObject.toJSONString(userInfo);
redisTemplate.opsForValue().set("g", str); //取出redis的string,转换为UserInfo bean
String s = (String) redisTemplate.opsForValue().get("g");
UserInfo userInfo1 = JSONObject.parseObject(s).toJavaObject(UserInfo.class);
System.out.println(userInfo1.toString()); }
使用RedisTemplate。fastJson 来对ArrayList对象进行存储
@Test
public void testGson(){
UserInfo userInfo = new UserInfo();
userInfo.setPassword("g");
userInfo.setRole("g");
userInfo.setName("g");
userInfo.setSalt("g");
userInfo.setId(1);
//将java的bean作为一个json的字符串存储到redis中
String str = JSONObject.toJSONString(userInfo);
redisTemplate.opsForValue().set("g", str); //取出redis的string,转换为UserInfo bean
String s = (String) redisTemplate.opsForValue().get("g");
UserInfo userInfo1 = JSONObject.parseObject(s).toJavaObject(UserInfo.class);
System.out.println(userInfo1.toString()); //测试arrayList对象
ArrayList<UserInfo> arrayList = new ArrayList<>();
UserInfo userInfo2 = new UserInfo();
userInfo2.setPassword("gg");
userInfo2.setRole("ggg");
userInfo2.setName("gg");
userInfo2.setSalt("ggg");
userInfo2.setId(2);
arrayList.add(userInfo);
arrayList.add(userInfo1);
arrayList.add(userInfo2);
String s1 = JSON.toJSONString(arrayList);
redisTemplate.opsForValue().set("gg", s1);
//测试取出对象
String ss = (String) redisTemplate.opsForValue().get("gg");
System.out.println("存储的原始的String字符串");
//[{"id":1,"name":"g","password":"g","role":"g","salt":"g"},{"id":1,"name":"g","password":"g","role":"g","salt":"g"},{"id":2,"name":"gg","password":"gg","role":"ggg","salt":"ggg"}]
System.out.println(ss);
ArrayList<UserInfo> arrayList1 = JSON.parseObject(ss, new TypeReference<ArrayList<UserInfo>>(){}); System.out.println("转换后单个UserInfo");
for (UserInfo userInfo3 : arrayList1){
System.out.println(userInfo3.toString());
}
//ArrayList<UserInfo> arrayList1 = JSONObject.parseObject(ss); }
以下使用FastJson的GenericFastJsonRedisSerializer 对RedisTemplate序列化
//使用fastJson作为默认的序列化方式
GenericFastJsonRedisSerializer genericFastJsonRedisSerializer = new GenericFastJsonRedisSerializer();
redisTemplate.setDefaultSerializer(genericFastJsonRedisSerializer);
@Test
public void testFastJsonSerializer(){
UserInfo userInfo = new UserInfo();
userInfo.setId(4);
userInfo.setName("1");
userInfo.setSalt("1");
userInfo.setRole("1");
userInfo.setPassword("1");
redisTemplate.opsForValue().set("121", userInfo);
//存储到redis的数据将bean的名字作为一个type存储
/**
* {
"@type": "com.redistest.domain.UserInfo",
"id": 4,
"name": "1",
"password": "1",
"role": "1",
"salt": "1"
}
*/
System.out.println("获取输出");
UserInfo userInfo1 = (UserInfo) redisTemplate.opsForValue().get("121");
System.out.println(userInfo1.toString()); //测试list
/**
* [
{
"@type": "com.redistest.domain.UserInfo",
"id": 4,
"name": "1",
"password": "1",
"role": "1",
"salt": "1"
},
{
"@type": "com.redistest.domain.UserInfo",
"id": 4,
"name": "1",
"password": "1",
"role": "1",
"salt": "1"
}
]
*/
ArrayList<UserInfo> arrayList1 = new ArrayList<>();
arrayList1.add(userInfo);
arrayList1.add(userInfo1);
redisTemplate.opsForValue().set("1212", arrayList1);
System.out.println("获取arrayList输出");
JSONArray jsonArray = (JSONArray) redisTemplate.opsForValue().get("1212");
ArrayList<UserInfo> arrayList11 = jsonArray.toJavaObject(new TypeReference<ArrayList<UserInfo>>(){});
for (UserInfo userInfo2 : arrayList11){
System.out.println(userInfo2);
} }
spring-data-redis RedisTemplate操作的更多相关文章
- spring data redis RedisTemplate操作redis相关用法
http://blog.mkfree.com/posts/515835d1975a30cc561dc35d spring-data-redis API:http://docs.spring.io/sp ...
- spring mvc Spring Data Redis RedisTemplate [转]
http://maven.springframework.org/release/org/springframework/data/spring-data-redis/(spring-data包下载) ...
- Spring Data Redis简介以及项目Demo,RedisTemplate和 Serializer详解
一.概念简介: Redis: Redis是一款开源的Key-Value数据库,运行在内存中,由ANSI C编写,详细的信息在Redis官网上面有,因为我自己通过google等各种渠道去学习Redis, ...
- Spring Data Redis入门示例:字符串操作(六)
Spring Data Redis对字符串的操作,封装在了ValueOperations和BoundValueOperations中,在集成好了SPD之后,在需要的地方引入: // 注入模板操作实例 ...
- Spring Boot使用Spring Data Redis操作Redis(单机/集群)
说明:Spring Boot简化了Spring Data Redis的引入,只要引入spring-boot-starter-data-redis之后会自动下载相应的Spring Data Redis和 ...
- 使用Spring Data Redis操作Redis(集群版)
说明:请注意Spring Data Redis的版本以及Spring的版本!最新版本的Spring Data Redis已经去除Jedis的依赖包,需要自行引入,这个是个坑点.并且会与一些低版本的Sp ...
- 使用Spring Data Redis操作Redis(单机版)
说明:请注意Spring Data Redis的版本以及Spring的版本!最新版本的Spring Data Redis已经去除Jedis的依赖包,需要自行引入,这个是个坑点.并且会与一些低版本的Sp ...
- Spring Data Redis入门示例:Hash操作(七)
将对象存为Redis中的hash类型,可以有两种方式,将每个对象实例作为一个hash进行存储,则实例的每个属性作为hash的field:同种类型的对象实例存储为一个hash,每个实例分配一个field ...
- spring data redis 理解
前言 Spring Data Redis project,应用了Spring概念来开发使用键值形式的数据存储的解决方案.我们(官方)提供了一个 "template" ,这是一个高级 ...
- Spring Data Redis 详解及实战一文搞定
SDR - Spring Data Redis的简称. Spring Data Redis提供了从Spring应用程序轻松配置和访问Redis的功能.它提供了与商店互动的低级别和高级别抽象,使用户免受 ...
随机推荐
- Java中基本的打包jar和war文件(包括eclipse打包操作)
前言: 为什么要打jar包? 1.举个例子,当编写一个工具类库,里面有十几个类,每个类对应一个class文件时,为了方便别人调用,是不是要装在一个文件中,方便传递和引用. 2.打jar包还有一个好处, ...
- mysql老司机之路
MYSQL数据库基础: 数据库帮我们解决以下数据存取难题: 较大数据量 事务控制 持久化和数据安全 高性能要求 高并发访问 关系型:mysql,oracle,sql server,postgresql ...
- 网络库libevent、libev、libuv对比
Libevent.libev.libuv三个网络库,都是c语言实现的异步事件库Asynchronousevent library). 异步事件库本质上是提供异步事件通知(Asynchronous Ev ...
- Importance sampling
用蒙特卡洛求解积分时 (Monte Carlo 随机采样对目标积分函数做近似) importance sampling func p(x) p(x)值大的地方,Monte Carlo多采几次 值小的地 ...
- GIS可视化——聚散图
一.简介 随着计算机的发展,浏览器的不断进步与完善,现今大部分浏览渲染效率有了很大的改善, 但是由于浏览器厂商的不同,浏览器种类繁多,性能不一,并且很多用户还使用着不少老的浏览, 那些如IE6.7等的 ...
- AutoCAD如何移动零件和缩放零件图
如下图所示,我想要把这个零件放大并移动到图纸的中央,先全部选中这个零件,方法是在左上角点一下,然后拖出一个矩形包围整个零件 然后点击右侧的缩放命令,底部的命令栏变成指定基点的时候,在这个图纸的右上 ...
- Jackson.jar的使用记录
Jackson.jar的使用记录 之前一直使用json-lib.jar,近期发现网上说这个jackson.jar比較好 package com.spring.controller; import ja ...
- Interleaving String——是否由两个string交叉、DP
Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2. For example,Given:s1 = ...
- 【Android实战】Gallary+ImageSwicther图片查看器
仿照如今各大新闻站点图片新闻的浏览模式,上面展示详细图片(ImageSwitch),以下是能够滑动的小图片(Gallery). 当中须要注意的是ImageSwitch须要定义一个工厂返回的组件,而且能 ...
- Django之便签生成
myblog_tag.py #coding:utf-8 __author__ = 'similarface'from django import template register=template. ...