Reids 的整合使用

news2024/11/19 9:32:49

大家好 , 我是苏麟 , 今天带来强大的Redis .

REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统,是跨平台的非关系型数据库。

Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。

Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型。

官方网站 :  雷迪斯 (redis.io)

好用的可视化工具 :  Quickredis 

 下载地址 : QuickRedis 发行版 - Gitee.com

 好用的可视化工具 :  RedisDesktopManager

官方网站 :  https://redisdesktop.com/download

 开始使用 :

引入依赖

        <!--springbot 整合 redis-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

序列化

/**
 * 序列化 让JDK原生序列化转成JSON
 */
@Configuration
public class RedisConfig {

    @Bean
    @SuppressWarnings("all")
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {

        RedisTemplate<String, Object> objectObjectRedisTemplate = new RedisTemplate<>();
        objectObjectRedisTemplate.setConnectionFactory(redisConnectionFactory);

        //设置KEY 序列化使用 String 字符串
        objectObjectRedisTemplate.setKeySerializer(RedisSerializer.string());
        objectObjectRedisTemplate.setHashKeySerializer(RedisSerializer.string());

        GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();

        //设置Value 序列化 格式
        objectObjectRedisTemplate.setValueSerializer(jsonRedisSerializer);
        objectObjectRedisTemplate.setHashValueSerializer(jsonRedisSerializer);

        return objectObjectRedisTemplate;
    }
}

操作


/**
 * 目标 : 在JAVA中操作redis   spring date redis
 * spring date redis 中提供了一个高度封装了的一个类 RedisTemple 针对jedis客户端api进行了分类封装,将同一种类型封装成Operation接口
 * ValueOperation : 简单K-V操作
 * SetOperation : set类型数据操作
 * ZSetOperation : zset类型数据操作
 * HashOperation : Hash类型数据操作
 * ListOperation : List类型数据操作
 */

@SpringBootTest
class ItslRedisApplicationTests {

    @Autowired
    RedisTemplate redisTemplate;

    /**
     * 目标 : 对5中不同类型数据进行操作
     * opsForValue
     * opsForHash
     * opsForList
     * opsForSet
     * opsForZSet
     */


    /**
     * 操作String类型数据
     */
    @Test
    void testString() {

        //set操作
        redisTemplate.opsForValue().set("sl", "sl");

        //get操作
        System.out.println(redisTemplate.opsForValue().get("sl"));

        //setex操作 命令为指定的 key 设置值及其过期时间。
        //如果 key 已经存在, SETEX 命令将会替换旧的值。
        redisTemplate.opsForValue().set("ty", "sl", 100, TimeUnit.SECONDS);

        //setnx操作  命令在指定的 key 不存在时,为 key 设置指定的值。
        Boolean aBoolean = redisTemplate.opsForValue().setIfAbsent("ty", "ty");
        System.out.println(aBoolean);

    }

    /**
     * 目标 : 操作Hash数据类型
     */
    @Test
    void testHash() {
        HashOperations hashOperations = redisTemplate.opsForHash();

        //存值
        hashOperations.put("002", "name", "sl");
        hashOperations.put("002", "age", 20);

        //取值
        System.out.println(hashOperations.get("002", "age"));
        System.out.println(hashOperations.get("002", "name"));


        //获得hash结构中的所有字段
        Set keys = hashOperations.keys("002");
        for (Object key : keys) {
            System.out.println(key);
        }

        //获得hash结构中的所有值
        List values = hashOperations.values("002");
        for (Object value : values) {
            System.out.println(value);
        }
    }

    /**
     * 目标 : 操作List数据类型
     */
    @Test
    void testList() {
        ListOperations listOperations = redisTemplate.opsForList();

        //存值
        listOperations.leftPush("ykList", "a");
        listOperations.leftPushAll("ykList", "s", "b", "s", "t");

        //取值
        List ykList = listOperations.range("ykList", 0, -1);
        for (Object o : ykList) {
            System.out.println(o);
        }

        //获取长度
        int size = ykList.size();
        for (int i = 0; i < size; i++) {
            //出队
            Object ykList1 = listOperations.rightPop("ykList");
            System.out.println("出队的是 : " + ykList1);
        }
    }

    /**
     * 目标 : 操作Set数据类型
     */
    @Test
    void testSet() {
        SetOperations setOperations = redisTemplate.opsForSet();

        //存值
        setOperations.add("ty", "a", "b", "v", "b");

        //取值
        Set ty = setOperations.members("ty");
        for (Object o : ty) {
            System.out.println("删除前 : " + o);
        }

        //删除成员
        setOperations.remove("ty", "a");

        //取值
        Set tys = setOperations.members("ty");
        for (Object o : tys) {
            System.out.println("删除后  : " + o);
        }
    }

    /**
     * 目标 : 操作ZSet数据类型
     */
    @Test
    void testZSet() {
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();

        //存值
        zSetOperations.add("myZset", "a", 10.1);
        zSetOperations.add("myZset", "b", 11.1);
        zSetOperations.add("myZset", "c", 12.1);
        zSetOperations.add("myZset", "d", 13.1);

        //取值
        Set myZset = zSetOperations.range("myZset", 0, -1);
        for (Object o : myZset) {
            System.out.println("删除前 : " + o);
        }

        //修改分数
        zSetOperations.incrementScore("myZset", "d", 25.4);

        //删除成员
        zSetOperations.remove("myZset", "a", "b");

        //取值
        Set myZsets = zSetOperations.range("myZset", 0, -1);
        for (Object os : myZsets) {
            System.out.println("删除后  : " + os);
        }
    }


    /**
     * 目标 : 通用操作
     */
    @Test
    void testCommon() {

        //获取Redis中所有的key
        Set<String> keys = redisTemplate.keys("*");
        for (String key : keys) {
            System.out.println(key);
        }

        //判断某个key是否存在
        Boolean itcast = redisTemplate.hasKey("key");
        System.out.println(itcast);

        //删除指定key
        redisTemplate.delete("key");

        //获取指定key对应的value的数据类型
        DataType dataType = redisTemplate.type("001");
        System.out.println(dataType.name());

    }
}

使用小技巧 : 

登录态自动存储Redis中

开发中一个小用处 在分布式登录的时候用Seesion保存登录态 实现共享存储

第一步 :

引入依赖

        <!--spring-session 整合 redis -->
        <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-data-redis</artifactId>
        </dependency>

第二步 : 

在yml中配置

spring:
 session:
   #存储时间 86400 二个月
   timeout: 86400
   #自动存储到reids
   store-type: redis

这样就完成自动存储到Redis中!

这期就到这里下期再见 !

拜拜!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/886299.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

冯·诺依曼计算机

一、定义 冯诺依曼机&#xff08;von Neumann machine&#xff09;&#xff0c;又称冯诺依曼计算机&#xff0c;根据冯诺依曼提出的存储程序概念设计的计算机。主要特征是&#xff1a;指令与数据都以二进制形式储存在存储器里&#xff1b;指令根据其储存的顺序执行。 冯…

SpringBoot常用注解 - @Controller

Controller : Controller是加在类上面的注解&#xff0c;使得类里面的每个方法都返回一个视图页面 实际开发中&#xff0c;有时候只是让后端的结果返回到前端&#xff0c;而不作为新的视图页面&#xff0c;此时需要结合 ResponseBody&#xff0c;让这个方法返回给前端的不是一个…

三星霸主地位“无可撼动“,DRAM内存市场份额创近 9 年新低仍第一

三星电子在DRAM市场的竞争地位一直备受关注。据报告显示&#xff0c;除了市场份额下降外&#xff0c;三星电子在上半年的销售额也出现了下滑。这主要是由于全球消费电子产品需求下滑&#xff0c;导致三星电子的芯片需求减少。 存储芯片业务所在的设备解决方案部门的营收和利润也…

快速提高写作生产力——使用PicGo+Github搭建免费图床,并结合Typora

文章目录 简述PicGo下载PicGo获取Token配置PicGo结合Typora总结 简述PicGo PicGo: 一个用于快速上传图片并获取图片 URL 链接的工具 PicGo 本体支持如下图床&#xff1a; 七牛图床 v1.0腾讯云 COS v4\v5 版本 v1.1 & v1.5.0又拍云 v1.2.0GitHub v1.5.0SM.MS V2 v2.3.0-b…

Python_数据容器详解

Python数据容器 1. 列表基础语法和操作练习题 2. 列表的循环练习题 3. 元组 tuple4. 元组的循环练习题 5. 字符串6. 切片练习总结 7. set 集合8. 字典 dict字典的嵌套总结 字典常用操作练习 9. 对比总结以及通用操作对比总结通用操作 1. 列表基础语法和操作 """…

蓝桥杯嵌入式省一教程:(二)LCD显示

在嵌入式开发中&#xff0c;屏幕显示是一个非常重要的功能。同时&#xff0c;其移植对于初学者来说较为复杂&#xff0c;需要较好地掌握I2C或SPI等通讯协议。然而&#xff0c;在蓝桥杯中&#xff0c;比赛方已经为我们提供了与LCD有关的库&#xff0c;这让我们能够简单方便地使用…

Nginx 下载、安装与运行

下载地址 Nginx官网 - 下载页面 在Windows电脑&#xff0c;下载Windows版本。 下载的就是一个 zip 压缩包。解压后的文件就是可以直接使用的 Nginx 。 版本说明 选择 Mainline 版本就可以了。 解压到合适的位置 运行Nginx 命令行&#xff0c;进入 Nginx 所在的目录。运…

产品经理:能不能把 Vue 的中文输入法 bug 解决了?

前言 有个挺常见的需求相信大家应该都遇到过&#xff0c;就是一个搜索框&#xff0c;边输入边提示&#xff0c;类似于下面这样&#xff1a; 这玩意在前端也挺好实现的&#xff0c;就 v-model 然后 watch 再做个防抖请求接口呗&#xff01;于是我&#xff1a; <template>…

SAP MM学习笔记25- SAP中 基本数量单位,发注单位,发注价格单位

SAP 的 MM Master 中有 3种单位。 1&#xff0c;基本数量单位&#xff08; 基本订单单位&#xff0c; 库存管理的最小单位&#xff09; 2&#xff0c;发注单位&#xff08;订单单位&#xff09; 3&#xff0c;发注价格单位&#xff08;订单价格单位&#xff09; 管理 SAP 库…

【jenkins】jenkins流水线构建打包jar,生成docker镜像,重启docker服务的过程,在jenkins上一键完成,实现提交代码自动构建的功能

【jenkins】jenkins流水线构建打包jar&#xff0c;生成docker镜像&#xff0c;重启docker服务的过程&#xff0c;在jenkins上一键完成&#xff0c;实现提交代码自动构建&#xff0c;服务重启&#xff0c;服务发布的功能。一键实现。非常的舒服。 1. 启动脚本 shell脚本 这是 s…

测试部门来了个00后卷王之王,老油条感叹真干不过,但是...

在程序员职场上&#xff0c;什么样的人最让人反感呢? 是技术不好的人吗?并不是。技术不好的同事&#xff0c;我们可以帮他。 是技术太强的人吗?也不是。技术很强的同事&#xff0c;可遇不可求&#xff0c;向他学习还来不及呢。 真正让人反感的&#xff0c;是技术平平&…

SystemVerilog之接口详解

1.入门实例 测试平台连接到 arbiter的例子&#xff1a;包括测试平台, arbiter仲裁器, 时钟发生器 和连接的信号。 ㅤㅤㅤ ㅤ ㅤㅤㅤㅤㅤ Arbiter里面可以自定义发送的权重&#xff0c; 是轮询还是自定义 grant表示仲裁出来的是哪一个&#xff0c;也即只有0&#xff0c;1&am…

基于springboot校园缴费管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

MySQL 索引为什么使用 B+ 树,而不使用红黑树 / B 树 ?

面试官问 &#xff1a;索引为什么使用 B 树&#xff0c;而不使用 B 树&#xff0c;不使用红黑树呢 首先 B 树和 B 树 都是多叉搜索树&#xff0c;然后我们先来观察一下 B 树和 B 树的数据结构&#xff1a; B 树的数据结构实现 >> B 树的数据结构实现 >> 【B 树相…

JAVASE---数组的定义与使用

数组的基本概念 什么是数组 数组是具有相同类型元素的集合&#xff0c;在内存中连续存储。 1. 数组中存放的元素其类型相同 2. 数组的空间是连在一起的 3. 每个空间有自己的编号&#xff0c;起始位置的编号为0&#xff0c;即数组的下标 数组的创建及初始化 数组的创建 T[…

【Unity】UI的一些简单知识

Canvas 新建一个Canvas Render Mode Canvas 中有一个Render Mode&#xff08;渲染模式&#xff09;&#xff0c;有三种渲染模式: Screen Space-Overlay &#xff08;屏幕空间&#xff09;Screen Space-Camara 、 World Space 其中&#xff0c;Space- Overlay是默认显示在…

Docker容器基础

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、Docker概述1、docker是什么2、Docker的设计宗旨3、容器在内核中支持2种重要技术&#xff1a; 三、Docker的核心概念四、Docker相关命令1.安装依赖包2.设置阿里云…

《qt quick核心编程》笔记四

11 Model/View Delegate实际上可以看成是Item的一个模板 11.1 ListView ListView用于显示一个条目列表&#xff0c;数据来自于Model&#xff0c;每个条目的外观来自于Delegate 要使用ListView必须指定一个Model、一个Delegate Model可以是QML内建类型&#xff0c;如ListModel…

2023年武汉市中等职业教育网络安全赛项竞赛试题——综合靶机渗透测试解析教程

任务一&#xff1a;综合靶机渗透测试 任务环境说明&#xff1a; 服务器场景&#xff1a;ZHCS-2&#xff08;关闭连接&#xff09; 服务器场景操作系统&#xff1a;版本不详 大家需要靶机环境可以私信我获取 1.扫描目标靶机将靶机开放的所有端口&#xff0c;当作flag提交&am…

【学会动态规划】乘积为正数的最长子数组长度(21)

目录 动态规划怎么学&#xff1f; 1. 题目解析 2. 算法原理 1. 状态表示 2. 状态转移方程 3. 初始化 4. 填表顺序 5. 返回值 3. 代码编写 写在最后&#xff1a; 动态规划怎么学&#xff1f; 学习一个算法没有捷径&#xff0c;更何况是学习动态规划&#xff0c; 跟我…