【Redis】Redis基础

news2024/12/29 1:41:15

Redis基础

初识Redis

认识NoSQL

SQL:结构化查询语言 => 关系型数据库

NoSQL:非关系型数据库

SQL与NoSQL的差异:

  1. 数据结构
    1. SQL结构化:表的信息依赖于表的结构
    2. NoSQL非结构化:存储的信息为KV形式
  2. 数据关联
    1. SQL关联:可以建立并维护表与表之间的关系(外键)
    2. NoSQL无关联:需要自行维护数据关联
  3. 查询方式
    1. SQL:使用SQL语句查询
    2. NoSQL:没有统一标准(Redis、MongoDB)
  4. 事物特性
    1. SQL:满足ACID
    2. NoSQL:基本可用BASE
  5. 存储方式
    1. SQL:磁盘
    2. NoSQL:内存(速度快)
  6. 扩展性
    1. SQL:垂直(本机)
    2. NoSQL:水平(支持分布式)

Redis特点

  1. KV结构
  2. 单线程,命令执行具备原子性
  3. 低延迟、性能快(基于内存、IO多路复用、C语言编写)
  4. 支持数据持久化
  5. 支持主从集群(扩展速度)、分片集群(扩展存储量)
  6. 支持多语言客户端

Redis安装

Redis官方只提供了Linux版本

Redis常见命令

Redis通用命令

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

不建议在生产环境(或集群的主节点)上使用。Redis单线程,会导致线程阻塞。

KEYS *name*

DEL:删除key

DEL username

DEL username password

EXISTS:判断key存在

EXISTS username

EXPIRE:给key设置有效期,单位是秒(到期自动删除)

TTL:查看有效期(-2表示不存在、-1表示永不过期)

EXPIRE name 20

TTL name

Redis数据结构

  1. String
  2. Hash(类似JSON)
  3. List(列表)
  4. Set(无重复元素的集合)
  5. SortedSet(有序集合)
  6. GEO(经纬度坐标)
  7. BitMap
  8. HyperLog
String

字符串,最简单的数据类型。上限是512M。

String的类型

  • string:字符串
  • int:整型,可以自增自减
  • float:浮点类型,可以自增自减

常见命令

  1. SET:添加、修改KV
  2. GET:通过K查询V
  3. MSET:批量添加
  4. MGET:批量查询
  5. INCR:整型i++(INCR age:age++)
  6. INCRBY:整型i+=n(INCRBY age 2:age += 2)
  7. INCRBYFLOAT:浮点i+=n(INCRBYFLOAT level 2:level += 2)
  8. SETNX:新增KV(若存在K则不添加)
  9. SETEX:添加KV,并指定有效期

key的结构:层级存储。用于key名称的设置,避免了key重复的问题

项目名:业务名:类型:id

hpan:user:username:1
hpan:admin:username:1
Hash

无序字典,类似JSON。

相比于序列化JSON,以字符串形式保存。Hash结构可以更方便地修改。

常见命令

  1. HSET key field value:添加、修改key的field值(HSET user:1 username wmh
  2. HGET key field:查询key的field值(HSET user:1 username
  3. HMSET、HMGET:批量
  4. HGETALL:查询所有的field和value
  5. HKEYS、HVALS:查询所有的field或value
  6. HINCRBY:整型value+=n(HINCRBY user:4 age 2:user[4].age+=2)
  7. HSETNX:新增field-value(若存在K则不添加)
List

双向链表,类似于LinkedList。可以正向、反向查找。

  1. LPUSH/RPUSH key value:左/右侧插入元素
  2. LPOP/RPOP key:左/右侧弹出元素
  3. LRANGE key i j:从i到j遍历元素
  4. BLPOP、BRPOP:阻塞式获取(有元素就取、没有元素就等)
  • 模拟栈:入口出口在同一边
  • 模拟队列:入口出口不在同一边
  • 模拟阻塞队列:入口出口不在同一边,出队使用BLPOP、BRPOP
Set

无序、元素不可重复、查找速度快、支持交集、并集、差集等。

单个Set:

  1. SADD key item…:添加item
  2. SREM key item…:移除item
  3. SCARD key:查询元素个数
  4. SISMEMBER key item:判断item是否存在
  5. SMEMBERS:获取所有元素

Set之间:

  1. SINTER k1 k2:交集
  2. SDIFF k1 k2:差集
  3. SUNION k1 k2:并集
SortedSet

每个元素都带一个score属性,根据score排序。可排序、元素不重复、查询速度快。

  1. ZADD key score item…:添加item
  2. ZREM key item…:移除item
  3. ZSCORE key item:查询item的score
  4. ZRANK key item:获取item的排名
  5. ZCARD key:查询元素个数
  6. ZCOUNT key min max:获取分数在min到max的元素个数
  7. ZRANGE key i j:获取排名为i到j的元素
  8. ZRANGEBYSCORE key min max:获取分数为min到max的元素
  9. ZINCRBY key n item:item.score+=n
  10. ZDIFF、ZINTER、ZUNION:差集交集并集

排名默认为升序,降序排名需要加上REV:ZRANK → ZREVRANK

Redis的Java客户端

客户端介绍

  1. Jedis:方法命名和Redis命令相似。线程不安全,多线程需要连接池。
  2. letture:基于Netty,支持同步、异步和响应式编程方式,线程安全。支持哨兵模式、集群模式和管道模式。
  3. Redisson:实现了分布式、可伸缩的Java数据结构。和使用原生集合一样使用Redis集合。

SpringDataRedis:整合了Jedis、letture

Jedis

redis/jedis: Redis Java client (github.com)

Jedis使用:

1、引入依赖

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>5.0.0</version>
</dependency>

2、建立连接

Jedis jedis = new Jedis("localhost", 6379);
jedis.auth("123.com");
jedis.set("name", "wmhs");
jedis.close();

多线程 → 使用Jedis连接池

SpringDataRedis

简介

Spring Data Redis

  • 整合Lettuce和jedis
  • 提供了RedisTemplate统一API来操作Redis
  • 支持Redis的发布订阅模型、哨兵、集群
  • 支持基于Lettuce的响应式编程
  • 支持基于JDK、JSON、宇符串、Spring对象的数据序列化及反序列化
  • 支持基于Redis的DKCollection实现

SpringDataRedis中提供了RedisTemplate工具类,其中封装了各种对Redis的操作。

不同数据类型的操作API封装到了不同的类型中

自定义RedisSerializer

RedisTemplate可以接收Object作为值写入Redis。

But,采用JDK序列化Object为字节形式。占用内存大、可读性差。

So,可以自行编写RedisSerializer实现(使用jackson)。

But,写入的对象有@class属性,造成了额外开销。

StringRedisTemplate

Spring默认提供了一个StringRedisTemplate类,KV的序列化方式默认就是String方式。

如何存对象? → 自行序列化和反序列化

常见的JSON序列化库:

  1. gson(google 的)
  2. fastjson alibaba(阿里,快但是有Bug)
  3. jackson
  4. kryo

使用步骤:

1、导入pom.xml配置

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

2、配置application.yml

spring:
  data:
    redis:
      port: 6379
      host: 127.0.0.1
      password: 123456
      database: 0
      timeout: 10000
      lettuce:
        pool:
          enabled: true
          max-active: 100
          max-wait: 10000
          max-idle: 10
          min-idle: 1

3、编写测试类

不连接数据库启动SpringBoot项目

@SpringBootApplication(exclude= {DataSourceAutoConfiguration.class})
@Test
void StringRedisTemplateTest() {
    ValueOperations<String, String> ops = stringRedisTemplate.opsForValue();
    // name
    ops.set("name", "wmh");
    System.out.println("name: " + ops.get("name"));
    // yx
    ops.set("yx", gson.toJson(new User("yx", 18)));
    String yx = ops.get("yx");
    System.out.println("yx: " + gson.fromJson(yx, User.class));
}

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

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

相关文章

OpenCV-Python(47):支持向量机

原理 线性数据分割 如下图所示&#xff0c;其中含有两类数据&#xff0c;红的和蓝的。如果是使用kNN算法&#xff0c;对于一个测试数据我们要测量它到每一个样本的距离&#xff0c;从而根据最近的邻居分类。测量所有的距离需要足够的时间&#xff0c;并且需要大量的内存存储训…

最新ChatGPT/GPT4科研应用与AI绘图及论文高效写作

详情点击链接&#xff1a;最新ChatGPT/GPT4科研应用与AI绘图及论文高效写作 一OpenAI 1.最新大模型GPT-4 Turbo 2.最新发布的高级数据分析&#xff0c;AI画图&#xff0c;图像识别&#xff0c;文档API 3.GPT Store 4.从0到1创建自己的GPT应用 5. 模型Gemini以及大模型Clau…

给零基础朋友的编程课11 - 代码

给零基础朋友的编程课11 上 - 布尔值、判断式、while循环_哔哩哔哩_bilibili 给零基础朋友的编程课11 中 - 算术运算符、间隔与索引_哔哩哔哩_bilibili 给零基础朋友的编程课11 下 - 一点透视、比例、仿制品VI的讲解_哔哩哔哩_bilibili 源代码&#xff1a; // // 仿制品VI…

Java JVM 堆、栈、方法区详解

目录 1. 栈 2. 堆 3. 方法区 4. 本地方法栈 5. 程序计数器 首先来看一下JVM运行时数据区有哪些。 1. 栈 在介绍JVM栈之前&#xff0c;先了解一下 栈帧 概念。 栈帧&#xff1a;一个栈帧随着一个方法的调用开始而创建&#xff0c;这个方法调用完成而销毁。栈帧内存放者方…

MetaGPT-打卡-day2,MetaGPT框架组件学习

文章目录 Agent组件实现一个单动作的Agent实现一个多动作的Agent技术文档生成助手其他尝试 今天是第二天的打卡~昨天是关于一些概念的大杂烩&#xff0c;今天的话&#xff0c;就来到了Hello World环节。 从单个Agnet到多个Agent&#xff0c;再到组合更复杂的工作流来解决问题。…

Dubbo-admin监控中心

监控中心 Dubbo-admin监控中心执行操作启动provider和consumer项目进行测试总体流程 Dubbo-admin监控中心 dubbo-admin下载路径 git clone https://github.com/apache/dubbo-admin.git图1-1 dubbo-admin项目文件展示 执行操作 # 启动zookeeper# 前端 cd dubbo-admin-ui npm i…

[足式机器人]Part2 Dr. CAN学习笔记- Kalman Filter卡尔曼滤波器Ch05-5+6

本文仅供学习使用 本文参考&#xff1a; B站&#xff1a;DR_CAN Dr. CAN学习笔记 - Kalman Filter卡尔曼滤波器 Ch05-56 5. An Example 2D例子6. Extended Kalman Filter扩展卡尔曼滤波器&#xff08;EKF&#xff09; 5. An Example 2D例子 6. Extended Kalman Filter扩展卡尔曼…

#vue3 实现前端下载excel文件模板功能

一、需求&#xff1a; 前端无需通过后端接口&#xff0c;即可实现模板下载功能。 通过构造一个 JSON 对象&#xff0c;使用前端常用的第三方库 xlsx&#xff0c;可以直接将该 JSON 对象转换成 Excel 文件&#xff0c;让用户下载模板 二、效果&#xff1a; 三、源码如下&…

基于网络爬虫的微博热点分析,包括文本分析和主题分析

基于Python的网络爬虫的微博热点分析是一项技术上具有挑战性的任务。我们使用requests库来获取微博热点数据&#xff0c;并使用pandas对数据进行处理和分析。为了更好地理解微博热点话题&#xff0c;我们采用LDA主题分析方法&#xff0c;结合jieba分词工具将文本分割成有意义的…

如何发挥 Sketch在UI和UX设计中的作用

Sketch是一款专业的矢量图形设计软件&#xff0c;主要应用于UI设计、移动应用设计、Web设计等领域。假如你是一个交互设计师或UI设计师&#xff0c;那么你一定知道Sketch这一强大的矢量设计软件&#xff1b;如果你使用了Photoshop&#xff0c;那么在你接触到Sketch之后&#xf…

算法题-爬楼梯-不同思路解法

主要记录个人思考过程&#xff0c;不同方案实现思路的演变 题目 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 示例 1&#xff1a; 输入&#xff1a;n 2 输出&#xff1a;2 解释&#xff1a;…

IT大侦“碳”:Concept Luna向循环设计持续演进

IT大侦“碳”&#xff1a;Concept Luna向循环设计持续演进

【Docker】Docker镜像结构及自定义镜像,镜像上传仓库使用

一、引言 Docker镜像是一个只读的Docker容器模板&#xff0c;含有启动Docker容器所需的文件系统结构及其内容&#xff0c;因此是启动一个Docker容器的基础。镜像的结构原理图大致分为四层&#xff1a;共享的内核层、基础镜像层、定制镜像层、可写容器层。 共享的内核层&#xf…

【漏洞攻击之文件上传条件竞争】

漏洞攻击之文件上传条件竞争 wzsc_文件上传漏洞现象与分析思路编写攻击脚本和重放措施中国蚁剑拿flag wzsc_文件上传 漏洞现象与分析 只有一个upload前端标签元素&#xff0c;并且上传任意文件都会跳转到upload.php页面&#xff0c;判定是一个apache容器&#xff0c;开始扫描…

龙年-微信定制红包封面,送一波

龙年新年马上就要来临了&#xff0c;我定制两款红包封面&#xff0c;送给大家。这次是借助AI的能力&#xff0c;自己独立完成&#xff0c;这大概就是这波AI浪潮的魅力&#xff0c;人人皆可参与。 另外&#xff0c;微信平台也给我推送了自己的公众号创作回顾&#xff0c;没想到居…

Failed at the node sass@4.14.1 postinstall script.

首先&#xff0c;查看node和 npm版本 #用于列出已安装的 Node.js 版本。 nvm ls #切换node版本 nvm use 12.17.0 #换国内镜像源&#xff1a;&#xff08;单独设置sass的安装源。&#xff09; npm config set sass_binary_sitehttps://npm.taobao.org/mirrors/node-sass …

小白数学建模 Mathtype 7.7傻瓜式下载安装嵌入Word/WPS以及深度使用教程

数学建模Mathtype的下载安装嵌入Word/WPS以及深度使用教程 一 Mathtype 的下载安装1.1 安装前须知1.2 下载压缩包1.3 安装注册 二 嵌入Word/WPS2.1 嵌入Word2.1.1 加载项嵌入 Word2.1.2 宏录制嵌入 Word 2.2 嵌入 WPS2.2.1 加载项嵌入 WPS2.2.2 宏录制嵌入 WPS 2.3 嵌入时报错解…

AWS 专题学习 P5 (Classic SA、S3)

文章目录 Classic Solutions Architecture无状态 Web 应用程序&#xff1a;WhatIsTheTime.com背景 & 目标架构演进Well-Architected 5 pillars 有状态的 Web 应用程序&#xff1a;MyClothes.com背景 & 目标架构演进总结 有状态的 Web 应用程序&#xff1a;MyWordPress.…

经典数据库练习题及答案

数据表介绍 --1.学生表 Student(SId,Sname,Sage,Ssex) --SId 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别 --2.课程表 Course(CId,Cname,TId) --CId 课程编号,Cname 课程名称,TId 教师编号 --3.教师表 Teacher(TId,Tname) --TId 教师编号,Tname 教师姓名 --4.成绩…

【EI会议征稿通知】第七届先进电子材料、计算机与软件工程国际学术会议(AEMCSE 2024)

第七届先进电子材料、计算机与软件工程国际学术会议(AEMCSE 2024&#xff09; 2024 7th International Conference on Advanced Electronic Materials, Computers and Software Engineering 第七届先进电子材料、计算机与软件工程国际学术会议(AEMCSE 2024)将于2024年5月10-1…