Redis支持的類型雖然有List,但是只支持List<String>
。
一般有兩種方式來存儲
1.序列化與反序列化
2.json
正常情況下序列化效率挺高的,但是遇到高並發的情況會導致消耗太高。
把數據轉換成json格式獲取的時候在轉換為對象,簡單快捷,所以這里使用第二種json格式來存儲List。
需要引入的jar包
<!-- json -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.7.4</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.7.4</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.7.4</version>
</dependency>
<!-- Jedis是Redis官方推薦的Java連接開發工具 -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.7.3</version>
</dependency>
<!-- 對Redis的Key-Value數據存儲操作提供了更高層次的抽象 -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>1.6.0.RELEASE</version>
</dependency>
package com.test;
import org.springframework.data.redis.core.RedisTemplate;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.core.type.TypeReference;
@Controller
@RequestMapping("/test")
public class Test{
@Autowired
private RedisTemplate redisTemplate;
//json轉換
final ObjectMapper objectMapper = new ObjectMapper();
@RequestMapping(value="/list", method = RequestMethod.GET)
private void list(){
//查詢出的用戶數據
List<User> list = null;
//list轉為json
String userJson = null;
try{
userJson = objectMapper.writeValueAsString(list);
} catch(Exception e){
e.printStackTrace();
}
//存入redis
redisTemplate.opsForValue().set("user", userJson, 5, TimeUnit.SECONDS);
//取出redis中的用戶列表
Object getUser = redisTemplate.opsForValue().get("user");
//json轉為list
try{
//先把redis中取出的數據轉為字符串,然后轉為list
//使用object.toString()方法把Object轉為字符串的話要注意Object不能為null否則會報NullPointException,一般別用這種方法。
list = objectMapper.readValue(String.valueOf(getUser), new TypeReference<List<User>>(){});
} catch(Exception e){
e.printStackTrace();
}
}
}
完