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);
        // 设置最长等待时间,ms
        jedisPoolConfig.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.101
	port:6379
	password:123321
	lettuce:
		pool:
			max-active:8 #最大连接数量
			max-idle:8 #最大空闲连接
			min-idle:0 #最小空闲连接
			max-wait:100 #连接等待时间
  1. 注入RedisTemplate(自动装配:拿来就用)
@Autowired
private RedisTemplate redisTemplate;
  1. 编写测试
@SpringBootTest
public class RedisTest{
    @Autowired
    private RedisTemplate redisTemplate;
    
    @Test
    void 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);
    // 写入一条数据到redis
    stringRedisTemplate.opsForValue().set("user:200",json);
    
    // 读入数据
    String val = stringRedisTemplate.opsForValue().get("user:200");
    // 反序列化
    User user1 = mapper.redisValue(val,User.class);
    System.out.println("user1 = " = user1);
}

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

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

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

相关文章

【TB作品】MSP430G2553,DS1302,LCD1602,时间读取和显示,万年历,Proteus仿真

效果 部分代码 #include <MSP430.h> #include "ds1302.h" #include "LCD.h"//关掉ccs优化&#xff0c;并且Convert_BCD_To_Dec函数中只能是10.0f才行&#xff0c;不然有bugvoid main(void) {char cnt 0;char disp[16];WDTCTL WDTPW WDTHOLD; /* …

基于51单片机的智能水表

一.硬件方案 本设计主要以51单片机作为主控处理器的智能水表&#xff0c;该水表能够记录总的用水量和单次用水量&#xff0c;当用水量超出设定值时系统发出声光报警提醒&#xff0c;水量报警值能够通过按键进行自行设置&#xff0c;并且存储于AT24C02中&#xff0c;并且可以测…

【Ardiuno】使用ESP32单片机网络功能调用API接口(图文)

接着上文连通wifi后&#xff0c;我们通过使用HTTPClient库进行网络相关操作&#xff0c;这里我们通过http协议进行接口调用。 为了简化操作&#xff0c;小飞鱼这里使用了本地服务器上的文件作为接口&#xff0c;正常操作时会调用接口后&#xff0c;将服务器返回的数据进行解析…

Vue32-挂载流程

一、init阶段 生命周期本质是函数。 1-1、beforeCreate函数 注意&#xff1a; 此时vue没有_data&#xff0c;即&#xff1a;data中的数据没有收到。 1-2、create函数 二、生成虚拟DOM阶段 注意&#xff1a; 因为没有template选项&#xff0c;所以&#xff0c;整个div root都…

stable diffusion最全插件大全,新手必备指南

Stable diffusion30个必备插件推荐&#xff0c;给我点个赞吧&#xff0c;兄弟们 1&#xff0c;ComfyUI&#xff0c;SD扩展里面直接搜索就行&#xff0c; ComfyUI 是一个基于节点操作的UI界面&#xff0c;玩过建模的更容易学 安装后大概是这样的 评价&#xff1a;comfyui,更适…

换卡槽=停机?新手机号使用指南!

刚办理的手机号莫名其妙的就被停用了&#xff1f;这到底是怎么回事&#xff1f;这篇文章快来学习一下吧。 ​ 先说一下&#xff0c;你的手机为什么被停机&#xff1f; 现在运营商对于手机卡的使用有着非常严格的要求&#xff0c;尤其是刚办理的新号码&#xff0c;更是“严上加…

神经网络学习1—nn.Module

nn.module 为所有神经网络提供了一个模板 import torch.nn as nn import torch.nn.functional as Fclass Model(nn.Module):def __init__(self):super(Model, self).__init__()self.conv1 nn.Conv2d(1, 20, 5)self.conv2 nn.Conv2d(20, 20, 5)def forward(self, x):x F.rel…

解决Echarts图表中tooltip无法换行问题

解决Echarts图表中tooltip无法换行问题 这里设置宽度、颜色都是是可以生效的&#xff0c;但就是不换行 解决办法tooltip. extraCssText extraCssText: max-width:300px; white-space:pre-wraptooltip: { // 单个柱子显示悬浮内容extraCssText: max-width:300px; white-space…

工业网关在智能制造中的具体应用和效果-天拓四方

随着工业4.0时代的到来&#xff0c;智能制造正逐渐成为工业领域的发展趋势。作为连接物理世界与数字世界的桥梁&#xff0c;工业网关在智能制造中发挥着至关重要的作用。本案例将详细阐述工业网关在某一制造企业中的具体应用&#xff0c;展示其如何助力企业实现数字化转型&…

【数据挖掘】机器学习中相似性度量方法-欧式距离

写在前面&#xff1a; 首先感谢兄弟们的订阅&#xff0c;让我有创作的动力&#xff0c;在创作过程我会尽最大能力&#xff0c;保证作品的质量&#xff0c;如果有问题&#xff0c;可以私信我&#xff0c;让我们携手共进&#xff0c;共创辉煌。 路虽远&#xff0c;行则将至&#…

Visual Studio 使用第三方库管理工具 vcpkg

一、介绍 Windows下开发C/C程序&#xff0c;少不了用开源的第三方库。比如线性代数和矩阵分析的库eigen&#xff0c;或者图像处理的OpenCV库。虽然这些库都是开源的&#xff0c;但是由于要编译debug和release版本的&#xff0c;32位以及64位的&#xff0c;如果像FFmpeg…

跨境电商测评、采购大额下单自养号需要解决哪些技术原理?

市场上有许多伪装工具&#xff0c;但大多数只是为了方便开发人员测试系统程序&#xff0c;它们并不能针对特定的电商平台进行伪装。每个电商平台都有其独特的风控机制&#xff0c;因此&#xff0c;我们需要从硬件环境的底层配合软件控制&#xff0c;以满足各平台的检测规则。 …

【测试】软件测试方案—实际项目直接套用(Word原件)

1. 引言 1.1. 编写目的 1.2. 项目背景 1.3. 读者对象 1.4. 参考资料 1.5. 术语与缩略语 2. 测试策略 2.1. 测试完成标准 2.2. 测试类型 2.2.1. 功能测试 2.2.2. 性能测试 2.2.3. 安全性与访问控制测试 2.3. 测试工具 3. 测试技术 4. 测试资源 4.1. 人员安排 4.2. 测试环境 4.2.…

Java 网站开发入门指南:如何用java写一个网站

Java 网站开发入门指南&#xff1a;如何用java写一个网站 Java 作为一门强大的编程语言&#xff0c;在网站开发领域也占据着重要地位。虽然现在 Python、JavaScript 等语言在网站开发中越来越流行&#xff0c;但 Java 凭借其稳定性、可扩展性和丰富的生态系统&#xff0c;仍然…

Aigtek电压放大器的标准参数是什么

电压放大器是电子电路中常用的一种器件&#xff0c;主要用于放大输入电压信号。为了评价和比较不同的电压放大器&#xff0c;有一些标准参数被广泛应用。下面将详细介绍电压放大器的几个常见标准参数。 首先是增益。增益是衡量电压放大器输出信号与输入信号之间的倍数关系&…

【乐吾乐2D可视化组态编辑器】开关、阀门、报警状态切换

开关状态 开关的断开与闭合&#xff1a;将电力组件的“开”与“关”2个组件重叠在一起&#xff0c;右键选择“组合为状态”&#xff0c;属性面板中就可以任意切换状态。 视频教程&#xff1a;开关阀门多状态控制 乐吾乐2D可视化组态编辑器地址&#xff1a;https://2d.le5le.co…

30KW高原汽油发电机,海拔5000米可使用

大汉动力高原汽油发电机是专为高原地区设计的发电设备&#xff0c;其设计和特性考虑了高原环境的特别性。以下是关于高原汽油发电机的一些关键信息&#xff1a; 设计特点&#xff1a; 高原适应性&#xff1a;高原地区海拔高&#xff0c;空气稀薄&#xff0c;氧气含量低&#x…

高考志愿填报选专业,兴趣爱好和就业前景哪个优先?

每个人都有自己的兴趣与爱好&#xff0c;而高考志愿填报是在为自己选择职业方向。最理想的状态就是把自己的兴趣和爱好与自己的职业统一起来&#xff0c;让兴趣和爱好促进职业的发展&#xff0c;为职业增添动力。但现实生活中&#xff0c;这种理想的状态并不是每个人都能达到的…

前端技术回顾系列 11|TS 中一些实用概念

在微信中阅读,关注公众号:CodeFit。 创作不易,如果你觉得这篇文章对您有帮助,请不要忘了 点赞、分享 和 关注 我的公众号:CodeFit,为我的持续创作提供动力。 上文回顾:泛型在类和接口中的应用 上一篇文章我们回顾了 泛型 在 类 和 接口 中的应用。 通过使用泛型,我们…

工资信息管理系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;基础数据管理&#xff0c;公告管理&#xff0c;津贴管理&#xff0c;管理员管理&#xff0c;绩效管理 用户账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;公告管理&#xff0c;津…