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/714283/

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

(0)

大家都在看

  • Reactor模型

    要无障碍阅读本文,需要对NIO有一个大概的了解,起码要可以写一个NIO的Hello World。 说到NIO、Netty,Reactor模型一定是绕不开的,因为这种模式架构太经典了…

    技术杂谈 2023年7月25日
    057
  • 最简单方式解决AppImage程序无法运行[sandbox问题]

    升级deepin20之后运行以往AppImage软件没反应(安利一款本人正在用的仅一个AppImage格式软件《Motrix》)。控制台管理员模式运行,提示信息说可以尝试添加参数 …

    技术杂谈 2023年5月31日
    088
  • Prometheus监控系统(4)pushgateway及自定义脚本

    一、pushgateway的作用 传统监控软件如Zabbix通常都建议使用push的方式来由客户端推送数据给服务端,这样可以减轻服务端压力。但是这样也有个弊端就是配置更为复杂,需要…

    技术杂谈 2023年6月1日
    085
  • IE10/11克隆textarea时 bug

    重现代码 html;gutter:true; var ta= document.createElement('textarea') ta.placeholder…

    技术杂谈 2023年6月1日
    089
  • 阿里云有奖体验:如何通过ECS挂载NAS文件系统

    实验简介 本实验提供CentOS系统ECS一台和NAS文件服务。 NAS基于POSIX文件接口,天然适配原生操作系统,提供共享访问,同时保证数据一致性和锁互斥。它提供了简单的可扩展…

    技术杂谈 2023年7月11日
    090
  • HTTP2:如何提升网络速度

    上一篇文章我们聊了 HTTP/1.1 的发展史,虽然 HTTP/1.1 已经做了大量的优化,但是依然存在很多性能瓶颈,依然不能满足我们日益变化的新需求,所以就有了我们今天要聊的 H…

    技术杂谈 2023年5月31日
    079
  • hdu 1845

    一看题意就是二分匹配问题,建边是双向的,两个集合都是n个点 这题的图很特殊,每个点都要与三个点相连,在纸上画了六个点的图就感觉此图最大匹配肯定是六,除以2就是原图的匹配了,就感觉这…

    技术杂谈 2023年6月1日
    097
  • electron-vue 打包 Windows/Mac 上可以安装的软件以及修改软件名称软件版本号等

    2、模块问题可能会遇到的错误 解决方法: 1、删掉 node_modules 然后重新用 npm install 安装依赖 2、如果上面方法还是解决不了。可以通过安装 yarn 用…

    技术杂谈 2023年5月31日
    083
  • ORA-01536: space quota exceeded for tablespace案例

    最近在做数据治理的过程中,回收了部分账号的权限,因为角色RESOURCE里拥有CREATE TABLE的权限,所以我想回收RESOURCE角色。例如,对于TEST账号,收回其创建表…

    技术杂谈 2023年5月30日
    095
  • Elasticsearch mapping

    Elasticsearch mapping 本篇主要介绍一下 Elasticsearch mapping 的概念, 它是什么 以及如何自定义它, 并且再介绍一下 dynamic 的…

    技术杂谈 2023年7月10日
    093
  • Nexus搭建maven仓库并简单使用

    一、基本介绍 参考:https://www.hangge.com/blog/cache/detail_2844.htmlhttps://blog.csdn.net/zhuguanb…

    技术杂谈 2023年7月24日
    079
  • 使用浏览器浏览本地文件夹内容

    参考:https://www.jianshu.com/p/1da5fc1ccd48 1、选中本地文件夹 2、选中属性->安全->组或用户名->编辑->添加 …

    技术杂谈 2023年6月1日
    0163
  • eclipse连接MySQL 8.0.29.0

    推荐文章: eclipse导入JDBC MySQL详细安装 菜鸟java MySQL连接教程 步骤: 找到MySQL的连接Java的jar文件; 如下图: 在eclipse项目文件…

    技术杂谈 2023年7月10日
    0102
  • 自动化终端考核检查系统的搭建过程

    自从2020年进入公司从学生变成社会人以来,接手的第一项工作就是检查并整改公司终端的季度考核指标; 季度考核是公司总部要求的,每季度一次(废话。。),需要管理的终端量在1500台左…

    技术杂谈 2023年7月11日
    0100
  • CentOS 文件管理

    一、目录管理 1.1、目录结构 1.2、切换目录 1.3、查看目录 1.4、创建目录 1.5、复制目录 1.6、剪切目录 1.7、删除目录 二、文件管理 2.1、查看文件 2.2、…

    技术杂谈 2023年7月10日
    061
  • []什么是增长总结提炼

    [原创]什么是增长总结提炼 [原创]什么是增长总结提炼 1、 何谓增长? 增加或提高,比原来的多 2、增长路线 增长->经济增长->商业增长-> 用户增长 2.1…

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