这应该是最全的Redis解析了( 三 )


清单 3. RedisTemplate 和 StringRedisTemplate 的配置
@Configurationpublic class RedisConfig {@Bean@ConditionalOnMissingBean(name = "redisTemplate")public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(Object.class);ObjectMapper om = new ObjectMapper();om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);jackson2JsonRedisSerializer.setObjectMapper(om);RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();template.setConnectionFactory(redisConnectionFactory);template.setKeySerializer(jackson2JsonRedisSerializer);template.setValueSerializer(jackson2JsonRedisSerializer);template.setHashKeySerializer(jackson2JsonRedisSerializer);template.setHashValueSerializer(jackson2JsonRedisSerializer);template.afterPropertiesSet();return template;}@Bean@ConditionalOnMissingBean(StringRedisTemplate.class)public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) {StringRedisTemplate template = new StringRedisTemplate();template.setConnectionFactory(redisConnectionFactory);return template;}}操作字符串
StringRedisTempalte 在上面已经初始化好了,我们只需要在需要用到的地方通过 @AutoWired 注解注入就行 。

  1. 设置值,对于设置值,我们可以使用 opsForValue().void set(K var1, V var2);
@Testpublic void testSet() {stringRedisTemplate.opsForValue().set("test-string-value", "Hello Redis");}
  1. 获取值,与 set 方法相对于 StringRedisTemplate 还提供了.opsForValue().get(Object
    var1) 方法来获取指定 key 对应的 value 值 。
@Testpublic void testGet() {String value = https://www.isolves.com/it/sjk/Redis/2021-01-13/stringRedisTemplate.opsForValue().get("test-string-value");System.out.println(value);}
  1. 设置值的时候设置过期时间 。在设置缓存的时候,我们通常都会给他设置一个过期时间,让其能够达到定时刷新的效果 。StringRedisTemplate 提供了 void
    set(K var1, V var2, long var3, TimeUnitvar5) 方法来达到设置过期时间的目的,其中 var3 这个参数就是过期时间的数值,而 TimeUnit 是个枚举类型,我们用它来设置过期时间的单位,是小时或是秒等等 。
@Testpublic void testSetTimeOut() {stringRedisTemplate.opsForValue().set("test-string-key-time-out", "Hello Redis", 3, TimeUnit.HOURS);}
  1. 删除数据,我们同样可以通过 StringRedisTmeplate 来删除数据,Boolean delete(K
    key)方法提供了这个功能 。
@Testpublic void testDeleted() {stringRedisTemplate.delete("test-string-value");}操作数组
在 Redis 数据类型小节中,我们提到过我们经常使用 Redis
的 lpush/rpush/lpop/rpop 四条指令来实现一个队列 。那么这四条指令在 RedisTemplate 中也有相应的实现 。
  1. leftPush(K key, V value),往 List 左侧插入一个元素,如 从左边往数组中 push
    元素:
@Test public void testLeftPush() {redisTemplate.opsForList().leftPush("TestList", "TestLeftPush"); }
  1. rightPush(K key, V value),往 List 右侧插入一个元素,如从右边往数组中 push
    元素:
@Testpublic void testRightPush() {redisTemplate.opsForList().rightPush("TestList", "TestRightPush");}
  1. 执行完上面两个 Test 之后,我们可以使用 Redis 客户端工具 RedisDesktopManager
    来查看 TestList 中的内容,如下图 (Push 之后 TestList 中的内容)所示:

这应该是最全的Redis解析了

文章插图
 
此时我们再一次执行 leftPush 方法,TestList 的内容就会变成下图(第二次执行leftPush 之后的内容)所示:
这应该是最全的Redis解析了

文章插图
 
可以看到 leftPush 实际上是往数组的头部新增一个元素,那么 rightPush就是往数组尾部插入一个元素 。
  1. leftPop(K key),从 List 左侧取出第一个元素,并移除,
    如从数组头部获取并移除值:
@Testpublic void testLeftPop() {Object leftFirstElement = redisTemplate.opsForList().leftPop("TestList");System.out.println(leftFirstElement);}执行上面的代码之后,您会看到控制台会打印出 TestLeftPush,然后再去RedisDesktopManager 中查看 TestList 的内容,如下图(同数组顶端移除一个元素后)所示 。您会发现数组中的第一个元素已经被移除了 。


推荐阅读