Radis初阶 Radis基本命令与在Springboot中访问Radis

阿里网盘链接

文章目录

    • 初始NoSQL数据库
      • 对比MySQL数据库
        • 从结构方面:
        • 从关系方面:
        • 从查询方式:
        • 从事物方面:
    • Redis入门
      • Redis数据结构
      • 访问Radis
        • 通用命令(tab键:自动补全)
          • KEYS
          • DEL
          • EXISTS
          • EXPIRE
          • TTL
        • String类型常见命令
          • SET
          • GET
          • MSET
          • MGET
          • INCR
          • INCRBY
          • DECR
          • SETNX
          • SETEX
        • Hash类型常见命令
          • HSET
          • HGET
          • HMSET
          • HMGET
          • HGETALL
          • HKEYS
          • HVALS
          • HINCRBY
        • List类型常见命令
          • LPUSH
          • LPOP
          • RPUSH
          • RPOP
          • LRANGE
          • BLPOP
          • BRPOP
        • Set类型常见命令
          • SADD
          • SREM
          • SCARD
          • SISMEMBER
          • SMEMBERS
          • SINTER
          • SDIFF
          • SUNION
        • SortedSet类型常见命令
          • ZADD
          • ZREM
          • ZSCORE
          • ZRANK
          • ZCARD
          • ZCOUNT
          • ZINCRBY
          • ZRANGE
          • ZRANGEBYSCORE
          • ZRANGEBYSCORE
          • ZDIFF/ZINTER/ZUNION
      • 使用KEY命令
    • java的radis编程客户端(Spring Data Radis整合了Jedis和Lettuce)
      • Jedis客户端的使用
      • Jedis链接池
      • Springboot集成springDataRedis使用步骤
      • RedisTemplate的RedisSerializer序列化工具
          • 自定义RedisSerializer步骤
      • StringRedisTemplate向radis客户端传入对象数据

初始NoSQL数据库

对比MySQL数据库

从结构方面:
  1. SQL数据库是一个结构化的数据库:对于数据库中的每一个字段都有相对应的严格的约束。约束不好进行修改

  2. NoSQL数据库是一个非结构化的数据库:

    • 键值型数据库,对键和值的定义约束很随意

    • 文档型,将数据一条一条的存储进去,一般使用json,字段描述是任意的id、name都可以

    • 图类型(graph)数据库,数据作为结点,用联系连接

从关系方面:
  1. SQL:有关联的数据库使用外键以关联两个表之间的关系。具体体现在两个已经关联的表不能轻易删除其中一个;
  2. NoSQL:无关联的数据库使用json嵌套的方式描述表之间的关系。首先没有关联,有冗余。
从查询方式:
  1. SQL查询的语法相对固定
  2. NoSQL查询的语法使用相对宽松,没有相对的标准,不同的NoSQL数据库的查询语法都不同。
    • 使用起来相对起来简单,熟悉
从事物方面:
  1. SQL满足ACID
  2. NoSQL满足BASE,不能完全满足ACID

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Redis入门

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Redis数据结构

redis是一个键值型的数据库,key一般是String类型,不过value有多种数据类型

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

redis命令行的使用

官方文档(可以使用edge浏览器翻译)

访问Radis

我们有两种方式来访问Radis数据库

  1. 命令行客户端

    • 使用语法:

    • redis-cri -h ... -p [端口号]

      AUTH 123321

  2. 图形化客户端

通用命令(tab键:自动补全)

命令行查看通用命令

help [commands]{keys/del}

KEYS

查看符合模板的所有key,不建议在生产环境下使用。因为它采用的事模糊查询

查询所有

key *

DEL

删除多个指定的key

del k1 k2 k3

EXISTS

判断一个值是否存在

EXISTS age

EXPIRE

给一个key设置有效期,有效期到时key会被自动删除(单位:秒)

EXPIRE number 16

TTL

查看一个key的剩余有效期(-1 表示永久有效,-2表示没有查询到)

TTL number

String类型常见命令
SET

添加或修改一个已经存在的一个String类型的键值对

SET age 18

GET

根据key获取String

GET age

MSET

批量添加多个String类型的键值对

MSET k1 v1 k2 v2 k3 v3

MGET

批量添加多个key获取多个String类型的数据

GET k1 k2 k3

INCR

让一个整数型的key自增1

INCR age

INCRBY

让一个整数型的key按照指定步长自增

INCRBY age 2

DECR

让一个整数型的key自减1

DECR age

INCRBYFLOAT

让一个浮点数增长指定步长

INCRBYFLOAT score 0.5

SETNX

添加一个String类型的键值对,前提是这个key不存在,否则不知选哪个

SETNX name2 lisi

SETEX

添加一个String类型的键值对,并指定有效期(单位:秒)

SETEX name 20 wangwu

Hash类型常见命令

Hash结构可以将对象中的每一个字段独立存储,对单个字段做CRUD

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

HSET

添加或者修改hash类型key的field的值

HSET me:user:3 age 71

HGET

获取一个hash类型的key的value值

HGET me:user:3 age

HMSET

添加多组hash类型的key的value值

HMSET me:user:3 name Lili age 20 sex man

HMGET

获取多个hash类型的key的value值

HMGET me:user:3 name age sex

HGETALL

获取所有指定的key

HGETALL me:user:3

HKEYS

获取一个Hash类型中key的所有的field

HKEYS me:user:3

HVALS

获取一个Hash类型中key所有的value

HVALS me:user:3

HINCRBY

使得Hash类型中的一个字段自增

HINCRBY me:user:3 age 2

List类型常见命令

Redis中的List类型可以看做是一个双向链表的结构。可以正向检索和反向检索。

特点:

  • 有序
  • 元素可以重复
  • 插入和删除速度快
  • 查询速度一般
LPUSH

向列表左侧插入一个或多个元素

LPUSH users 1 2 3

LPOP

移除并返回列表左侧的第一个元素(单位个数)

LPOP 1

RPUSH

向列表右侧插入一个或多个元素

LPUSH users 4 5 6

RPOP

移除并返回列表右侧的第一个元素(单位个数)

RPOP 1

LRANGE

返回一段角标范围内的所有元素

LRANGE 1 2

BLPOP
BRPOP
Set类型常见命令

Redis的Set结构与java中的HashSet类似,可以看做是一个value为null的HashMap。因为也是一个Hash表,因此具备与HashSet类似的特征:

  • 无序
  • 元素不可重复
  • 查找快
  • 支持交集、并集、差集等功能
SADD

向set中添加一个或多个元素

SADD s1 a b c

SREM

移除set中的指定元素

SADD s1

SCARD

返回set中的元素个数

SCARD s1

SISMEMBER

判断一个元素是否在set中

SISMEMBER s1 a

SMEMBERS

获取set中的所有元素

SMEMBERS s1

SINTER

求set1和set2的交集

SINTER set1 set2

SDIFF

求set1和set2的差集

SDIFF set1 set2

SUNION

求set1和set2的并集

SUNION set1 set2

SortedSet类型常见命令

可以排序的ste集合。SortedSet的每一个元素都带有一个score属性,可以基于score属性对元素排序,底层的实现是一个跳表加Hash表;SortedSet具备下列特性:

  • 可排序性
  • 元素不重复
  • 查询速度快

注意:经常被用于排行表这个功能

ZADD

添加一个或多个元素到Sortedset,如果已经存在,则更新

ZREM

删除Sortedset中的一个指定元素

ZSCORE

获取Sortedset中的指定元素的score值

ZRANK

获取Sortedset的指定元素的排名

ZCARD

获取Sortedset中元素的个数

ZCOUNT

统计score值在给定范围内的所有元素的个数

ZINCRBY

让Sortedset中的指定元素自增,步长为制定的值

ZRANGE

按照score排序后,获取指定排名范围内的元素

ZRANGEBYSCORE

按照score排序后,获取制定score范围内的元素

ZRANGEBYSCORE

按照score排序后,获取指定score范围内的元素

ZDIFF/ZINTER/ZUNION

求差集、交集、并集

使用KEY命令

层级格式存储:用于分别不同类型的数据

set me:user:2 ‘{“id”:2,“name”:“Rose”,“age”:18}’

set me:product:1 ‘{“id”:2,“name”:“小米11”,“price”:4999}’

图形客户端中会自动形成文件夹分级,从而实现观感上的提升

java的radis编程客户端(Spring Data Radis整合了Jedis和Lettuce)

Jedis客户端的使用

Jedis官方网址

  1. 常见一个Maven工程
  2. 引入Jedis依赖和单元测试依赖(junit5)
  3. 建立连接
private jedis jedis;@BeforeEach
void setUp(){// 建立连接 (第一个参数,radis客户端的ip地址;第二个参数,radis客户端的端口号)jedis = new Jedis("192.168.150.101",6379);// 设置密码jedis.auto("123321");// 选择(第一个)库jedis.select(0);
}
  1. 测试string
@Test
void testString(){// 插入数据,方法就是radis的名称String result = redis.set("name","张三");System.out.println("result = " + result);// 获取数据String name = jedis.get("name");System.out.println("name = " + name);
}@Test
void testHash(){// 插入Hash数据jedis.hset("user:1","name","jack");jedis.hset("user:1","age","18");// 获取hash数据资源Map<String, String> map = jedis.hgetAll("user:1");// 打印输出System.out.println(map);
}
  1. 释放资源
@AfterEach
void tearDown(){// 释放资源if(jedis != null){jedis.close();}
}

Jedis链接池

public class JedisConnectionFactory{private static final JedisPool jedisPool;static{JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();// 最大链接jedisPoolConfig.setMaxTotle(8);// 最大空闲连接jedisPoolConfig.setMaxIdle(8);// 最小空闲连接jedisPoolConfig.setMinIdle(0);// 设置最长等待时间,msjedisPoolConfig.setMaxWaitMillis(200);// 参数分别为连接池对象、redis的ip地址、端口号、密码jedisPool = new JedisPool(jedisPoolConfig,"192.168.150.101",6379,1000,"123321")}// 获取Jedis对象public static Jedis getjedis(){return jedisPool.getResource();}
}

步骤:

  1. 配置连接池

  2. 创建连接池对象

  3. 上面的“建立连接”步骤可以改为:

    • jedis = JedisConnectionFactory.getjedis();
  4. 关闭连接的操作也在底层中与前面的略有区别(改为了释放资源)

Springboot集成springDataRedis使用步骤

spring 已经自动整合了SpringDataRedis,并且已经自动装配

步骤:

  1. 引入依赖
<!--Redis依赖-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency><!--连接池依赖-->
<dependency><groupId>org.apache.commons</groupId><artifactId>common-pools</artifactId>
</dependency>
  1. 配置radis的地址信息(yml)
spring:redis:host:192.168.150.101port:6379password:123321lettuce:pool:max-active:8 #最大连接数量max-idle:8 #最大空闲连接min-idle:0 #最小空闲连接max-wait:100 #连接等待时间
  1. 注入RedisTemplate(自动装配:拿来就用)
@Autowired
private RedisTemplate redisTemplate;
  1. 编写测试
@SpringBootTest
public class RedisTest{@Autowiredprivate RedisTemplate redisTemplate;@Testvoid testString (){// 插入一条String类型的数据redisTemplate.opsForValue().set("name","李四");// 读取一条String类型的数据Object name = redisTemplate.opsForValue().get("name");System.out.println("name=" + name);}
}

RedisTemplate的RedisSerializer序列化工具

原生的radis使用的是JDK的RedisSerializer,但是在实际应用中,生成的key和value是不好用的,key的字符串非常的长;value的字符串转换为了16进制数。

自定义RedisSerializer步骤
  1. 在pom中引入Jackson依赖
<!--jackson依赖-->
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId>
</dependency>

将类用@Configuration注释后使用

@Bean
public RedisTemplate<String,Object> redisTemplate(RadisConnectionFactory radisConnectionFactory) throws UnknownHostException{// 创建Template对象RedisTemplate<String,Object> redisTemplate = new RedisTemplate<>();// 设置连接工厂redisTemplate.setConnectionFactory(radisConnectionFactory);// 设置序列化工具GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();// key和hashKey采用string序列化redisTemplate.setKeySerializer(RedisSerializer.toString());redisTemplate.setHashValueSerializer(RedisSerializer.toString());// value和hashValue采用JSON序列化redisTemplate.setValueSerializer(jsonRedisSerializer);redisTemplate.setHashValueSerializer(jsonRedisSerializer);return reidsTemplate;
}外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fimg.picui.cn%2Ffree%2F2024%2F06%2F15%2F666cf0e6c9acb.png&pos_id=img-m430JoJ7-1718416816392)

StringRedisTemplate向radis客户端传入对象数据

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

@Autowired
private StringRedisTemplate stringRedisTemplate;
// JSON工具
private	static final Objectmapper mapper = new ObjectMapper();
@Test
void testStringTemplate() throws JsonProcessingException{// 准备工作 实体类的创建User user = new User("虎哥"18);// 手动序列化String json = mapper.writeValueAsString(user);// 写入一条数据到redisstringRedisTemplate.opsForValue().set("user:200",json);// 读入数据String val = stringRedisTemplate.opsForValue().get("user:200");// 反序列化User user1 = mapper.redisValue(val,User.class);System.out.println("user1 = " = user1);
}

注意:在将上述代码封装成工具类之后,可以省略掉 准备工作手动序列化 这两个步骤

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

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

相关文章

Liquibase(Oracle SQLcl集成版)简明示例

本文使用的是Oracle SQLcl中集成的Liquibase&#xff0c;而非开源版Liquibase。 Liquibase的快速入门可以参见Liquibase Core Concepts。需要了解一下概念&#xff1a; Change log&#xff1a;基于文本的更改日志文件按顺序列出对数据库所做的所有更改Change set&#xff1a;…

LabVIEW开发中的常见通讯协议详解

介绍LabVIEW开发中常见的通讯协议&#xff0c;包括RS-232、RS-485、I2C、SPI、CAN、Ethernet、Modbus和GPIB等。通过对各协议的具体内容、特点、使用范围及注意事项进行全面解析&#xff0c;帮助开发者选择合适的通讯协议&#xff0c;提高系统性能和可靠性。 1. RS-232 内容&a…

Python基础教程(十五):面向对象编程

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…

DataFrames相关介绍文件读取

目录 1.初识DataFrame 2.DataFrame的构造函数 3.数据框的轴 4.CSV文件读取 5.Excel文件读取 1.初识DataFrame &#xff08;1&#xff09;昨天&#xff0c;我们学习了Series。而Pandas的另一种数据类型&#xff1a;DataFrame&#xff0c;在许多特性上和Series有相似之处。 …

Spring应用如何打印access日志和out日志(用于分析请求总共在服务耗费多长时间)

我们经常会被问到这样一个问题。你接口返回的好慢呀&#xff0c;能不能提升一下接口响应时间啊&#xff1f;这个时候我们就需要去分析&#xff0c;为什么慢&#xff0c;慢在哪。而这首先应该做的就是确定接口返回时间过长确实是在服务内消耗的时间。而不是我们将请求发给网关或…

字符串及其应用

内容 编写程序实现字符串的基本运算&#xff1a; (1) 求串的长度、两串连接、串比较、子串匹配&#xff1b; (2) 用库函数直接实现上一步的字符申操作 完整代码 #include <iostream> #include <stdio.h> #include<string.h> using namespace std; #define M…

AI办公自动化:批量在多个Word文档中插入对应图片

工作任务&#xff1a;文件夹中有多个word文档和word文档名称一致的图片&#xff0c;要把这些图片都插入到word文档中 在chatpgt中输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;写一个Python脚本&#xff0c;具体步骤如下&#xff1a; 打开文件夹&#xff1a;F:…

CSS从入门到精通——背景样式

目录 背景颜色 任务描述 相关知识 背景色 编程要求 背景图片 任务描述 相关知识 背景图片 设置背景图片 平铺背景图像 任务要求 背景定位与背景关联 任务描述 相关知识 背景定位 背景关联 简写背景 编程要求 背景颜色 任务描述 本关任务&#xff1a;在本关…

Pytorch解决 多元回归 问题的算法

Pytorch解决 多元回归 问题的算法 回归是一种基本的统计建模技术&#xff0c;用于建立因变量与一个或多个自变量之间的关系。 我们将使用 PyTorch&#xff08;一种流行的深度学习框架&#xff09;来开发和训练线性回归模型。 二元回归的简单示例 训练数据集&#xff08;可获取&…

【git】 OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443

修改/etc/hosts文件&#xff0c;删掉以下 192.30.253.113 github.com 192.30.253.113 github.com 192.30.253.118 gist.github.com 192.30.253.119 gist.github.com #172.24.132.179 gerrit.sdp.nd 140.82.112.25 alive.github.com 140.82.114.6 api.github.com 185.199.110.15…

哪里有海量的短视频素材,以及短视频制作教程?

在当下&#xff0c;短视频已成为最火爆的内容形式之一&#xff0c;尤其是在抖音上。但很多创作者都面临一个问题&#xff1a;视频素材从哪里来&#xff1f;怎么拍摄才能吸引更多观众&#xff1f;别担心&#xff0c;今天我将为大家推荐几个宝藏网站&#xff0c;确保你素材多到用…

【Kafka】Kafka生产者-04

【Kafka】Kafka生产者-04 1. 生产者发送消息流程1.1 发送原理 2. 相关文档 1. 生产者发送消息流程 1.1 发送原理 在消息发送的过程中&#xff0c;涉及到了两个线程——main 线程和 Sender 线程。 在 main 线程中创建了一个双端队列 RecordAccumulator。 main 线程将消息发送给…

STM32 MDK Keil5软件调试功能使用(无需连接硬件)

MDK Keil5 在线仿真STM32&#xff08;无需连接硬件&#xff09; 首先点击工具栏的魔术棒配置一下&#xff1a;&#xff08;记得选择自己的STM32芯片类型&#xff09; 开启调试 使用逻辑分析仪查看IO输出 会打开这个界面&#xff0c;点击左边的setup按钮 会打开这个窗口&am…

182.二叉树:二叉搜索树的最小绝对差(力扣)

代码解决 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* Tre…

手把手教你入门vue+springboot开发(三)--登录功能后端

文章目录 前言一、redis安装二、后端代码1.修改application.yml文件2.增加utils文件3.增加Result类4.修改UserController类5.修改UserMapper类6.修改UserService和UserServiceImpl类7.增加LoginInterceptor类8.增加WebConfig类9.修改pom.xml文件 前言 前两篇我们用vuespringbo…

FPGA中复位电路的设计

复位电路也是数字逻辑设计中常用的电路&#xff0c;不管是 FPGA 还是 ASIC 设计&#xff0c;都会涉及到复位&#xff0c;一般 FPGA或者 ASIC 的复位需要我们自己设计复位方案。复位指的是将寄存器恢复到默认值。一般复位功能包括同步复位和异步复位。复位一般由硬件开关触发引起…

基于LangChain-Chatchat实现的RAG-本地知识库的问答应用[2]-简洁部署版

基于LangChain-Chatchat实现的RAG-本地知识库的问答应用[2]-简洁部署版 1.环境要求 1.1 软件要求 要顺利运行本代码,请按照以下系统要求进行配置 已经测试过的系统 Linux Ubuntu 22.04.5 kernel version 6.7其他系统可能出现系统兼容性问题。 最低要求 该要求仅针对标准模…

oracle中执行select ... for update需要什么权限?

oracle中执行select … for update需要什么权限&#xff1f; 问题 在oracle中&#xff0c;一个用户执行select … for update需要什么权限&#xff1f; 分析测试 用户1&#xff1a; test_0614 用户2&#xff1a;test 目标表&#xff1a;test.t_0614 执行语句&#xff1a;se…

论人工智能与真实性

论人工智能与真实性 这让我们都感到不安:不是因为人工智能已经足够好&#xff0c;可以准确地预测某人可能会如何回答(包括猫的名字、表情符号的使用、汤的参考以及对“精神动物”的随意参考)&#xff0c;而是因为提供这些反应菜单的模式首先代表了对这些互动功能的误解。即使回…

59.指向指针的指针(二级指针)

目录 一.什么是指向指针的指针 二.扩展 三.视频教程 一.什么是指向指针的指针 我们先看回顾一下指针&#xff1a; #include <stdio.h>int main(void) {int a 100;int *p &a;printf("*p is %d\n",*p);return 0;} 解析&#xff1a; 所以printf输出的结…