四十三、Redis基础

目录

一、认识NoSql

1、定义:

2、常见语法

3、与关系型数据库(SQL)的区别:

二、认识Redis

1、定义: 

2、特征:

3、Key的结构:

三、安装Redis

四、Redis常见命令

1、数据结构介绍

2、Redis的通用命令

(1)KEYS:查看符合模板的所有key

(2)DEL:删除一个指定的key

(3)EXISTS:判断key是否存在

(4)EXPIRE:给一个key设置有效期,有效期到期时该key会被自动删除

(5)TTL:查看一个KEY的剩余有效期

3、String类型的命令

(1)SET:添加或者修改已经存在的一个String类型的键值对

(2)GET:根据key获取String类型的value

(3)MSET:批量添加多个String类型的键值对

(4)MGET:根据多个key获取多个String类型的value

(5)INCR:让一个整型的key自增1

(6)INCRBY:让一个整型的key自增并指定步长,例如:incrby num 2 让num值自增2

(7)INCRBYFLOAT:让一个浮点类型的数字自增并指定步长

(8)SETNX:添加一个String类型的键值对,前提是这个key不存在,否则不执行

(9)SETEX:添加一个String类型的键值对,并且指定有效期

4、Hash类型的命令

(1)HSET key field value:添加或者修改hash类型key的field的值

(2)HGET key field:获取一个hash类型key的field的值

(3)HMSET:批量添加多个hash类型key的field的值

(4)HMGET:批量获取多个hash类型key的field的值

(5)HGETALL:获取一个hash类型的key中的所有的field和value

(6)HKEYS:获取一个hash类型的key中的所有的field

(7)HVALS:获取一个hash类型的key中的所有的value

(8)HINCRBY:让一个hash类型key的字段值自增并指定步长

(9)HSETNX:添加一个hash类型的key的field值,前提是这个field不存在,否则不执行

5、List类型的命令

​(1)LPUSH key  element ... :向列表左侧插入一个或多个元素

(2)LPOP key:移除并返回列表左侧的第一个元素,没有则返回nil

(3)RPUSH key  element ... :向列表右侧插入一个或多个元素

(4)RPOP key:移除并返回列表右侧的第一个元素

(5)LRANGE key star end:返回一段角标范围内的所有元素

(6)BLPOP和BRPOP:与LPOP和RPOP类似,只不过在没有元素时等待指定时间,而不是直接返回nil

6、Set类型的命令

​(1)SADD key member ... :向set中添加一个或多个元素

(2)SREM key member ... : 移除set中的指定元素

(3)SCARD key: 返回set中元素的个数

(4)SISMEMBER key member:判断一个元素是否存在于set中

(5)SMEMBERS:获取set中的所有元素

(6)SINTER key1 key2 ... :求key1与key2的交集

(7)SDIFF key1 key2 ... :求key1与key2的差集

(8)SUNION key1 key2 ... :求key1与key2的并集

7、SortedSet类型的命令

(1)ZADD key score member:添加一个或多个元素到sorted set ,如果已经存在则更新其score值

(2)ZREM key member:删除sorted set中的一个指定元素

(3)ZSCORE key member : 获取sorted set中的指定元素的score值

(4)ZRANK key member:获取sorted set 中的指定元素的排名

(5)ZCARD key:获取sorted set中的元素个数

(6)ZCOUNT key min max:统计score值在给定范围内的所有元素的个数

(7)ZINCRBY key increment member:让sorted set中的指定元素自增,步长为指定的increment值

(8)ZRANGE key min max:按照score排序后,获取指定排名范围内的元素

(9)ZRANGEBYSCORE key min max:按照score排序后,获取指定score范围内的元素

(10)ZDIFF、ZINTER、ZUNION:求差集、交集、并集

五、Redis的Java客户端

1、实现jedis

(1)引入依赖

(2)建立连接,编写yml文件

(3)测试

2、jedis连接池

3、SpringDataRedis

(1)定义

(2)实现

4、RedisTemplate

5、StringRedisTemplate


一、认识NoSql

1、定义:

NoSQL是指非关系型数据库,在这种数据库中,数据没有被组织成关系表,而是以一种更灵活的方式存储。NoSQL数据库通常不需要预定义模式以及支持水平扩展能力,这使得它们能够处理大规模和分布式数据。

NoSQL数据库可分为4类:键值存储、文档存储、列存储和图形数据库。

  1. 键值存储:通过在每个键上存储对应的值,实现简单的数据将数据以键值对的形式保存,例如Redis、Memcached等。

  2. 文档存储:文档数据存储在类似JSON的无模式格式中。文档存储在MongoDB、Couchbase等数据库中。

  3. 列存储:数据存储在列簇中,而不是行中,适合存储结构化和半结构化数据。例如HBase。

  4. 图形数据库:图形数据库是一种结构化数据存储方式,用于处理图形或半结构化数据。例如Neo4j、OrientDB等。

2、常见语法

3、与关系型数据库(SQL)的区别:

二、认识Redis

1、定义: 

Redis是一个开源的,基于内存的键值对存储数据库,可以用作缓存、消息队列、计数器等。

2、特征:

  • 键值(key-value)型,value支持多种不同数据结构,功能丰富
  • 单线程,每个命令具备原子性
  • 低延迟,速度快(基于内存、IO多路复用、良好的编码)。
  • 支持数据持久化
  • 支持主从集群、分片集群
  • 支持多语言客户端

3、Key的结构:

三、安装Redis

安装指南icon-default.png?t=N7T8https://blog.csdn.net/icbbm/article/details/134895407?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22134895407%22%2C%22source%22%3A%22icbbm%22%7D

四、Redis常见命令

1、数据结构介绍

        在官网( https://redis.io/commands )可以查看到不同的命令

2、Redis的通用命令

(1)KEYS:查看符合模板的所有key

以“a”开头

(2)DEL:删除一个指定的key

先批量创建键,再做批量删除,此时因为k4不存在,所以只删掉3个

(3)EXISTS:判断key是否存在

(4)EXPIRE:给一个key设置有效期,有效期到期时该key会被自动删除

(5)TTL:查看一个KEY的剩余有效期

3、String类型的命令

(1)SET:添加或者修改已经存在的一个String类型的键值对

(2)GET:根据key获取String类型的value

(3)MSET:批量添加多个String类型的键值对

(4)MGET:根据多个key获取多个String类型的value

(5)INCR:让一个整型的key自增1

(6)INCRBY:让一个整型的key自增并指定步长,例如:incrby num 2 num值自增2

(7)INCRBYFLOAT:让一个浮点类型的数字自增并指定步长

(8)SETNX:添加一个String类型的键值对,前提是这个key不存在,否则不执行

(9)SETEX:添加一个String类型的键值对,并且指定有效期

4、Hash类型的命令

Hash类型,也叫散列,其value是一个无序字典,类似于Java中的HashMap结构。

KEY

VALUE

field

value

heima:user:1

name

Jack

age

21

heima:user:2

name

Rose

age

18

(1)HSET key field value:添加或者修改hash类型keyfield的值

(2)HGET key field:获取一个hash类型keyfield的值

(3)HMSET:批量添加多个hash类型keyfield的值

(4)HMGET:批量获取多个hash类型keyfield的值

(5)HGETALL:获取一个hash类型的key中的所有的fieldvalue

(6)HKEYS:获取一个hash类型的key中的所有的field

(7)HVALS:获取一个hash类型的key中的所有的value

(8)HINCRBY:让一个hash类型key的字段值自增并指定步长

(9)HSETNX:添加一个hash类型的keyfield值,前提是这个field不存在,否则不执行

  

5、List类型的命令

(1)LPUSH key  element ... :向列表左侧插入一个或多个元素

(2)LPOP key:移除并返回列表左侧的第一个元素,没有则返回nil

(3)RPUSH key  element ... :向列表右侧插入一个或多个元素

(4)RPOP key:移除并返回列表右侧的第一个元素

(5)LRANGE key star end:返回一段角标范围内的所有元素

(6)BLPOP和BRPOP:与LPOPRPOP类似,只不过在没有元素时等待指定时间,而不是直接返回nil

6、Set类型的命令

(1)SADD key member ... :向set中添加一个或多个元素

(2)SREM key member ... : 移除set中的指定元素

(3)SCARD key: 返回set中元素的个数

(4)SISMEMBER key member:判断一个元素是否存在于set

(5)SMEMBERS:获取set中的所有元素

(6)SINTER key1 key2 ... :求key1key2的交集

(7)SDIFF key1 key2 ... :求key1key2的差集

(8)SUNION key1 key2 ... :求key1key2的并集

7、SortedSet类型的命令

注意:所有的排名默认都是升序,如果要降序则在命令的Z后面添加REV即可

(1)ZADD key score member:添加一个或多个元素到sorted set ,如果已经存在则更新其score

(2)ZREM key member:删除sorted set中的一个指定元素

(3)ZSCORE key member : 获取sorted set中的指定元素的score
(4)ZRANK key member:获取sorted set 中的指定元素的排名

(5)ZCARD key:获取sorted set中的元素个数

(6)ZCOUNT key min max:统计score值在给定范围内的所有元素的个数

(7)ZINCRBY key increment member:让sorted set中的指定元素自增,步长为指定的increment

(8)ZRANGE key min max:按照score排序后,获取指定排名范围内的元素

(9)ZRANGEBYSCORE key min max:按照score排序后,获取指定score范围内的元素

(10)ZDIFF、ZINTERZUNION:求差集、交集、并集

五、Redis的Java客户端

1、实现jedis

(1)引入依赖
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>5.0.0</version>
        </dependency>
(2)建立连接,编写yml文件
spring:
  redis:
    host: 192.168.248.152
    port: 6379
    password: 1234
    lettuce:
      pool:
        max-active: 8
        max-idle: 8
        min-idle: 0
        max-wait: 100ms
(3)测试
    @Test
    void testSaveUser() {
        // 写入数据
        redisTemplate.opsForValue().set("user:100", new User("哥", 21));
        // 获取数据
        User o = (User) redisTemplate.opsForValue().get("user:100");
        System.out.println("o = " + o);
    }

2、jedis连接池

3、SpringDataRedis

(1)定义

SpringDataSpring中数据操作的模块,包含对各种数据库的集成,其中对Redis的集成模块就叫做SpringDataRedis,官网地址:Spring Data Redis

  • 提供了对不同Redis客户端的整合(LettuceJedis
  • 提供了RedisTemplate统一API来操作Redis
  • 支持Redis的发布订阅模型
  • 支持Redis哨兵和Redis集群
  • 支持基于Lettuce的响应式编程
  • 支持基于JDKJSON、字符串、Spring对象的数据序列化及反序列化
  • 支持基于RedisJDKCollection实现

API

返回值类型

说明

redisTemplate.opsForValue()

ValueOperations

操作String类型数据

redisTemplate.opsForHash()

HashOperations

操作Hash类型数据

redisTemplate.opsForList()

ListOperations

操作List类型数据

redisTemplate.opsForSet()

SetOperations

操作Set类型数据

redisTemplate.opsForZSet()

ZSetOperations

操作SortedSet类型数据

redisTemplate

通用的命令

(2)实现

1.引入依赖

        <!--redis依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <!--common-pool-->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
        </dependency>

2.配置yml文件

spring:
  redis:
    host: 192.168.248.152
    port: 6379
    password: 1234
    lettuce:
      pool:
        max-active: 8
        max-idle: 8
        min-idle: 0
        max-wait: 100ms

3.注入RedisTemplate

@Autowired
private RedisTemplate redisTemplate;

4.测试

    @Test
    void testString() {
        // 写入一条String数据
        redisTemplate.opsForValue().set("name", "虎哥");
        // 获取string数据
        Object name = redisTemplate.opsForValue().get("name");
        System.out.println("name = " + name);
    }

4、RedisTemplate

缺点:

  • 可读性差
  • 内存占用较大

自定义RedisTemplate的序列化方式代码:

@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory){
        // 创建RedisTemplate对象
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        // 设置连接工厂
        template.setConnectionFactory(connectionFactory);
        // 创建JSON序列化工具
        GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
        // 设置Key的序列化
        template.setKeySerializer(RedisSerializer.string());
        template.setHashKeySerializer(RedisSerializer.string());
        // 设置Value的序列化
        template.setValueSerializer(jsonRedisSerializer);
        template.setHashValueSerializer(jsonRedisSerializer);
        // 返回
        return template;
    }
}

5、StringRedisTemplate

手动序列化:

    @Test
    void testSaveUser() throws JsonProcessingException {
        // 创建对象
        User user = new User("虎哥", 21);
        // 手动序列化
        String json = mapper.writeValueAsString(user);
        // 写入数据
        stringRedisTemplate.opsForValue().set("user:200", json);

        // 获取数据
        String jsonUser = stringRedisTemplate.opsForValue().get("user:200");
        // 手动反序列化
        User user1 = mapper.readValue(jsonUser, User.class);
        System.out.println("user1 = " + user1);
    }

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Hive HWI 配置

前言 1、下载安装好hive后&#xff0c;发现hive有hwi界面功能&#xff0c;研究下是否可以运行&#xff0c;于是使用hive –service hwi命令启动hwi界面报错。 启动hwi功能 2、访问192.168.126.110:9999/hwi&#xff0c;发现访问错误 一、HWI介绍 HWI&#xff08;Hive Web Int…

gRPC .net学习

学习helloworld server用.net client有.net的控制台 和 unity server端 直接使用vs2022创建(需自行看有无装asp.net哦),搜索gPRC,使用6.0吧&#xff0c;创建工程后直接F5跑起来,服务端到此完成 .net控制台client,创建新的控制台,使用NuGet,然后导入server端的Protos文件夹 学…

[C++] STL_priority_queue(优先级队列) 的使用及底层的模拟实现,容器适配器,deque的原理介绍

文章目录 1、priority_queue1.1 priority_queue的介绍和使用1.2 priority_queue的使用模拟实现&#xff1a; 2、容器适配器2.1 什么是适配器2.2 STL标准库中stack和queue的底层结构 3、deque3.1 deque的原理介绍3.2 deque的缺陷 4、为什么选择deque作为stack和queue的底层默认容…

11月客户文章盘点——累计IF 150.5

凌恩生物以打造国内一流生物公司为目标&#xff0c;在科研测序领域深耕不辍&#xff0c;吸纳多名在生物信息高级技术人员的加盟&#xff0c;参与并完成多个高科技项目。现已在宏组学、基因组、表观遗传以及蛋白代谢等多组学及联合分析领域积累了深厚经验&#xff0c;打造出成熟…

Qt图形设计

#include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {//窗口相关设置//设置窗口标题this->setWindowTitle("王者荣耀");//设置窗口图标this->setWindowIcon(QIcon("C:\\Users\\28033\\Pictures\\Saved Pictures\\pict…

STM32超声波——HC_SR04

文章目录 一.超声波图片二.时序图三.超声波流程四.单位换算五.取余计算六.换算距离七.超声波代码 一.超声波图片 测量距离&#xff1a;2cm——400cm 二.时序图 (1).以下时序图要先提供一个至少10us的脉冲触发信号&#xff0c;告诉单片机我准备好了&#xff0c;然后该超声波…

最简单的pixel刷机和安装面具、lsposed

一 下载手机对应的系统 1&#xff0c;手机usb连接然后重启进入Fastboot模式&#xff1a;adb reboot bootloader2&#xff0c;找到你下载的系统&#xff0c;Windows 系统 直接运行 flash-all.bat上图 &#xff1a;左边就是安卓11和12的系统&#xff0c;右边是对应的手机型号 下…

思科最新版Cisco Packet Tracer 8.2.1安装

思科最新版Cisco Packet Tracer 8.2.1安装 一. 注册并登录CISCO账号二. 下载 Cisco Packet Tracer 8.2.1三. 安装四. 汉化五. cisco packet tracer教学文档六. 正常使用图 前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接下来还会持续更新…

【LeetCode:1631. 最小体力消耗路径 | BFS + 二分】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

西南科技大学数字电子技术实验三(MSI逻辑器件设计组合逻辑电路及FPGA的实现)FPGA部分

一、实验目的 进一步掌握MIS(中规模集成电路)设计方法。通过用MIS译码器、数据选择器实现电路功能,熟悉它们的应用。进一步学习如何记录实验中遇到的问题及解决方法。二、实验原理 1、4位奇偶校验器 Y=S7i=0DiMi D0=D3=D5=D6=D D1=D2=D4=D7= `D 2、组合逻辑电路 F=A`B C …

ssm基于面向对象的学生事务处理系统分析与设计论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本学生事务处理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息…

python+gdal地理坐标转投影坐标

1 前言 地理坐标系&#xff0c;是使用三维球面来定义地球表面位置&#xff0c;以实现通过经纬度对地球表面点位引用的坐标系。 地理坐标系经过地图投影操作后就变成了投影坐标系。而地图投影是按照一定的数学法则将地球椭球面上点的经维度坐标转换到平面上的直角坐标。 2 流程…

RabbitMQ学习二

RabbitMQ学习二 发送者的可靠性生产者连接重试机制生产者确认机制开启生产者确认定义ReturnCallback定义confirmCallback MQ的可靠性交换机和队列持久化消息持久化LazyQueue控制台配置Lazy模式代码配置Lazy模式 消费者的可靠性失败重试机制失败处理策略业务幂等性唯一消息ID业务…

Hiera实战:使用Hiera实现图像分类任务(二)

文章目录 训练部分导入项目使用的库设置随机因子设置全局参数图像预处理与增强读取数据设置Loss设置模型设置优化器和学习率调整策略设置混合精度&#xff0c;DP多卡&#xff0c;EMA定义训练和验证函数训练函数验证函数调用训练和验证方法 运行以及结果查看测试完整的代码 在上…

龙良曲PyTorch入门到实战 深度学习

文章目录 笔记激活函数与Loss的梯度lesson5 手写数字识别问题lesson6 基本数据类型lesson7 创建tensorlesson8 索引和切片lesson9 维度变换lesson10 broadcastinglesson11 分割和合并lesson12 数学运算lesson13 Tensor统计lesson14 Tensor高阶lesson16 什么是梯度lesson17 常见…

初识Ceph --组件、存储类型、存储原理

目录 ceph组件存储类型块存储文件存储对象存储 存储过程 ceph Ceph&#xff08;分布式存储系统&#xff09;是一个开源的分布式存储系统&#xff0c;设计用于提供高性能、高可靠性和可扩展性的存储服务&#xff0c;可以避免单点故障&#xff0c;支持块存储、对象存储以及文件系…

Java项目-瑞吉外卖Day2

完善登录功能&#xff1a; 完善未登录不能访问/backend/index.html。使用拦截器或过滤器。 创建过滤器。 重写doFilter方法。 查看是否过滤成功。 处理流程如下&#xff1a; 添加员工功能&#xff1a; 点击保存&#xff0c;可以看到请求信息。 再看前端代码&a…

使用React 18、Echarts和MUI实现温度计

关键词 React 18 Echarts和MUI 前言 在本文中&#xff0c;我们将结合使用React 18、Echarts和MUI&#xff08;Material-UI&#xff09;库&#xff0c;展示如何实现一个交互性的温度计。我们将使用Echarts绘制温度计的外观&#xff0c;并使用MUI创建一个漂亮的用户界面。 本文…

MySQL - InnoDB 和 MyISAM 的索引实现的区别

InnoDB 和 MyISAM 底层都是 B 树的实现&#xff0c;但是二者却完全不同 。 主键索引文件存储不同 MyISAM 引擎的索引文件和数据文件是分离的&#xff0c;而 InnoDB 引擎的索引文件和数据文件是不分离的。 MyISAM 引擎的叶子节点存储的是数据文件的地址&#xff0c;而 InnoDB 的…

textarea文本框回车enter的时候自动提交表单,根据内容自动高度

切图网近期一个bootstrap5仿chatgpt页面的项目遇到的&#xff0c;textarea文本框回车enter的时候自动提交表单&#xff0c;根据内容自动高度&#xff0c;代码如下&#xff0c;亲测可用。 <textarea placeholder"Message ChatGPT…" name"" rows"&q…