spring使用redis操作key-value的示例代码

2020-03-06 12:01:04丽君

  @Bean
  public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory cf) {
    return new StringRedisTemplate(cf);
  }

有了 RedisTemplate(或 StringRedisTemplate)之后,我们就可以开始保存、获取以及删除 key-value 条目了。

使用简单的值

//设置值
redis.opsForValue().set("key1","value1");
//获取值
redis.opsForValue().get("key1");

使用 List 类型的值

例如,我们可以在一个 List 类型的条目尾部添加一个值:

redis.opsForList().rightPush("cart", product);

而 leftPush() 则会在列表的头部添加一个值:

redis.opsForList().leftPush("cart", product);

可以通过 leftPop() 或 rightPop() 方法从列表中弹出一个元素:

Product first = redis.opsForList().leftPop("cart");
Product last = redis.opsForList().rightPop("cart");

除了从列表中获取值以外,这两个方法还有一个副作用就是从列表中移除所弹出的元素。如果你只是想获取值的话(甚至可能要在列表的中间获取),那么可以使用 range() 方法:

range() 方法不会从列表中移除任何元素,但是它会根据指定的 key 和索引范围,获取范围内的一个或多个值。前面的样例中,会获取 11 个元素,从索引为 2 的元素到索引为 12 的元素(不包含)。如果范围超出了列表的边界,那么只会返回索引在范围内的元素。如果该索引范围内没有元素的话,将会返回一个空的列表。

List<Product> products = redis.opsForList().range("cart", 2, 12);

在 Set 上执行操作

添加一个元素:

redis.opsForSet().add("cart", product);

绑定到某个 key 上

BoundListOperations<String, Product> cart = redis.boundListOps("cart"); 
Product popped = cart.rightPop(); 
Product product1 = null; 
cart.rightPush(product1); 
Product product2 = null; 
cart.rightPush(product2); 
Product product3 = null; 
cart.rightPush(product3);

我们只在一个地方使用了条目的 key,也就是调用 boundListOps() 的时候。对返回的 BoundListOperations 执行的所有操作都会应用到这个 key 上。

使用 key 和 value 的序列化器

当某个条目保存到 Redis key-value 存储的时候,key 和 value 都会使用 Redis 的序列化器(serializer)进行序列化。Spring Data Redis 提供了多个这样的序列化器,包括:

GenericToStringSerializer:使用 Spring 转换服务进行序列化; JacksonJsonRedisSerializer:使用 Jackson 1,将对象序列化为 JSON; Jackson2JsonRedisSerializer:使用 Jackson 2,将对象序列化为JSON; JdkSerializationRedisSerializer:使用 Java 序列化; OxmSerializer:使用 Spring O/X 映射的编排器和解排器 (marshaler 和 unmarshaler)实现序列化,用于 XML 序列化; StringRedisSerializer:序列化 String 类型的 key 和 value。