3. SpringBoot整合Redis

1.下载地址以及安装

https://github.com/MicrosoftArchive/redis/releases

我是安装的windows版本所以选择这个:

3. SpringBoot整合Redis

解压之后运行,注意在安装目录下,我的是 F:\开发\Redis-x64-3.0.504 目录下执行cmd:

redis-server.exe redis.windows.conf

3. SpringBoot整合Redis

下一步可以cmd登录进去看看:

redis-cli.exe -h 127.0.0.1 -p 6379

这样我们就把Redis客户端安装好了,剩下开始集成。

  1. redis 介绍

在分布式缓存领域,使用最多的就是 Redis。

Redis 支持非常丰富的数据类型,包括字符串(string)、列表(list)、集合(set)、有序集合(zset)、哈希表(hash)等常用的数据结构。当然,它也支持一些其他的比如位图(bitmap)一类的数据结构。

Redis 在互联网中,几乎是标配。

3.SpringBoot 如何使用 Redis

使用 SpringBoot 可以很容易地对 Redis 进行操作

Java 的 Redis的客户端,常用的有三个:jedis、redisson 和 lettuce,Spring 默认使用的是 lettuce。

  • lettuce 是使用 netty 开发的,操作是异步的,性能比常用的 jedis 要高;
  • redisson 也是异步的,但它对常用的业务操作进行了封装,适合书写有业务含义的代码。

通过加入下面的 jar 包即可方便地使用 Redis:

<dependency>
    <groupid>org.springframework.boot</groupid>
    <artifactid>spring-boot-starter-data-redis</artifactid>
    <version>2.7.2</version>
</dependency>
<dependency>
    <groupid>redis.clients</groupid>
    <artifactid>jedis</artifactid>
</dependency>

上面这种方式,我们主要是使用 RedisTemplate 这个类。它针对不同的数据类型,抽象了相应的方法组。

Yml配置 :

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/***
    username: root
    password: 123456
  redis:
    host: 127.0.0.1
    port: 6379
    #password: 123456
    database: 0 #&#x64CD;&#x4F5C;&#x7684;&#x662F;0&#x53F7;&#x6570;&#x636E;&#x5E93;
    jedis:
      #Redis&#x8FDE;&#x63A5;&#x6C60;&#x914D;&#x7F6E;
      pool:
        max-active: 8 #&#x6700;&#x5927;&#x8FDE;&#x63A5;&#x6570;
        max-wait: 1ms #&#x8FDE;&#x63A5;&#x6C60;&#x6700;&#x5927;&#x963B;&#x585E;&#x7B49;&#x5F85;&#x65F6;&#x95F4;
        max-idle: 4 #&#x8FDE;&#x63A5;&#x6C60;&#x4E2D;&#x7684;&#x6700;&#x5927;&#x7A7A;&#x95F2;&#x8FDE;&#x63A5;
        min-idle: 0 #&#x8FDE;&#x63A5;&#x6C60;&#x4E2D;&#x7684;&#x6700;&#x5C0F;&#x7A7A;&#x95F2;&#x8FDE;&#x63A5;

RedisConfig 配置RedisTemplate :

package com.springboot.test.config.redis;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration
public class RedisConfig {
    @Bean
    public RedisTemplate<string, object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<string, object> template = new RedisTemplate<string, object>();
        template.setConnectionFactory(factory);
        // key&#x91C7;&#x7528;String&#x7684;&#x5E8F;&#x5217;&#x5316;&#x65B9;&#x5F0F;
        template.setKeySerializer(new StringRedisSerializer());
        // hash&#x7684;key&#x4E5F;&#x91C7;&#x7528;String&#x7684;&#x5E8F;&#x5217;&#x5316;&#x65B9;&#x5F0F;
        template.setHashKeySerializer(new StringRedisSerializer());
        // value&#x5E8F;&#x5217;&#x5316;&#x65B9;&#x5F0F;&#x91C7;&#x7528;jackson
        template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        // hash&#x7684;value&#x5E8F;&#x5217;&#x5316;&#x65B9;&#x5F0F;&#x91C7;&#x7528;jackson
        template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
        template.afterPropertiesSet();
        return template;
    }

}

</string,></string,></string,>

RedisTemplateUtil 工具类:

package com.springboot.test.config.redis;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.BoundListOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;

import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;

/**
 * redisTemplate&#x5C01;&#x88C5;
 *
 *  @author yinxp@dist.com.cn
 */
@Component
public class RedisTemplateUtil {

    @Autowired
    private RedisTemplate<string, object> redisTemplate;

    public RedisTemplateUtil(RedisTemplate<string, object> redisTemplate) {
        this.redisTemplate = redisTemplate;
    }

    /**
     * &#x6307;&#x5B9A;&#x7F13;&#x5B58;&#x5931;&#x6548;&#x65F6;&#x95F4;
     * @param key &#x952E;
     * @param time &#x65F6;&#x95F4;(&#x79D2;)
     * @return
     */
    public boolean expire(String key,long time){
        try {
            if(time>0){
                redisTemplate.expire(key, time, TimeUnit.SECONDS);
            }
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * &#x6839;&#x636E;key &#x83B7;&#x53D6;&#x8FC7;&#x671F;&#x65F6;&#x95F4;
     * @param key &#x952E; &#x4E0D;&#x80FD;&#x4E3A;null
     * @return &#x65F6;&#x95F4;(&#x79D2;) &#x8FD4;&#x56DE;0&#x4EE3;&#x8868;&#x4E3A;&#x6C38;&#x4E45;&#x6709;&#x6548;
     */
    public long getExpire(String key){
        return redisTemplate.getExpire(key,TimeUnit.SECONDS);
    }

    /**
     * &#x5224;&#x65AD;key&#x662F;&#x5426;&#x5B58;&#x5728;
     * @param key &#x952E;
     * @return true &#x5B58;&#x5728; false&#x4E0D;&#x5B58;&#x5728;
     */
    public boolean hasKey(String key){
        try {
            return redisTemplate.hasKey(key);
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * &#x5220;&#x9664;&#x7F13;&#x5B58;
     * @param key &#x53EF;&#x4EE5;&#x4F20;&#x4E00;&#x4E2A;&#x503C; &#x6216;&#x591A;&#x4E2A;
     */
    @SuppressWarnings("unchecked")
    public void del(String ... key){
        if(key!=null&&key.length>0){
            if(key.length==1){
                redisTemplate.delete(key[0]);
            }else{
                redisTemplate.delete((Collection<string>) CollectionUtils.arrayToList(key));
            }
        }
    }

    //============================String=============================
    /**
     * &#x666E;&#x901A;&#x7F13;&#x5B58;&#x83B7;&#x53D6;
     * @param key &#x952E;
     * @return &#x503C;
     */
    public Object get(String key){
        return key==null?null:redisTemplate.opsForValue().get(key);
    }

    /**
     * &#x666E;&#x901A;&#x7F13;&#x5B58;&#x653E;&#x5165;
     * @param key &#x952E;
     * @param value &#x503C;
     * @return true&#x6210;&#x529F; false&#x5931;&#x8D25;
     */
    public boolean set(String key,Object value) {
        try {
            redisTemplate.opsForValue().set(key, value);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * &#x666E;&#x901A;&#x7F13;&#x5B58;&#x653E;&#x5165;&#x5E76;&#x8BBE;&#x7F6E;&#x65F6;&#x95F4;
     * @param key &#x952E;
     * @param value &#x503C;
     * @param time &#x65F6;&#x95F4;(&#x79D2;) time&#x8981;&#x5927;&#x4E8E;0 &#x5982;&#x679C;time&#x5C0F;&#x4E8E;&#x7B49;&#x4E8E;0 &#x5C06;&#x8BBE;&#x7F6E;&#x65E0;&#x9650;&#x671F;
     * @return true&#x6210;&#x529F; false &#x5931;&#x8D25;
     */
    public boolean set(String key,Object value,long time){
        try {
            if(time>0){
                redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);
            }else{
                set(key, value);
            }
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * &#x9012;&#x589E;
     * @param key &#x952E;
     * @param delta &#x8981;&#x589E;&#x52A0;&#x51E0;(&#x5927;&#x4E8E;0)
     * @return
     */
    public long incr(String key, long delta){
        if(delta<0){ throw new runtimeexception("递增因子必须大于0"); } return redistemplate.opsforvalue().increment(key, delta); ** * 递减 @param key 键 delta 要减少几(小于0) @return public long decr(string key, delta){ if(delta<0){ runtimeexception("递减因子必须大于0"); -delta); =="==============================Map=================================" hashget 不能为null item 项 值 object hget(string key,string item){ redistemplate.opsforhash().get(key, item); 获取hashkey对应的所有键值 对应的多个键值 map<object,object> hmget(String key){
        return redisTemplate.opsForHash().entries(key);
    }

    /**
     * HashSet
     * @param key &#x952E;
     * @param map &#x5BF9;&#x5E94;&#x591A;&#x4E2A;&#x952E;&#x503C;
     * @return true &#x6210;&#x529F; false &#x5931;&#x8D25;
     */
    public boolean hmset(String key, Map<string,object> map){
        try {
            redisTemplate.opsForHash().putAll(key, map);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * HashSet &#x5E76;&#x8BBE;&#x7F6E;&#x65F6;&#x95F4;
     * @param key &#x952E;
     * @param map &#x5BF9;&#x5E94;&#x591A;&#x4E2A;&#x952E;&#x503C;
     * @param time &#x65F6;&#x95F4;(&#x79D2;)
     * @return true&#x6210;&#x529F; false&#x5931;&#x8D25;
     */
    public boolean hmset(String key, Map<string,object> map, long time){
        try {
            redisTemplate.opsForHash().putAll(key, map);
            if(time>0){
                expire(key, time);
            }
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * &#x5411;&#x4E00;&#x5F20;hash&#x8868;&#x4E2D;&#x653E;&#x5165;&#x6570;&#x636E;,&#x5982;&#x679C;&#x4E0D;&#x5B58;&#x5728;&#x5C06;&#x521B;&#x5EFA;
     * @param key &#x952E;
     * @param item &#x9879;
     * @param value &#x503C;
     * @return true &#x6210;&#x529F; false&#x5931;&#x8D25;
     */
    public boolean hset(String key,String item,Object value) {
        try {
            redisTemplate.opsForHash().put(key, item, value);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * &#x5411;&#x4E00;&#x5F20;hash&#x8868;&#x4E2D;&#x653E;&#x5165;&#x6570;&#x636E;,&#x5982;&#x679C;&#x4E0D;&#x5B58;&#x5728;&#x5C06;&#x521B;&#x5EFA;
     * @param key &#x952E;
     * @param item &#x9879;
     * @param value &#x503C;
     * @param time &#x65F6;&#x95F4;(&#x79D2;)  &#x6CE8;&#x610F;:&#x5982;&#x679C;&#x5DF2;&#x5B58;&#x5728;&#x7684;hash&#x8868;&#x6709;&#x65F6;&#x95F4;,&#x8FD9;&#x91CC;&#x5C06;&#x4F1A;&#x66FF;&#x6362;&#x539F;&#x6709;&#x7684;&#x65F6;&#x95F4;
     * @return true &#x6210;&#x529F; false&#x5931;&#x8D25;
     */
    public boolean hset(String key,String item,Object value,long time) {
        try {
            redisTemplate.opsForHash().put(key, item, value);
            if(time>0){
                expire(key, time);
            }
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * &#x5220;&#x9664;hash&#x8868;&#x4E2D;&#x7684;&#x503C;
     * @param key &#x952E; &#x4E0D;&#x80FD;&#x4E3A;null
     * @param item &#x9879; &#x53EF;&#x4EE5;&#x4F7F;&#x591A;&#x4E2A; &#x4E0D;&#x80FD;&#x4E3A;null
     */
    public void hdel(String key, Object... item){
        redisTemplate.opsForHash().delete(key,item);
    }

    /**
     * &#x5224;&#x65AD;hash&#x8868;&#x4E2D;&#x662F;&#x5426;&#x6709;&#x8BE5;&#x9879;&#x7684;&#x503C;
     * @param key &#x952E; &#x4E0D;&#x80FD;&#x4E3A;null
     * @param item &#x9879; &#x4E0D;&#x80FD;&#x4E3A;null
     * @return true &#x5B58;&#x5728; false&#x4E0D;&#x5B58;&#x5728;
     */
    public boolean hHasKey(String key, String item){
        return redisTemplate.opsForHash().hasKey(key, item);
    }

    /**
     * hash&#x9012;&#x589E; &#x5982;&#x679C;&#x4E0D;&#x5B58;&#x5728;,&#x5C31;&#x4F1A;&#x521B;&#x5EFA;&#x4E00;&#x4E2A; &#x5E76;&#x628A;&#x65B0;&#x589E;&#x540E;&#x7684;&#x503C;&#x8FD4;&#x56DE;
     * @param key &#x952E;
     * @param item &#x9879;
     * @param by &#x8981;&#x589E;&#x52A0;&#x51E0;(&#x5927;&#x4E8E;0)
     * @return
     */
    public double hincr(String key, String item,double by){
        return redisTemplate.opsForHash().increment(key, item, by);
    }

    /**
     * hash&#x9012;&#x51CF;
     * @param key &#x952E;
     * @param item &#x9879;
     * @param by &#x8981;&#x51CF;&#x5C11;&#x8BB0;(&#x5C0F;&#x4E8E;0)
     * @return
     */
    public double hdecr(String key, String item,double by){
        return redisTemplate.opsForHash().increment(key, item,-by);
    }

    //============================set=============================
    /**
     * &#x6839;&#x636E;key&#x83B7;&#x53D6;Set&#x4E2D;&#x7684;&#x6240;&#x6709;&#x503C;
     * @param key &#x952E;
     * @return
     */
    public Set<object> sGet(String key){
        try {
            return redisTemplate.opsForSet().members(key);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * &#x6839;&#x636E;value&#x4ECE;&#x4E00;&#x4E2A;set&#x4E2D;&#x67E5;&#x8BE2;,&#x662F;&#x5426;&#x5B58;&#x5728;
     * @param key &#x952E;
     * @param value &#x503C;
     * @return true &#x5B58;&#x5728; false&#x4E0D;&#x5B58;&#x5728;
     */
    public boolean sHasKey(String key,Object value){
        try {
            return redisTemplate.opsForSet().isMember(key, value);
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * &#x5C06;&#x6570;&#x636E;&#x653E;&#x5165;set&#x7F13;&#x5B58;
     * @param key &#x952E;
     * @param values &#x503C; &#x53EF;&#x4EE5;&#x662F;&#x591A;&#x4E2A;
     * @return &#x6210;&#x529F;&#x4E2A;&#x6570;
     */
    public long sSet(String key, Object...values) {
        try {
            return redisTemplate.opsForSet().add(key, values);
        } catch (Exception e) {
            e.printStackTrace();
            return 0;
        }
    }

    /**
     * &#x5C06;set&#x6570;&#x636E;&#x653E;&#x5165;&#x7F13;&#x5B58;
     * @param key &#x952E;
     * @param time &#x65F6;&#x95F4;(&#x79D2;)
     * @param values &#x503C; &#x53EF;&#x4EE5;&#x662F;&#x591A;&#x4E2A;
     * @return &#x6210;&#x529F;&#x4E2A;&#x6570;
     */
    public long sSetAndTime(String key,long time,Object...values) {
        try {
            Long count = redisTemplate.opsForSet().add(key, values);
            if(time>0) {
                expire(key, time);
            }
            return count;
        } catch (Exception e) {
            e.printStackTrace();
            return 0;
        }
    }

    /**
     * &#x83B7;&#x53D6;set&#x7F13;&#x5B58;&#x7684;&#x957F;&#x5EA6;
     * @param key &#x952E;
     * @return
     */
    public long sGetSetSize(String key){
        try {
            return redisTemplate.opsForSet().size(key);
        } catch (Exception e) {
            e.printStackTrace();
            return 0;
        }
    }

    /**
     * &#x79FB;&#x9664;&#x503C;&#x4E3A;value&#x7684;
     * @param key &#x952E;
     * @param values &#x503C; &#x53EF;&#x4EE5;&#x662F;&#x591A;&#x4E2A;
     * @return &#x79FB;&#x9664;&#x7684;&#x4E2A;&#x6570;
     */
    public long setRemove(String key, Object ...values) {
        try {
            Long count = redisTemplate.opsForSet().remove(key, values);
            return count;
        } catch (Exception e) {
            e.printStackTrace();
            return 0;
        }
    }
    //===============================list=================================

    /**
     * &#x83B7;&#x53D6;list&#x7F13;&#x5B58;&#x7684;&#x5185;&#x5BB9;
     * @param key &#x952E;
     * @param start &#x5F00;&#x59CB;
     * @param end &#x7ED3;&#x675F;  0 &#x5230; -1&#x4EE3;&#x8868;&#x6240;&#x6709;&#x503C;
     * @return
     */
    public List<object> lGet(String key, long start, long end){
        try {
            return redisTemplate.opsForList().range(key, start, end);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * &#x83B7;&#x53D6;list&#x7F13;&#x5B58;&#x7684;&#x957F;&#x5EA6;
     * @param key &#x952E;
     * @return
     */
    public long lGetListSize(String key){
        try {
            return redisTemplate.opsForList().size(key);
        } catch (Exception e) {
            e.printStackTrace();
            return 0;
        }
    }

    /**
     * &#x901A;&#x8FC7;&#x7D22;&#x5F15; &#x83B7;&#x53D6;list&#x4E2D;&#x7684;&#x503C;
     * @param key &#x952E;
     * @param index &#x7D22;&#x5F15;  index>=0&#x65F6;&#xFF0C; 0 &#x8868;&#x5934;&#xFF0C;1 &#x7B2C;&#x4E8C;&#x4E2A;&#x5143;&#x7D20;&#xFF0C;&#x4F9D;&#x6B21;&#x7C7B;&#x63A8;&#xFF1B;index<0时,-1,表尾,-2倒数第二个元素,依次类推 * @return public object lgetindex(string key,long index){ try { return redistemplate.opsforlist().index(key, index); } catch (exception e) e.printstacktrace(); null; ** 将list放入缓存 @param key 键 value 值 boolean lset(string key, value) redistemplate.opsforlist().rightpush(key, value); true; false; time 时间(秒) value, long time) if (time> 0) {
                expire(key, time);
            }
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * &#x5C06;list&#x653E;&#x5165;&#x7F13;&#x5B58;
     * @param key &#x952E;
     * @param value &#x503C;
     * @return
     */
    public boolean lSet(String key, List<object> value) {
        try {
            redisTemplate.opsForList().rightPushAll(key, value);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * &#x5C06;list&#x653E;&#x5165;&#x7F13;&#x5B58;
     * @param key &#x952E;
     * @param value &#x503C;
     * @param time &#x65F6;&#x95F4;(&#x79D2;)
     * @return
     */
    public boolean lSet(String key, List<object> value, long time) {
        try {
            redisTemplate.opsForList().rightPushAll(key, value);
            if (time > 0) {
                expire(key, time);
            }
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * &#x6839;&#x636E;&#x7D22;&#x5F15;&#x4FEE;&#x6539;list&#x4E2D;&#x7684;&#x67D0;&#x6761;&#x6570;&#x636E;
     * @param key &#x952E;
     * @param index &#x7D22;&#x5F15;
     * @param value &#x503C;
     * @return
     */
    public boolean lUpdateIndex(String key, long index,Object value) {
        try {
            redisTemplate.opsForList().set(key, index, value);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * &#x79FB;&#x9664;N&#x4E2A;&#x503C;&#x4E3A;value
     * @param key &#x952E;
     * @param count &#x79FB;&#x9664;&#x591A;&#x5C11;&#x4E2A;
     * @param value &#x503C;
     * @return &#x79FB;&#x9664;&#x7684;&#x4E2A;&#x6570;
     */
    public long lRemove(String key,long count,Object value) {
        try {
            Long remove = redisTemplate.opsForList().remove(key, count, value);
            return remove;
        } catch (Exception e) {
            e.printStackTrace();
            return 0;
        }
    }

    /**
     * &#x6A21;&#x7CCA;&#x67E5;&#x8BE2;&#x83B7;&#x53D6;key&#x503C;
     * @param pattern
     * @return
     */
    public Set keys(String pattern){
        return redisTemplate.keys(pattern);
    }

    /**
     * &#x4F7F;&#x7528;Redis&#x7684;&#x6D88;&#x606F;&#x961F;&#x5217;
     * @param channel
     * @param message &#x6D88;&#x606F;&#x5185;&#x5BB9;
     */
    public void convertAndSend(String channel, Object message){
        redisTemplate.convertAndSend(channel,message);
    }

    //=========BoundListOperations &#x7528;&#x6CD5; start============

    /**
     *&#x5C06;&#x6570;&#x636E;&#x6DFB;&#x52A0;&#x5230;Redis&#x7684;list&#x4E2D;&#xFF08;&#x4ECE;&#x53F3;&#x8FB9;&#x6DFB;&#x52A0;&#xFF09;
     * @param listKey
     * @param expireEnum &#x6709;&#x6548;&#x671F;&#x7684;&#x679A;&#x4E3E;&#x7C7B;
     * @param values &#x5F85;&#x6DFB;&#x52A0;&#x7684;&#x6570;&#x636E;
     */
    public void addToListRight(String listKey, Long expireEnum, Object... values) {
        //&#x7ED1;&#x5B9A;&#x64CD;&#x4F5C;
        BoundListOperations<string, object> boundValueOperations = redisTemplate.boundListOps(listKey);
        //&#x63D2;&#x5165;&#x6570;&#x636E;
        boundValueOperations.rightPushAll(values);
        //&#x8BBE;&#x7F6E;&#x8FC7;&#x671F;&#x65F6;&#x95F4;
        boundValueOperations.expire(expireEnum,TimeUnit.SECONDS);
    }
    /**
     * &#x6839;&#x636E;&#x8D77;&#x59CB;&#x7ED3;&#x675F;&#x5E8F;&#x53F7;&#x904D;&#x5386;Redis&#x4E2D;&#x7684;list
     * @param listKey
     * @param start  &#x8D77;&#x59CB;&#x5E8F;&#x53F7;
     * @param end  &#x7ED3;&#x675F;&#x5E8F;&#x53F7;
     * @return
     */
    public List<object> rangeList(String listKey, long start, long end) {
        //&#x7ED1;&#x5B9A;&#x64CD;&#x4F5C;
        BoundListOperations<string, object> boundValueOperations = redisTemplate.boundListOps(listKey);
        //&#x67E5;&#x8BE2;&#x6570;&#x636E;
        return boundValueOperations.range(start, end);
    }
    /**
     * &#x5F39;&#x51FA;&#x53F3;&#x8FB9;&#x7684;&#x503C; --- &#x5E76;&#x4E14;&#x79FB;&#x9664;&#x8FD9;&#x4E2A;&#x503C;
     * @param listKey
     */
    public Object rifhtPop(String listKey){
        //&#x7ED1;&#x5B9A;&#x64CD;&#x4F5C;
        BoundListOperations<string, object> boundValueOperations = redisTemplate.boundListOps(listKey);
        return boundValueOperations.rightPop();
    }

    /**
     * &#x5F39;&#x51FA;&#x5DE6;&#x8FB9;&#x7684;&#x503C; --- &#x5E76;&#x4E14;&#x79FB;&#x9664;&#x8FD9;&#x4E2A;&#x503C;
     * @param listKey
     */
    public Object leftPop(String listKey){
        //&#x7ED1;&#x5B9A;&#x64CD;&#x4F5C;
        BoundListOperations<string, object> boundValueOperations = redisTemplate.boundListOps(listKey);
        return boundValueOperations.leftPop();
    }

}

</string,></string,></string,></object></string,></object></object></0时,-1,表尾,-2倒数第二个元素,依次类推></object></object></string,object></string,object></0){></string></string,></string,>

测试一下:

    @Override
    public TSystemUserMQEntity getUserInfoById(String userId) {
        log.info("com.springboot.test.service.impl.TSystemUserServiceImpl.getUserInfoById: {}",userId);
        TSystemUserMQEntity systemUserMQEntity = (TSystemUserMQEntity) redisTemplateUtil.get(userId);
        if(systemUserMQEntity == null ){
            systemUserMQEntity = systemUserMapper.selectById(userId);
            redisTemplateUtil.set(userId,systemUserMQEntity);
        }
        return systemUserMQEntity;
    }

最终结果成功了:

3. SpringBoot整合Redis

Original: https://www.cnblogs.com/daohangtaiqian/p/16533756.html
Author: 道行太浅
Title: 3. SpringBoot整合Redis

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/594404/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Spring Boot 入门(四)使用Redis

    根pom添加依赖 org.springframework.boot spring-boot-starter-data-redis org.apache.commons common…

    Java 2023年6月5日
    079
  • MongoDB 分片规则

    Ideal is the beacon. Without ideal, there is no secure direction; without direction, there…

    Java 2023年6月9日
    069
  • 接口回调与lambda表达式

    “接口回调”一词是借用了C语言中指针回调的术语,表示一个变量的地址在某一个时刻存放在一个指针变量中,那么指针变量就可以间接操作该变量中存放的数据。 和类一样…

    Java 2023年6月14日
    081
  • Springboot+Websocket+JWT实现的即时通讯模块

    场景 目前做了一个接口:邀请用户成为某课程的管理员,于是我感觉有能在用户被邀请之后能有个立马通知他本人的机(类似微博、朋友圈被点赞后就有立马能收到通知一样),于是就琢磨琢磨搞了一套…

    Java 2023年6月7日
    083
  • CAS 单点登录【2】自定义用户验证

    方案1:CAS默认的JDBC扩展方案: CAS自带了两种简单的通过JDBC方式验证用户的处理器。 这两个处理类位于cas-server-support-jdbc这个扩展工程下。 第…

    Java 2023年5月29日
    068
  • 安装Linux8.3.2011

    镜像地址:http://mirrors.aliyun.com/centos/8.3.2011/isos/x86_64/ 非DVD镜像安装时的安装源地址:http://mirrors…

    Java 2023年6月6日
    090
  • Redis的Java客户端

    Redis 的 Java 客户端 Jedis 优点:以 Redis 命令作为方法名称,学习成本低廉,简单且实用 缺点:Jedis 的实例是线程不安全的,在多线程的环境下需要基于线程…

    Java 2023年6月9日
    069
  • SpringBoot多配置文件,切换环境

    多配置文件 properties配置方式 application.properties #通过active指定选用配置环境 spring.profiles.active=test …

    Java 2023年5月30日
    060
  • websocket在线测试工具

    为了测试websocket, 根据网上的一些工具修改了一些, 因此得到了这个工具 源码 源码: websocket在线测试工具 WS WS WSS 发送 连接 清屏 断开 … …

    Java 2023年6月7日
    069
  • 队列小哥哥喊你来排队了~(自带循环的那种)

    大家好,我是melo,一名大二上软件工程在读生,经历了一年的摸滚,现在已经在工作室里边准备开发后台项目啦。不过这篇文章呢,还是想跟大家聊一聊数据结构与算法,学校也是大二上才开设了数…

    Java 2023年6月5日
    092
  • 微信小程序刚注册快速达到1000uv

    一、什么是微信小程序uv ​ UV:是累计独立访问,1个微信号就是一个uv,多次访问不算 ​ 大家想提升微信小程序uv都是为了开通流量主 二、流量主开通标准 ​ 达到1000uv就…

    Java 2023年6月7日
    0183
  • 同步锁笔记

    CAS(Compare and Set) 无锁算法,不使用锁的情况下实现多线程之间的变量同步,拿变量的原值和内存中的值进行比较,如果相同,则原值没有被修改过,那么就将原值修改为新值…

    Java 2023年6月7日
    064
  • Java ——对Swing、AWT和SWT的认识 原创

    在Java 技术刚出现的初期,大家最感兴趣的Java API 无疑地就是AWT。一方面因为JDK 1.0 时只有AWT 称得上是一组完整的application framework…

    Java 2023年5月29日
    065
  • SpringBoot中Tomcat和SpringMVC整合源码分析

    概述 ​ SpringBoot中集成官方的第三方组件是通过在POM文件中添加组件的starter的Maven依赖来完成的。添加相关的Maven依赖之后,会引入具体的jar包,在Sp…

    Java 2023年6月13日
    084
  • JS 模块化- 04 CMD 规范与 Sea JS

    1 CMD 规范介绍 CMD: Common Module Definition, 通用模块定义。与 AMD 规范类似,也是用于浏览器端,异步加载模块,一个文件就是一个模块,当模块…

    Java 2023年6月16日
    083
  • Nginx(一)-windows下的安装配置

    第一步 下载 官网下载地址 因为只是测试这里选择最新版本1.13.9 下载完成得到zip压缩包 解压后得到如下目录 第二步 启动nginx 注意不要直接双击nginx.exe,这样…

    Java 2023年5月30日
    057
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球