Redis学习(一)

news2024/9/21 14:50:54

Redis入门

Redis是一个基于内存的key-value结构数据库,读写性能较高

Redis数据类型

在这里插入图片描述

Redis存储的是key-value结构的数据,其中key是字符串类型,value有5种数据类型:
1.字符串 string
2.哈希 hash
3.列表 list
4.集合 set
5.有序集合 sorted set

字符串string操作常用命令

在这里插入图片描述

设置值和取值(set&get)

在这里插入图片描述

设置存活时间(setex)

设置存活10s
在这里插入图片描述

setnx 当key不存在时才设置值

在这里插入图片描述

哈希hash操作命令

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

列表list常用命令

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

集合set操作命令

在这里插入图片描述
在这里插入图片描述

有序集合

在这里插入图片描述
在这里插入图片描述

Redis常用命令

在这里插入图片描述

在SpringBoot中使用redis

在这里插入图片描述
在这里插入图片描述

1.在springboot项目中导入redis依赖

		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

2.在实现类中注入RedisTemplate

在这里插入图片描述

3.添加redis的配置类

添加redis的配置类是为了配置redis的序列化器,因为在执行完java程序后,在redis中存储的key会乱码,因此要设置key的序列化器,而对于value其实可以不设置,因为springboot在运行的时候会将数据序列化,在获取数据的时候会将数据反序列化。
在这里插入图片描述

package com.itheima.config;

import org.springframework.cache.annotation.CachingConfigurerSupport;
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;

/**
 * Redis配置类
 */

@Configuration
public class RedisConfig extends CachingConfigurerSupport {

    @Bean
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {

        RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();

        //默认的Key序列化器为:JdkSerializationRedisSerializer
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());

        redisTemplate.setConnectionFactory(connectionFactory);

        return redisTemplate;
    }

}

4.操作string类型的数据

//操作字符串类型
    @Test
    public void testString()
    {
        //设置值和取值
        redisTemplate.opsForValue().set("city1234","郑州");
        String value=(String) redisTemplate.opsForValue().get("city1234");
        System.out.println(value);

        //设置存活时间
        redisTemplate.opsForValue().set("key1","1234",10L, TimeUnit.SECONDS);

        //如果重复添加同一key的值,则会失败
        Boolean aBoolean = redisTemplate.opsForValue().setIfAbsent("city1234", "上海");
        System.out.println(aBoolean);
    }

5.操作哈希类型的数据

/**
* 操作哈希类型的数据
* 哈希是基于字符串类型的key-value的映射表
* key映射表名 field字段 value值
*/

 @Test
    public void testHash()
    {
        //存入数据
        redisTemplate.opsForHash().put("002","name","xiaoming");
        redisTemplate.opsForHash().put("002","age","20");
        redisTemplate.opsForHash().put("002","address","beijing");

        //取数据
        String age = (String)redisTemplate.opsForHash().get("002", "age");
        System.out.println(age);

        //获取hash表中的所有字段field
        Set keys = redisTemplate.opsForHash().keys("002");
        for(Object key:keys)
        {
            System.out.println(key);
        }

        //获取hash表中的所有值
        List values = redisTemplate.opsForHash().values("002");
        for(Object value:values)
        {
            System.out.println(value);
        }
    }

运行结果:
在这里插入图片描述

操作list类型的数据

//操作list类型的数据
    @Test
    public void testList()
    {
        //存值
        ListOperations listOperations = redisTemplate.opsForList();
        listOperations.leftPush("mylist","a");
        listOperations.leftPushAll("mylist","b","c",'d');

        //取值
        List<String> mylists = listOperations.range("mylist", 0l, -1l);
        for(String value:mylists)
        {
            System.out.println(value);
        }

        //列表长度
        Long len = listOperations.size("mylist");
        System.out.println(len);

        //出队列
        int length = len.intValue();
        for(int i=0;i<length;i++)
        {
            String element = (String) listOperations.rightPop("mylist");
            System.out.println(element);
        }
    }

6.操作无序set集合数据

@Test
    //操作set类型的数据
    public void testSet()
    {
        SetOperations setOperations = redisTemplate.opsForSet();
        //存值
        setOperations.add("myset","a","b","c","d");
        //取值
        Set<String> myset = setOperations.members("myset");
        for(String ele:myset)
        {
            System.out.println(ele);
        }
        
        //删除成员
        setOperations.remove("myset","a","b");
        
    }

7.操作有序集合ZSet

//操作有序集合ZSet
    @Test
    public void  testZSet()
    {
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();
        //存值
        zSetOperations.add("myzset","a",10.0);
        zSetOperations.add("myzset","b",11.0);
        zSetOperations.add("myzset","c",12.0);
        zSetOperations.add("myzset","d",13.0);
        zSetOperations.add("myzset","e",14.0);
        zSetOperations.add("myzset","f",15.0);

        //取值
        Set<String> myzset = zSetOperations.range("myzset", 0, -1);
        for (String s:myzset)
        {
            System.out.println(s);
        }

        //修改分数
        zSetOperations.incrementScore("myzset","b",20);
        
        //删除成员
        zSetOperations.remove("myzset","a","c");
    }

8.通用操作

 //通用操作
    @Test
    public void testCommon()
    {
        //获取所有的key
        Set keys = redisTemplate.keys("*");
        for(Object key:keys)
        {
            System.out.println(key);
        }

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

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

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

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

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

相关文章

Altium Designer 20 凡亿教育视频学习-01

课程视频&#xff1a;第1课 课程介绍.mp4_哔哩哔哩_bilibili 第一部分学习 学习方法 工程具备文件 一定需要先建立工程&#xff0c;再来创建原理图库、原理图等文件 栅格大小改变 栅格的大小我们常在绘制原理图的时候改变&#xff0c;因为有时候我们需要画一个细线&#…

【PCB专题】什么是通孔、盲孔、埋孔?

PCB板是由基板和PP叠加而成的。不同层上走了各种信号线和电源,这些信号和电源在不同的电路层之间切换时需要依靠过孔(通孔、盲孔和埋孔)连接。如下图所示的6层板,使用了2阶HDI方案:有机械孔和激光孔。 过孔的作用就像是水管一样,连接了不同的平面。PCB板上的过孔作用就是…

函数的定义和调用 与 this指向

1、函数的定义和调用 1.1、函数的定义方式 函数声明方式 function 关键字 (命名函数)函数表达式 (匿名函数)new Function() var fn new Function(参数1,参数2..., 函数体)&#xff08;1&#xff09;Function 里面参数都必须是字符串格式 &#xff08;2&#xff09;第三种方式…

已解决+ CategoryInfo: SecurityError: (:) [ ].ParentContainsErrorRecordException

已解决无法加载文件 E:\day_01\Scripts\activate.ps1&#xff0c;因为在此系统上禁止运行脚本。有关详细信息&#xff0c;请参阅 https:/go.microsoft.com/fwlink/?LinkID135170 中的about_Execution_Policies。 CategoryInfo: SecurityError: &#xff08;:&#xff09; [ ]…

[LeetCode周赛复盘] 第 326 场周赛20230101

[LeetCode周赛复盘] 第 326 场周赛20230101 一、本周周赛总结二、 [Easy] 6278. 统计能整除数字的位数1. 题目描述2. 思路分析3. 代码实现三、[Medium] 6279. 数组乘积中的不同质因数数目1. 题目描述2. 思路分析3. 代码实现四、[Medium] 6196. 将字符串分割成值不超过 K 的子字…

路由 NAT(简介、静态NAT、动态NAT、NATServer、NAPT、Easy-ip、NAT地址映射表)

4.1.0 路由 NAT&#xff08;简介、静态NAT、动态NAT、NATServer、NAPT、Easy-ip、NAT地址映射表&#xff09; 目录简介NAT地址映射表静态NAT简介操作案例动态NAT简介操作案例NAT Server简介操作案例NAPT简介操作案例Easy-ip简介操作案例简介 为了有效节约公网IPv4地址&#xf…

QT 学习笔记(十二)

文章目录一、文件系统1. 文件系统简介2. 文件系统分类二、基本文件操作1. QFile 读文件2. QFile 写文件3. QFileInfo 获取文件信息三、基本文件操作代码1. 主窗口头文件 widget.h2. 主窗口源文件 widget.cpp由于每次代码都是在原有程序上修改&#xff0c;因此除了新建项目&…

物联网与射频识别技术,课程实验(三)

实验3—— 时隙ALOHA(S-ALOHA)算法的实现及其性能分析 实验说明&#xff1a; 1. 利用Python或Matlab模拟时隙ALOHA算法&#xff1b; 分析标签数量k、时隙大小t对信道利用率的影响&#xff0c;其中&#xff0c; 信道利用率发送数据的时间/(发送数据的时间信道空闲的时间) 3. …

10、中断系统概述

目录 0x01、异常类型 0x0001、系统异常清单 0x0002、外部中断清单 0x02、NVIC 简介 0x0001、NVIC 寄存器 0x0002、NVIC 中断配置固件库 0x03、优先级 0x0001、优先级定义 0x0002、优先级分组 0x0003、中断编程 0x01、异常类型 STM32F103 在内核水平上搭载了一个异常响…

重金打造SEA浩瀚架构,吉利的野心绝不仅仅是一个平台

&#xff08;作者&#xff1a;贝贝。常年供职于某外资整车企业产品规划部门&#xff0c;负责全球车型在国内的引入和投放&#xff09;最近几个月&#xff0c;吉利旗下的中高端电动车品牌极氪汽车销量一路走高。单凭借极氪001一款车型&#xff0c;10月、11月交付量连续破万&…

查找:折半查找、平衡二叉树、散列表(习题-1、5、6)二叉排序树(习题-2、3、4)

一个不知名大学生&#xff0c;江湖人称菜狗 original author: jacky Li Email : 3435673055qq.com Time of completion&#xff1a;2023.1.1 Last edited: 2023.1.1 目录 查找&#xff1a;折半查找、平衡二叉树、散列表&#xff08;习题-1、5、6&#xff09; 第1关&#xff1…

04.spring源码循环依赖终极讲解

1.Spring怎么解决循环依赖 我们都知道&#xff0c;单例Bean初始化完成&#xff0c;要经历三步&#xff1a; 注入就发生在第二步&#xff0c;属性赋值&#xff0c;结合这个过程&#xff0c;Spring 通过三级缓存解决了循环依赖&#xff1a; 一级缓存 : Map<String,Object>…

PUCCH传输UCI信息

上报HARQ-ACK 时序 传输HARQ-ACK信息的时序不再像4G那样固定&#xff0c;而是由基站侧配置给UE。有下面几种情况&#xff1a; 如果UE收到的是DCI format 1_0&#xff0c;其中的字段’PDSCH-to-HARQ_feedback timing indicatior’指示HARQ-ACK与PDSCH的时序关系&#xff0c;该…

Linux之孤儿进程、进程优先级、环境变量

本章目录1.孤儿进程2.状态优先级3.环境变量1.孤儿进程 父进程如果提前退出&#xff0c;那么子进程后退出&#xff0c;进入Z之后&#xff0c;那该如何处理&#xff1f; 父进程先退出&#xff0c;子进程还在&#xff0c;子进程就称之为“孤儿进程”。 孤儿进程被1号init进程&am…

移动安全APT事件总结及防御解决方案探讨

声明 本文是学习移动安全总结 2019. 下载地址而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 2019年各地移动APT事件总结 2019年世界依旧不太平&#xff0c;在表面平静的背后是暗流涌动。大规模军事冲突不会发生的当下&#xff0c;因利益&#xff0c;…

Python全栈开发(一)——环境搭建和入门

今天是2023年的第一天&#xff0c;接下来的一个月里&#xff0c;我将持续更新关于python全栈开发的相关知识&#xff0c;前面一段时间都是基础语法。主要分成四大块&#xff1a;基础、面向对象、MYSQL数据库、Django框架。话不多说&#xff0c;进入到今天的主题。 1.文档和工具…

聊聊最适合程序员的画图工具

画图工具 没问题&#xff0c;直接坦白讲&#xff0c;我用了 2 年的画图工具是&#xff1a;draw.io。 我的图解文章里的图片全是在 draw.io 这个工具画的&#xff0c;写了那么久的图解文章&#xff0c;再加上我工作中也有画图的习惯&#xff0c;累计也有在上面画了接近 1000 张…

树形压缩DP——没有上司的舞会

树形压缩DP——没有上司的舞会一、问题描述二、DFS暴搜1、算法思路2、代码实现三、DP做法一、问题描述 二、DFS暴搜 1、算法思路 这道题其实最容易想到的是暴力DFS&#xff0c;然后选出一个最大值。我们平时会在DFS的形参中设置一个变量表示子树的根。但是今天这道题还涉及到…

mysql的事务和锁

【MySQL事务和锁】 学习原文&#xff1a;https://blog.csdn.net/zly03/article/details/127170995 事务四大特性&#xff1a;原子性、一致性、隔离性、持久性&#xff0c;简称ACID MySQL中支持3种不同的存储引擎&#xff1a; MyISAM存储引擎、Memory存储引擎、和InnoDB存储引…

CMake使用外部动态库/静态库和头文件

CMake使用外部动态库/静态库和头文件一、准备工作二、新建一个新的CMake工程三、开始构建四、为target添加共享库五、链接静态库一、准备工作 在博文《使用CMake构建静态库和动态库》中已经介绍了libhello动态库的构建和安装&#xff0c;现在我们看看如何使用这个外部动态库。…