@Configuration
public class RedisConfig {
@Resource
private RedisConnectionFactory factory;
@Bean
public RedisTemplate<String, Object> redisTemplate() {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new JsonRedisSerializer<>(Object.class));
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(new JsonRedisSerializer<>(Object.class));
redisTemplate.setConnectionFactory(factory);
return redisTemplate;
}
}
/**
* Redis序列化
*
* @author Mark sunlightcs@gmail.com
*/
public class JsonRedisSerializer<T> implements RedisSerializer<T> {
private static ParserConfig defaultRedisConfig = new ParserConfig();
static {
defaultRedisConfig.setAutoTypeSupport(true);
}
private Class<T> type;
public JsonRedisSerializer(Class<T> type) {
this.type = type;
}
@Override
public byte[] serialize(T t) throws SerializationException {
if (t == null) {
return new byte[0];
}
return JSON.toJSONString(t, SerializerFeature.WriteClassName).getBytes(IOUtils.UTF8);
}
@Override
public T deserialize(byte[] bytes) throws SerializationException {
if (bytes == null || bytes.length <= 0) {
return null;
}
String str = new String(bytes, IOUtils.UTF8);
return JSON.parseObject(str, type, defaultRedisConfig);
}
}
@Autowired
RedisTemplate<String ,Object> redisTemplate;
@Test
public void contextLoads() {
List<User> list=new ArrayList<>();
for(int i=0;i<10;i++){
User user=new User();
user.setId((long)i);
user.setAddress("北京路100"+i+"号");
user.setName("100"+i);
if(i%2==0){
user.setSex("男");
}else{
user.setSex("女");
}
list.add(user);
}
BoundHashOperations<String,Object,Object> hashOperations = redisTemplate.boundHashOps("user");
hashOperations.put("haha",list);
}
@Test
public void getvalue(){
BoundHashOperations<String,Object,Object> hashOperations = redisTemplate.boundHashOps("user");
Object haha = hashOperations.get("haha");
Gson gson = new Gson();
String listString = gson.toJson(haha);
List<User> bcUsers = gson.fromJson(listString, new TypeToken<List<User>>() {
}.getType());
bcUsers.forEach(user -> {
System.out.println(user.getId());
});
}
@Test
public void deletekey(){
BoundHashOperations<String,Object,Object> hashOperations = redisTemplate.boundHashOps("user");
Long haha = hashOperations.delete("haha");
System.out.println(haha);
}
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.45</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.5</version>
<scope>test</scope>
</dependency>
spring:
redis:
database: 0
host: localhost
port: 6379
password: # 密码(默认为空)
timeout: 6000ms # 连接超时时长(毫秒)
jedis:
pool:
max-active: 1000 # 连接池最大连接数(使用负值表示没有限制)
max-wait: -1ms # 连接池最大阻塞等待时间(使用负值表示没有限制)
max-idle: 10 # 连接池中的最大空闲连接
min-idle: 5 # 连接池中的最小空闲连接