SpringBoot使用Redis教程(共5步)

SpringBoot使用Redis教程

应用环境: 存放Token、....

第一步: 添加Redis依赖

    <dependency>
        <groupid>org.springframework.boot</groupid>
        <artifactid>spring-boot-starter-data-redis</artifactid>
    </dependency>

第二步:创建redis包, 添加三个redis类

第一个类: FastJsonRedisSerializer

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.parser.ParserConfig;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.type.TypeFactory;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.SerializationException;

import java.nio.charset.Charset;

/**
 * Redis&#x4F7F;&#x7528;FastJson&#x5E8F;&#x5217;&#x5316;
 *
 * @author &#x7B2C;&#x4E00;&#x4E2A;&#x7C7B;
 */
public class FastJsonRedisSerializer<t> implements RedisSerializer<t>
{

    public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");

    private Class<t> clazz;

    static
    {
        ParserConfig.getGlobalInstance().setAutoTypeSupport(true);
    }

    public FastJsonRedisSerializer(Class<t> clazz)
    {
        super();
        this.clazz = clazz;
    }

    @Override
    public byte[] serialize(T t) throws SerializationException
    {
        if (t == null)
        {
            return new byte[0];
        }
        return JSON.toJSONString(t, SerializerFeature.WriteClassName).getBytes(DEFAULT_CHARSET);
    }

    @Override
    public T deserialize(byte[] bytes) throws SerializationException
    {
        if (bytes == null || bytes.length <= 0) { return null; } string str="new" string(bytes, default_charset); json.parseobject(str, clazz); protected javatype getjavatype(class<?> clazz)
    {
        return TypeFactory.defaultInstance().constructType(clazz);
    }
}

</=></t></t></t></t>

第二个类: RedisCache

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.BoundSetOperations;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Component;

import java.util.*;
import java.util.concurrent.TimeUnit;

@SuppressWarnings(value = { "unchecked", "rawtypes" })
@Component
public class RedisCache
{
    @Autowired
    public RedisTemplate redisTemplate;

    /**
     * &#x7F13;&#x5B58;&#x57FA;&#x672C;&#x7684;&#x5BF9;&#x8C61;&#xFF0C;Integer&#x3001;String&#x3001;&#x5B9E;&#x4F53;&#x7C7B;&#x7B49;
     *
     * @param key &#x7F13;&#x5B58;&#x7684;&#x952E;&#x503C;
     * @param value &#x7F13;&#x5B58;&#x7684;&#x503C;
     */
    public <t> void setCacheObject(final String key, final T value)
    {
        redisTemplate.opsForValue().set(key, value);
    }

    /**
     * &#x7F13;&#x5B58;&#x57FA;&#x672C;&#x7684;&#x5BF9;&#x8C61;&#xFF0C;Integer&#x3001;String&#x3001;&#x5B9E;&#x4F53;&#x7C7B;&#x7B49;
     *
     * @param key &#x7F13;&#x5B58;&#x7684;&#x952E;&#x503C;
     * @param value &#x7F13;&#x5B58;&#x7684;&#x503C;
     * @param timeout &#x65F6;&#x95F4;
     * @param timeUnit &#x65F6;&#x95F4;&#x9897;&#x7C92;&#x5EA6;
     */
    public <t> void setCacheObject(final String key, final T value, final Integer timeout, final TimeUnit timeUnit)
    {
        redisTemplate.opsForValue().set(key, value, timeout, timeUnit);
    }

    /**
     * &#x8BBE;&#x7F6E;&#x6709;&#x6548;&#x65F6;&#x95F4;
     *
     * @param key Redis&#x952E;
     * @param timeout &#x8D85;&#x65F6;&#x65F6;&#x95F4;
     * @return true=&#x8BBE;&#x7F6E;&#x6210;&#x529F;&#xFF1B;false=&#x8BBE;&#x7F6E;&#x5931;&#x8D25;
     */
    public boolean expire(final String key, final long timeout)
    {
        return expire(key, timeout, TimeUnit.SECONDS);
    }

    /**
     * &#x8BBE;&#x7F6E;&#x6709;&#x6548;&#x65F6;&#x95F4;
     *
     * @param key Redis&#x952E;
     * @param timeout &#x8D85;&#x65F6;&#x65F6;&#x95F4;
     * @param unit &#x65F6;&#x95F4;&#x5355;&#x4F4D;
     * @return true=&#x8BBE;&#x7F6E;&#x6210;&#x529F;&#xFF1B;false=&#x8BBE;&#x7F6E;&#x5931;&#x8D25;
     */
    public boolean expire(final String key, final long timeout, final TimeUnit unit)
    {
        return redisTemplate.expire(key, timeout, unit);
    }

    /**
     * &#x83B7;&#x5F97;&#x7F13;&#x5B58;&#x7684;&#x57FA;&#x672C;&#x5BF9;&#x8C61;&#x3002;
     *
     * @param key &#x7F13;&#x5B58;&#x952E;&#x503C;
     * @return &#x7F13;&#x5B58;&#x952E;&#x503C;&#x5BF9;&#x5E94;&#x7684;&#x6570;&#x636E;
     */
    public <t> T getCacheObject(final String key)
    {
        ValueOperations<string, t> operation = redisTemplate.opsForValue();
        return operation.get(key);
    }

    /**
     * &#x5220;&#x9664;&#x5355;&#x4E2A;&#x5BF9;&#x8C61;
     *
     * @param key
     */
    public boolean deleteObject(final String key)
    {
        return redisTemplate.delete(key);
    }

    /**
     * &#x5220;&#x9664;&#x96C6;&#x5408;&#x5BF9;&#x8C61;
     *
     * @param collection &#x591A;&#x4E2A;&#x5BF9;&#x8C61;
     * @return
     */
    public long deleteObject(final Collection collection)
    {
        return redisTemplate.delete(collection);
    }

    /**
     * &#x7F13;&#x5B58;List&#x6570;&#x636E;
     *
     * @param key &#x7F13;&#x5B58;&#x7684;&#x952E;&#x503C;
     * @param dataList &#x5F85;&#x7F13;&#x5B58;&#x7684;List&#x6570;&#x636E;
     * @return &#x7F13;&#x5B58;&#x7684;&#x5BF9;&#x8C61;
     */
    public <t> long setCacheList(final String key, final List<t> dataList)
    {
        Long count = redisTemplate.opsForList().rightPushAll(key, dataList);
        return count == null ? 0 : count;
    }

    /**
     * &#x83B7;&#x5F97;&#x7F13;&#x5B58;&#x7684;list&#x5BF9;&#x8C61;
     *
     * @param key &#x7F13;&#x5B58;&#x7684;&#x952E;&#x503C;
     * @return &#x7F13;&#x5B58;&#x952E;&#x503C;&#x5BF9;&#x5E94;&#x7684;&#x6570;&#x636E;
     */
    public <t> List<t> getCacheList(final String key)
    {
        return redisTemplate.opsForList().range(key, 0, -1);
    }

    /**
     * &#x7F13;&#x5B58;Set
     *
     * @param key &#x7F13;&#x5B58;&#x952E;&#x503C;
     * @param dataSet &#x7F13;&#x5B58;&#x7684;&#x6570;&#x636E;
     * @return &#x7F13;&#x5B58;&#x6570;&#x636E;&#x7684;&#x5BF9;&#x8C61;
     */
    public <t> BoundSetOperations<string, t> setCacheSet(final String key, final Set<t> dataSet)
    {
        BoundSetOperations<string, t> setOperation = redisTemplate.boundSetOps(key);
        Iterator<t> it = dataSet.iterator();
        while (it.hasNext())
        {
            setOperation.add(it.next());
        }
        return setOperation;
    }

    /**
     * &#x83B7;&#x5F97;&#x7F13;&#x5B58;&#x7684;set
     *
     * @param key
     * @return
     */
    public <t> Set<t> getCacheSet(final String key)
    {
        return redisTemplate.opsForSet().members(key);
    }

    /**
     * &#x7F13;&#x5B58;Map
     *
     * @param key
     * @param dataMap
     */
    public <t> void setCacheMap(final String key, final Map<string, t> dataMap)
    {
        if (dataMap != null) {
            redisTemplate.opsForHash().putAll(key, dataMap);
        }
    }

    /**
     * &#x83B7;&#x5F97;&#x7F13;&#x5B58;&#x7684;Map
     *
     * @param key
     * @return
     */
    public <t> Map<string, t> getCacheMap(final String key)
    {
        return redisTemplate.opsForHash().entries(key);
    }

    /**
     * &#x5F80;Hash&#x4E2D;&#x5B58;&#x5165;&#x6570;&#x636E;
     *
     * @param key Redis&#x952E;
     * @param hKey Hash&#x952E;
     * @param value &#x503C;
     */
    public <t> void setCacheMapValue(final String key, final String hKey, final T value)
    {
        redisTemplate.opsForHash().put(key, hKey, value);
    }

    /**
     * &#x83B7;&#x53D6;Hash&#x4E2D;&#x7684;&#x6570;&#x636E;
     *
     * @param key Redis&#x952E;
     * @param hKey Hash&#x952E;
     * @return Hash&#x4E2D;&#x7684;&#x5BF9;&#x8C61;
     */
    public <t> T getCacheMapValue(final String key, final String hKey)
    {
        HashOperations<string, string, t> opsForHash = redisTemplate.opsForHash();
        return opsForHash.get(key, hKey);
    }

    /**
     * &#x5220;&#x9664;Hash&#x4E2D;&#x7684;&#x6570;&#x636E;
     *
     * @param key
     * @param hkey
     */
    public void delCacheMapValue(final String key, final String hkey)
    {
        HashOperations hashOperations = redisTemplate.opsForHash();
        hashOperations.delete(key, hkey);
    }

    /**
     * &#x83B7;&#x53D6;&#x591A;&#x4E2A;Hash&#x4E2D;&#x7684;&#x6570;&#x636E;
     *
     * @param key Redis&#x952E;
     * @param hKeys Hash&#x952E;&#x96C6;&#x5408;
     * @return Hash&#x5BF9;&#x8C61;&#x96C6;&#x5408;
     */
    public <t> List<t> getMultiCacheMapValue(final String key, final Collection<object> hKeys)
    {
        return redisTemplate.opsForHash().multiGet(key, hKeys);
    }

    /**
     * &#x83B7;&#x5F97;&#x7F13;&#x5B58;&#x7684;&#x57FA;&#x672C;&#x5BF9;&#x8C61;&#x5217;&#x8868;
     *
     * @param pattern &#x5B57;&#x7B26;&#x4E32;&#x524D;&#x7F00;
     * @return &#x5BF9;&#x8C61;&#x5217;&#x8868;
     */
    public Collection<string> keys(final String pattern)
    {
        return redisTemplate.keys(pattern);
    }
}

</string></object></t></t></string,></t></t></string,></t></string,></t></t></t></t></string,></t></string,></t></t></t></t></t></string,></t></t></t>

第三个类:RedisConfig配置类

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.StringRedisSerializer;

@Configuration
public class RedisConfig {

    @Bean
    @SuppressWarnings(value = { "unchecked", "rawtypes" })
    public RedisTemplate<object, object> redisTemplate(RedisConnectionFactory connectionFactory)
    {
        RedisTemplate<object, object> template = new RedisTemplate<>();
        template.setConnectionFactory(connectionFactory);

        FastJsonRedisSerializer serializer = new FastJsonRedisSerializer(Object.class);

        // &#x4F7F;&#x7528;StringRedisSerializer&#x6765;&#x5E8F;&#x5217;&#x5316;&#x548C;&#x53CD;&#x5E8F;&#x5217;&#x5316;redis&#x7684;key&#x503C;
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(serializer);

        // Hash&#x7684;key&#x4E5F;&#x91C7;&#x7528;StringRedisSerializer&#x7684;&#x5E8F;&#x5217;&#x5316;&#x65B9;&#x5F0F;
        template.setHashKeySerializer(new StringRedisSerializer());
        template.setHashValueSerializer(serializer);

        template.afterPropertiesSet();
        return template;
    }
}
</object,></object,>

第三步: 在配置文件添加redis配置

#yml/yaml&#x7248;&#x672C;:

Redis&#x6570;&#x636E;&#x5E93;&#x7D22;&#x5F15;&#xFF08;&#x9ED8;&#x8BA4;&#x4E3A;0&#xFF09;
spring:
  redis:
    # Redis&#x6570;&#x636E;&#x5E93;&#x7D22;&#x5F15;&#xFF08;&#x9ED8;&#x8BA4;&#x4E3A;0&#xFF09;
    database: 0
    # Redis&#x670D;&#x52A1;&#x5668;&#x5730;&#x5740;
    host: 127.0.0.1
    # Redis&#x670D;&#x52A1;&#x5668;&#x8FDE;&#x63A5;&#x7AEF;&#x53E3;
    port: 6379
    jedis:
      pool:
        # &#x8FDE;&#x63A5;&#x6C60;&#x6700;&#x5927;&#x8FDE;&#x63A5;&#x6570;&#xFF08;&#x4F7F;&#x7528;&#x8D1F;&#x503C;&#x8868;&#x793A;&#x6CA1;&#x6709;&#x9650;&#x5236;&#xFF09;
        max-active: 8
        # &#x8FDE;&#x63A5;&#x6C60;&#x6700;&#x5927;&#x963B;&#x585E;&#x7B49;&#x5F85;&#x65F6;&#x95F4;&#xFF08;&#x4F7F;&#x7528;&#x8D1F;&#x503C;&#x8868;&#x793A;&#x6CA1;&#x6709;&#x9650;&#x5236;&#xFF09;
        max-wait: 1
        # &#x8FDE;&#x63A5;&#x6C60;&#x4E2D;&#x7684;&#x6700;&#x5927;&#x7A7A;&#x95F2;&#x8FDE;&#x63A5;
        max-idle: 8
        # &#x8FDE;&#x63A5;&#x6C60;&#x4E2D;&#x7684;&#x6700;&#x5C0F;&#x7A7A;&#x95F2;&#x8FDE;&#x63A5;
        min-idle: 0
    # &#x8FDE;&#x63A5;&#x8D85;&#x65F6;&#x65F6;&#x95F4;&#xFF08;&#x6BEB;&#x79D2;&#xFF09;
    timeout: 5000
#Properties&#x7248;&#x672C;:

spring.redis.database=0
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.jedis.pool.max-active=8
spring.redis.jedis.pool.max-wait=1
spring.redis.jedis.pool.max-idle=8
spring.redis.jedis.pool.min-idle=0
spring.redis.timeout=5000

第四步: 下载redis并打开

  1. Redis3.0下载地址-蓝奏云
    2.解压后,打开其中的redis-server.exe即可
    SpringBoot使用Redis教程(共5步)

第五步: 测试使用

&#x5728;SpirngBoot&#x6D4B;&#x8BD5;&#x7C7B;&#x4E2D;, &#x5148;&#x7528;@Autowired&#x5F15;&#x5165;RedisCache.&#x901A;&#x8FC7;&#x8C03;&#x7528;&#x8BE5;&#x5BF9;&#x8C61;&#x7684;&#x65B9;&#x6CD5;&#x6765;&#x64CD;&#x4F5C;redis&#x6570;&#x636E;&#x5E93;

@Autowired
private RedisCache redisCache;

@Test
void TextRedisXX() {
    redisCache.setCacheObject("hhh", "123");
    String str = redisCache.getCacheObject("hhh");
    System.out.println(str);
}

&#x7ED3;&#x679C;:

SpringBoot使用Redis教程(共5步)

&#x9664;&#x4E86;&#x5728;IDEA&#x4E2D;&#x901A;&#x8FC7;&#x8C03;&#x7528; redisCache.getCacheObject("hhh");&#x65B9;&#x6CD5;&#x6765;&#x83B7;&#x53D6;&#x4E4B;&#x5916;&#xFF0C;
&#x6211;&#x4EEC;&#x8FD8;&#x53EF;&#x4EE5;&#x6253;&#x5F00;&#x89E3;&#x538B;&#x6587;&#x4EF6;&#x4E2D;&#x7684;redis-cli.exe&#xFF0C;&#x8F93;&#x5165; get hhh &#x6765;&#x83B7; &#x53D6;&#x503C;

SpringBoot使用Redis教程(共5步)

&#x539F;&#x521B;&#x5206;&#x4EAB;&#xFF0C;&#x6709;&#x4EC0;&#x4E48;&#x95EE;&#x9898;&#x6B22;&#x8FCE;&#x7559;&#x8A00;&#x4EA4;&#x6D41;

Original: https://www.cnblogs.com/cococici/p/16413565.html
Author: 黄伟鸿
Title: SpringBoot使用Redis教程(共5步)

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

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

(0)

大家都在看

  • openstack 虚拟机实例迁移

    10.20.1.181 nova-api controller 10.20.1.182 nova-compute compute1 10.20.1.183 nova-compute…

    Java 2023年5月30日
    071
  • 15、lock锁

    1、lock是显示锁,手动开启和关闭,synchronized是隐式锁,出了作用域自动释放。 2、lock只有代码块锁,synchronized有代码锁和方法锁 3、使用lock锁…

    Java 2023年6月8日
    080
  • WebSocket(SuperSocket.WebSocket实现)服务端主动断开客户端的连接

    WebSocket(SuperSocket.WebSocket实现)服务端主动断开客户端的连接 使用SuperSocket.WebSocket实现的WebSocket服务端,当有W…

    Java 2023年5月30日
    078
  • Java基础之变量、常量、作用域

    变量就是可以变化的量 Java是一种强类型语言,每个变量都必须声明其类型 Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域 注意事项: 每个变量都有类型,类…

    Java 2023年6月8日
    071
  • Docker安装Mysql

    1、在docker hub 上查看要下载的mysql镜像名称 dockerHub官网地址 在上方搜索栏里输入mysql 找到要拉取的镜像版本,在tag下找到版本 回到虚拟机界面,执…

    Java 2023年6月8日
    073
  • 关于博客的解读

    写在前面 大家好,这里是满满! 最近也是想来写博客,我们学习过后的知识一旦过一段时间后,自然会有一些只是会遗忘,这时候大家都会去翻看以前的视频 ,笔记,遇到难一点的问题,可能就会去…

    Java 2023年6月7日
    093
  • Android Swtich开关样式调整

    原文:Android Swtich开关样式调整 – Stars-One的杂货小窝 接入百度人脸的demo时候,发现了内置的switch开关比较好看,看了下实现方法,原来…

    Java 2023年6月13日
    065
  • 毕业就在小公司躺了3年,面试大厂发现,发现不会分布式没人要…

    之前写了一篇秒杀系统的文章,最后给自己埋了分布式事务的坑,然后很多读者就要求我去写分布式事务,那作为程序员届的暖男,我一向是有求必应的,就算是不睡觉我都要写给你们看的! 因为分布式…

    Java 2023年6月9日
    085
  • nginx配置ssl证书实现https访问

    配置ssl证书之前,先准备SSL证书,至于获取的途径很多(阿里云的服务,第三方服务购买)。这里不详细解释。以下是我的SSL证书 准备好证书后,找到nginx的安装目录,我的安装位置…

    Java 2023年5月30日
    092
  • .Net中Aspose组件调试技巧

    | 0.48分钟 | 774.4字符 | 1、引言&背景 2、水印或截断问题解决 3、即时调试的技巧 4、声明与参考资料 | SCscHero | 2022/6/4 PM2…

    Java 2023年6月5日
    061
  • springboot 2.2.0 snapshot 升级到 2.5.0 snapshot时,jenkins构建失败,出现的版本无法转换的问题

    第一次报错: [FATAL] Non-resolvable parent POM for org.kosoku:commonfast:2.0.0-SNAPSHOT: Failure…

    Java 2023年5月30日
    092
  • II-第十三章:(1)SpringCloud Nacos注册中心和配置中心

    一、Nacos简介 1、命名由来 前四个字母分别为Naming和Configuration的前两个字母,最后的s为Service。 2、是什么 一个更易于构建云原生应用的动态服务发…

    Java 2023年5月29日
    070
  • JAVA SSH 框架介绍(转)

    转载自:http://www.admin10000.com/document/150.html SSH 为 struts+spring+hibernate 的一个集成框架,是目前较…

    Java 2023年5月29日
    0105
  • 在Android中引入Java8的lambda表达式

    我用的是retrolambda这个插件,下面来说下如何添加它。 在根项目的build.gradle中添加这个classpath example: 然后,在项目的bulid.grad…

    Java 2023年5月29日
    061
  • JPA 入门实战(1)–简介

    JPA(Java Persistence API) 是 SUN 公司推出的一套 ORM 规范,充当 Java 对象和关系数据库系统之间的桥梁;本文主要介绍其基本概念。 1、JPA …

    Java 2023年6月16日
    072
  • Java 插入公式到PPT幻灯片

    PowerPoint幻灯片中可插入公式,用于在幻灯片放映时演示相关内容的论证、推算的依据,能有效地为演讲者提供论述的数据支撑。通过后端程序代码,我们可借助特定的工具来实现在幻灯片中…

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