Redis入门(1)——Redis是啥 安装Docker的Redis Redis的基本数据类型+常用命令 SpringBoot整合Redis初步

news2024/11/27 17:39:13

目录

  • 引出
  • MySQL数据库:慢
  • Redis是啥?
    • 问题:redis是单线程的,为什么会非常快?
  • 安装Redis的docker
    • 1.搜索docker search redis
    • 2.拉取docker pull redis
    • 3.运行容器
    • 4.进入容器-->进入redis
  • redis的基本数据类型
    • 字符串(string)
    • 列表(list)
    • 集合(set)
    • 有序集合(sorted set)
    • 哈希表(hash)【重要】
  • redis常用命令
  • springBoot整合redis
    • 1.添加依赖的包
    • 2.配置redis
    • 3.初步使用StringRedisTemplate
  • 总结

引出


1.MySQL数据库为啥慢?IO密集型;
2.Redis是啥,内存数据库,快;
3.安装Redis的docker,搜索,拉取,运行,进入;
4.Redis的基本数据类型,字符串,哈希表Hash;
5.Redis的常用命令,设置有效时间,expire uuid 10;
6.SpringBoot整合Redis的方式,StringRedisTemplate;

MySQL数据库:慢

IO密集型操作

在这里插入图片描述

在这里插入图片描述

Redis是啥?

官网:

https://redis.io/docs/about/

Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。它支持字符串、哈希表、列表、集合、有序集合,位图,hyperloglogs等数据类型。内置复制、Lua脚本、LRU收回、事务以及不同级别磁盘持久化功能,同时通过Redis Sentinel提供高可用,通过Redis Cluster提供自动分区。

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

问题:redis是单线程的,为什么会非常快?

在这里插入图片描述

安装Redis的docker

在这里插入图片描述

1.搜索docker search redis

[root@192 ~]# docker search redis

在这里插入图片描述

2.拉取docker pull redis

[root@192 ~]# docker pull redis

在这里插入图片描述

3.运行容器

[root@192 ~]# docker run -itd --name=redis_6379 -p 6379:6379 redis

在这里插入图片描述

4.进入容器–>进入redis

docker exec -it redis_6379 bash
redis-cli

在这里插入图片描述

在这里插入图片描述

redis的基本数据类型

在这里插入图片描述

字符串(string)

序列命令描述
1set key value设置指定 key 的值
2get key获取指定 key 的值。
3mget key1 key2 … keyn获取所有(一个或多个)给定 key 的值。
4setnx key value只有在 key 不存在时设置 key 的值。
5strlen key返回 key 所储存的字符串值的长度。
6incr key将 key 中储存的数字值增一。
7decr key将 key 中储存的数字值减一。
[root@localhost ~]# docker ps |grep redis
5d04e3abf91f        redis                "docker-entrypoint..."   7 days ago          Up 3 days           0.0.0.0:6379->6379/tcp                                     redis_6379
[root@localhost ~]# docker exec -it redis_6379 bash
root@5d04e3abf91f:/data# redis-cli
127.0.0.1:6379> keys *
1) "dress"
2) "tom_bank"
3) "weather"
4) "username"
5) "goods"
6) "mycar"
7) "book"
127.0.0.1:6379> setnx fruits apple
(integer) 1
127.0.0.1:6379> get fruits
"apple"
127.0.0.1:6379>

在这里插入图片描述

列表(list)

可以重复

序列命令描述
1llen key获取列表长度
2lpush key value1… value2将一个或多个值插入到列表头部
3lpop key移出并获取列表的第一个元素
4lrange key start stop获取列表指定范围内的元素
5lrem key count value移除列表元素
6rpush key value1… value2尾部添加
7rpop key [count]尾部移除[count]元素
127.0.0.1:6379> lpush fruits apple peach
(integer) 2
127.0.0.1:6379> lrange fruits 0 3
1) "peach"
2) "apple"
127.0.0.1:6379> rpush fruits orange
(integer) 3
127.0.0.1:6379> lrange fruits 0 3
1) "peach"
2) "apple"
3) "orange"
127.0.0.1:6379> 

在这里插入图片描述

在这里插入图片描述

集合(set)

Redis的Set是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。

序列命令描述
1sadd key member1… member2向集合添加一个或多个成员
2scard key获取集合的成员数
3smemebers key返回集合中的所有成员
4sismember key member判断member元素是否是集合key的成员
5spop key移除并返回集合中的一个随机元素
127.0.0.1:6379> sadd fruits apple apple orange
(integer) 2
127.0.0.1:6379> smembers fruits
1) "orange"
2) "apple"
127.0.0.1:6379> 

在这里插入图片描述

有序集合(sorted set)

序列命令描述
1zadd key score1 member1… score2 member2向有序集合添加一个或多个成员,或者更新已存在成员的分数
2zcard key获取集合的成员数
3zcount key min max计算在有序集合中指定区间分数的成员数
4zrangebylenx key min max[limit offset count]通过字典区间返回有序集合的成员
5zrem key member1 member2移除有序集合中的一个或多个成员
6ZREMRANGEBYSCORE key min max移除有序集合中给定的分数区间的所有成员
7zscore key member返回有序集中,成员的分数值
127.0.0.1:6379> zadd stu 3 peter 8 shirley
(integer) 2
127.0.0.1:6379> zrange stu 0 10
1) "peter"
2) "shirley"
127.0.0.1:6379> zadd stu 6 mary
(integer) 1
127.0.0.1:6379> zrange stu 0 10
1) "peter"
2) "mary"
3) "shirley"
127.0.0.1:6379> 

在这里插入图片描述

哈希表(hash)【重要】

Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。

序列命令描述
1hdel key field1 field2… fieldn删除一个或多个哈希表字段
2hexists key field查看哈希表 key 中,指定的字段是否存在
3hget key field获取存储在哈希表中指定字段的值
4hgetall key获取在哈希表中指定 key 的所有字段和值
5hincrby key field increment为哈希表 key 中的指定字段的整数值加上增量 increment
6hkeys key获取所有哈希表中的字段(field)
7hlen key获取哈希表中字段的数量
8hmget key field1 field2获取所有给定字段的值
9hset key field value将哈希表 key 中的字段 field 的值设为 value 。
10hsetnx key field value只有在字段 field 不存在时,设置哈希表字段的值。
11hvals key获取哈希表中所有值

在这里插入图片描述

127.0.0.1:6379> hset stu name wm grand 4
(integer) 2
127.0.0.1:6379> hget stu name
"wm"
127.0.0.1:6379> 

在这里插入图片描述

在这里插入图片描述

判断某个查看哈希表 key 中,指定的字段是否存在

127.0.0.1:6379> hexists book amount
(integer) 1
127.0.0.1:6379> hexists book amount123
(integer) 0
127.0.0.1:6379> 

获取字段的值,进行减一操作

127.0.0.1:6379> hget book amount
"3"
127.0.0.1:6379> hincrby book amount -1
(integer) 2
127.0.0.1:6379> hget book amount
"2"
127.0.0.1:6379> 

redis常用命令

在这里插入图片描述

序列命令描述
1del key删除 key
2exists key检查给定 key 是否存在。
3expire key seconds为给定 key 设置过期时间。
4pexpire key millisencondskey 的过期时间以毫秒计。
5keys pattern查找所有符合给定模式( pattern)的 key 。(*)
6ttl key以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。
7type key返回 key 所储存的值的类型。
127.0.0.1:6379> set uuid pet
OK
127.0.0.1:6379> expire uuid 10
(integer) 1
127.0.0.1:6379> get uuid
"pet"
127.0.0.1:6379> get uuid
(nil)
127.0.0.1:6379> 

在这里插入图片描述

在这里插入图片描述

可以用在验证码中,10s后过期,失效

在这里插入图片描述

springBoot整合redis

1.添加依赖的包

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.tianju</groupId>
    <artifactId>springboot_redis</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>


    <!--    起步依赖-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.13</version>
    </parent>

    <dependencies>

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

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


    </dependencies>

</project>

2.配置redis

spring:
  redis:
    host: 192.168.111.130
    port: 6379
    database: 0 # 可以不设置,默认是0

完整的redis配置

## Redis 服务器地址
spring.redis.host=localhost
## Redis 服务器连接端口
spring.redis.port=6379
## Redis 数据库索引(默认为 0)
spring.redis.database=0

## 以下非必须,有默认值
## Redis 服务器连接密码(默认为空)
spring.redis.password=
## 连接池最大连接数(使用负值表示没有限制)默认 8
spring.redis.lettuce.pool.max-active=8
## 连接池最大阻塞等待时间(使用负值表示没有限制)默认 -1
spring.redis.lettuce.pool.max-wait=-1
## 连接池中的最大空闲连接 默认 8
spring.redis.lett	uce.pool.max-idle=8
## 连接池中的最小空闲连接 默认 0
spring.redis.lettuce.pool.min-idle=0

3.初步使用StringRedisTemplate

package com.tianju.springboot.service.impl;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import java.util.concurrent.TimeUnit;

@SpringBootTest
@RunWith(SpringJUnit4ClassRunner.class)
public class RedisDemoTest {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @Test
    public void redisString(){
        stringRedisTemplate.opsForValue().set("peter", "pet");

        //判断键是否存在
        boolean exists = Boolean.TRUE.equals(stringRedisTemplate.hasKey("peter"));
        System.out.println(exists);

        // 取出
        String value = stringRedisTemplate.opsForValue().get("peter");
        System.out.println(value);
    }
}

总结

1.MySQL数据库为啥慢?IO密集型;
2.Redis是啥,内存数据库,快;
3.安装Redis的docker,搜索,拉取,运行,进入;
4.Redis的基本数据类型,字符串,哈希表Hash;
5.Redis的常用命令,设置有效时间,expire uuid 10;
6.SpringBoot整合Redis的方式,StringRedisTemplate;

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

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

相关文章

在线招投标系统nodejs+vue

本站是一个B/S模式系统&#xff0c;采用vue框架&#xff0c;MYSQL数据库设计开发&#xff0c;充分保证系统的稳定性。系统具有界面清晰、操作简单&#xff0c;功能齐全的特点&#xff0c;使得在线招投标系统管理工作系统化、规范化。本系统的使用使管理人员从繁重的工作中解脱出…

PHP反序列化漏洞之面向对象基础

一、PHP面向对象基础 要谈PHP反序列化&#xff0c;不得不涉及面向对象&#xff0c;因为在反序列化漏洞利用中&#xff0c;大多涉及的都是“对象”的反序列化。所以需要了解面向对象基础。 面向面向对象是一种以“对象”为中心的编程思想&#xff0c;把要解决的问题分解成各个…

WORD模板如何自定义并使用?

文章目录 0.引言1.新建WORD2.WORD另存为模板3.使用模板 0.引言 使用Word模板可以提高文档处理的一致性、效率和专业性&#xff0c;同时也方便了更新和维护。对于需要频繁创建或修改文档的组织或个人来说&#xff0c;使用Word模板是一个非常实用的工具。本文总结Word模板自定义并…

Docker数据管理和镜像创建

Docker数据管理和镜像创建 一、Docker的数据管理1、数据卷2、数据卷容器3、端口映射4、容器互联&#xff08;使用centos镜像&#xff09; 二、Docker 镜像的创建1、基于现有镜像创建2、基于本地模板创建3、基于Dockerfile创建3.1 联合文件系统&#xff08;UnionFS&#xff09;3…

Docker 的前世今生

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

19 数组静态初始化练习

语法&#xff1a; 数据类型[ ] 数组名称 {元素1&#xff0c;元素2&#xff0c;元素3}; public class Demo1 {public static void main(String[] args) {int[] arr {0,1,2,3};System.out.println(arr);System.out.println(arr[0]);System.out.println(arr[1]);System.out.pri…

线性链表的实现

线性链表简介 线性表的链式存储结构称为线性链表&#xff0c;如图1所示&#xff0c;线性链表将存储空间划分成若干的小块&#xff0c;每块占用若干个字节&#xff0c;这些小块称为存储结点。将其中的存储结点分为两个部分&#xff0c;一部分用于存储数据元素的值&#xff0c;称…

vue中如何通过webpack-bundle-analyzer打包分析工具进行配置优化

vue中随着项目的不断功能迭代和开发&#xff0c;项目文件越来越多&#xff0c;项目的打包文件也越来越大。如何对打包文件进行分析优化&#xff0c;减小打包文件大小呢&#xff1f;可以通过webpack-bundle-analyzer 这个打包分析工具进行解决。 1、webpack-bundle-analyzer的安…

传输层协议 TCP与UDP

目录 传输层端口号端口号范围划分 0-65535认识知名端口号(Well-Know Port Number)netstatpidofxargs UDP协议UDP协议段格式UDP的特点面向数据报UDP的缓冲区基于UDP的应用层协议 TCP协议TCP协议段格式确认应答(ACK)机制超时重传机制连接管理机制&#xff1a;tcp的三次握手和四次…

自然语言处理基础详解入门

1、自然语言的概念 自然语言是指人类社会约定俗成的&#xff0c;并且区别于人工语言&#xff08;如计算机程序&#xff09;的语言&#xff0c;&#xff0c;是自然而然的随着人类社会发展演变而来的语言&#xff0c;它是人类学习生活的重要工具。 2、自然语言处理概述 自然语言…

Kubernetes对象深入学习之四:对象属性编码实战

欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码)&#xff1a;https://github.com/zq2599/blog_demos 本篇概览 本文是《Kubernetes对象深入学习》系列的第四篇&#xff0c;前面咱们读源码和文档&#xff0c;从理论上学习了kubernetes的对象相关的知识&#xff…

【算法基础:搜索与图论】3.6 二分图(染色法判定二分图匈牙利算法)

文章目录 二分图介绍染色法判定二分图例题&#xff1a;860. 染色法判定二分图 匈牙利匹配二分图最大匹配匈牙利匹配算法思想例题&#xff1a;861. 二分图的最大匹配 二分图介绍 https://oi-wiki.org/graph/bi-graph/ 二分图是图论中的一个概念&#xff0c;它的所有节点可以被…

群组变量选择、组惩罚group lasso套索模型预测新生儿出生体重风险因素数据和交叉验证、可视化...

原文链接&#xff1a;http://tecdat.cn/?p25158 本文介绍具有分组惩罚的线性回归、GLM和Cox回归模型的正则化路径。这包括组选择方法&#xff0c;如组lasso套索、组MCP和组SCAD&#xff0c;以及双级选择方法&#xff0c;如组指数lasso、组MCP&#xff08;点击文末“阅读原文”…

htmlCSS-----背景样式

目录 前言&#xff1a; 背景样式 1.背景颜色 background-color 2.背景图片 background-image 背景的权重比较 代码示例&#xff1a; 前言&#xff1a; 很久没写文章了&#xff0c;会不会想我呢&#xff01;今天我们开始学习html和CSS的背景样式以及文字样式&#xff…

井川里予是谁呢?是中国人,还是日本人?

井川里予是抖音上的一个网红&#xff0c;名字叫庞欣然。 井川里予不是日本人&#xff0c;她是地地道道的中国人。 井川里予2001年6月出生于浙江省杭州市&#xff0c;现在在广东湛江发展。她毕业于浙江经济职业技术学院&#xff0c;抖音女网红&#xff0c;粉丝高达一千多万&…

Day 64:集成学习之 AdaBoosting (2. 树桩分类器)

做了一个超类, 用于支持不同的基础分类器. 这里为了减少代码量, 只实现了树桩分类器.树桩分类器每次只将数据分成两堆, 与决策树相比, 简单至极. 当然, 这里处理的是实型数据, 而 ID3 处理的是符号型数据. 抽象分类器代码&#xff1a; package dl;import java.util.Random;im…

图像处理之LoG算子(高斯拉普拉斯)

LoG算子&#xff08;高斯拉普拉斯算子&#xff09; LoG算子是由拉普拉斯算子改进而来。拉普拉斯算子是二阶导数算子&#xff0c;是一个标量&#xff0c;具有线性、位移不变性&#xff0c;其传函在频域空间的原点为0。所有经过拉普拉斯算子滤波的图像具有零平均灰度。但是该算子…

栈OJ(C++)

文章目录 1.最小栈2.栈的压入、弹出序列3.逆波兰表达式&#xff08;后缀表达式&#xff09;求值3.1后缀表达式求值3.2中缀表达式转后缀表达式3.3带有括号的中缀表达式转后缀表达式 1.最小栈 class MinStack { public:MinStack(){}void push(int val){_st.push(val);//empty放在…

MQTT网关 5G物联网网关 PLC控制工业网关

MQTT网关&#xff0c;两个以上的节点之间通信的新型网关&#xff0c;网络节点之间通过互连来实现双向通信。支持PLC协议转MQTT&#xff0c;实现plc数据采集上云&#xff0c;物联网云平台对接&#xff0c;广泛应用于工业自动化plc远程监测控制。 计讯物联5G MQTT物联网网关TG463…

设计模式-单例模式进阶

在前面的文章(设计模式-单例模式)中&#xff0c;我们分别介绍了四种单例设计模式&#xff0c;包括普通恶汉式单例、双重检查锁单例(DCL)、静态内部类单例以及枚举单例。但是&#xff0c;这四种模式还有一些问题我们没有仔细分析&#xff0c;以至于我们无法深入分析他们的优点以…