Redis基本介绍

article/2025/11/11 7:24:12

文章目录

    • 1.Redis简介
    • 2.Redis应用场景
    • 3.Redis单线程模型
    • 4.Redis常用命令
    • 5.Redis数据结构
    • 6.SpringBoot整合Redis框架

参考蚂蚁课堂

1.Redis简介

Redis属于No-sql数据库类似于MongoDB,是一个完全开源免费的一个高性能的key-value数据库。它是基于内存的数据库,非关系型数据库不同于mysql,sqlserver,Oracle他们都是存放在硬盘的,我们每次操作都相当于IO操作性能非常低,非关系型数据库的数据都是存放在内存中的,如果redis一旦关机数据可能会丢失所以我们需要一些持久化机制。但是redis数据库内存是有限的存储的数据一旦超过内存那么redis会有淘汰策略,保证不超过内存的阈值。

2.Redis应用场景

  • Token 令牌的生成
  • 短信验证码的code(有效期)
  • 缓存一些查询数据
  • 分布式锁
  • 延迟操作:比如秒杀抢购,这时候库存减1,但是如果这个人30分钟之内都没有支付那么我的库存就会+1。
  • 分布式消息中间件(本身支持但很少用)
  • 支持事务的操作

3.Redis单线程模型

首先Redis只有Linux版本没有Windows版本的原因是Redis底层是用NIO实现的只有Linux有epoll而windows没有。Redis的底层采用NIO中的IO多路复用机制,能够非常好的支持高并发从而保证线程安全问题。Redis单线程,也就是底层采用一个线程来维护多个不同的客户端的IO操作。

在这里插入图片描述

但是NIO在不同的操作系统上实现方式有所不同,在我们windows操作系统中selector就类似于一个注册中心,所有的连接都会注册到selector里然后里面就类似一个for循环,不断轮询,如果有数据就把线程分给他使用这样就能达到一个线程维护多个连接的效果。select实现轮询时间复杂度是为O(n)。在windows中可能存在空轮询的情况所以windows系统中效率非常低。其次对我们轮询数据有一定限制,支持上万的tcp连接非常困难。

Linux操作系统就聪明多了,他也是注册到selector中所以在Linux操作系统中采用epoll事件回调,不会存在空轮询只对活跃的socket连接 实现主动回调时间复杂度为O(1)。windows没有epoll。

4.Redis常用命令

首先我们要先把redis改成前台启动 vi redis.conf然后找到这个东西,daemonize把这个后面改成yes。

查看redis进程 ps aux | grep ‘redis’

启动redis ./redis-server ./redis.conf启动redis服务器。

启动redis客户端./redis-cli

在客户端你可以set key和value。

在这里插入图片描述

redis设置账号密码

将redis配置文件中的requirepass foobared注释打开,设置成自己的比如requirepass 123456

然后你再连接客户端的时候就需要输入auth 123456.

在这里插入图片描述

我们查看这台虚拟机的IP然后我想通过客户端工具连接Redis。

在这里插入图片描述

这肯定连接不上因为这是虚拟IP。所以我们需要设置Redis允许IP访问。

我们首先要在redis的配置文件当中注释掉bind 127.0.0.1,然后protected-mode no ##允许外界访问。systemctl stop firewalld关掉防火墙。

然后关机重启redis就可以了。

在这里插入图片描述

5.Redis数据结构

如上图所示redis分为db0到db15一共16个库一个库里面不能有重复的key。他一共支持这么几种类型String类型、Hash类型、List类型、Set类型 、Sorted-Sets类型。

  • String类型

    ​ String是redis最基本的类型,一个key对应一个value,sring类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象, Sring类型是Redis最基本的数据类型,一个键最大能存储512MB。

    如:set name xiaoming get name

  • Hash类型

    ​ 我们可以将Redis中的Hash类型看成具有<key,<key1,value>>,其中同一个key可以有多个不同key值的<key1,value>,所以该类型非常适合于存储值对象的信息。如Username、Password和Age等。如果Hash中包含很少的字段,那么该类型的数据也将仅占用很少的磁盘空间。

    如:HMSET student zhangsan 15 lisi 11 (添加)

    HGETALL student(获取)

    List类型

    ​ Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。

    如:LPUSH studentlist zhangsan lisi wangwu

  • Redis 集合(Set)

    ​ Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。

    如:SADD studentset zhangsan lisi wangwu

  • Redis 有序集合(sorted set)

    ​ Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员。

    如:ZADD studentSortedSet redis。

6.SpringBoot整合Redis框架

首先新建一个Module然后再pom文件中添加一些必要的依赖。

<dependencies><!-- 集成commons工具类 --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId></dependency><!-- 集成lombok 框架 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!-- fastjson --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.30</version></dependency><!-- SpringBoot-整合Web组件 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>

然后就是yml文件

spring:redis:host: 192.168.247.3port: 6379database: 1

yml文件配置自己的redis服务器的地址和端口号以及redis当中一共有16个库,通过database这个配置指定号存放的位置。

然后我们可以写一个redis的工具类。

@Component
public class RedisUtils {/*** 获取我们的redis模版*/@Autowiredprivate StringRedisTemplate stringRedisTemplate;public void setString(String key, String value) {setString(key, value, null);}public void setString(String key, String value, Long timeOut) {stringRedisTemplate.opsForValue().set(key, value);if (timeOut != null) {stringRedisTemplate.expire(key, timeOut, TimeUnit.SECONDS);}}public String getString(String key) {return stringRedisTemplate.opsForValue().get(key);}/*** redis当成数据库中** 注意事项:对我们的redis的key设置一个有效期*/}

这个工具类要注意的是redis数据一定要设置有效期不然的化他们都会持久化的硬盘当中。

controller层

在redis中存储数据可以将对象转化为json存在redis中。

@RestController
public class RedisController {@Autowiredprivate RedisUtils redisUtils;@GetMapping("/addUser")public String addUser(UserEntity userEntity) {// 1.将我们的对象转换成jsonString json = JSONObject.toJSONString(userEntity);redisUtils.setString("userEntity", json);return "存储成功~";}@RequestMapping("/getUser")public UserEntity getUser(String key) {String json = redisUtils.getString(key);UserEntity userEntity = JSONObject.parseObject(json, UserEntity.class);return userEntity;}
}

然后我们启动在浏览器中添加数据到redis中。

在这里插入图片描述

然后我们查看一下数据库。

在这里插入图片描述

我们可以看到在db1中我们成功插入了我们的对象。

在这里插入图片描述


http://chatgpt.dhexx.cn/article/qmQv1SOu.shtml

相关文章

DB2的HADR的搭建

整理这篇文档主要记录复制搭建过程中遇到的问题&#xff0c;被其中一个搞了好久才突然一下子明白过来。。。。 1.备份恢复的时候报错&#xff1a;SQL0970N The system attempted to write to a read-only file. SQLSTATE55009 2.SQL1768N Unable to start HADR. Reason cod…

gaussDB安装

1、用winSCP连接弹性服务器&#xff0c;将windows下的gaussDB安装包复制到linux下 2、将GaussDB安装包从root目录下复制一份到/gs目录下 3、在当前目录解压缩 4、打开配置文件 vi /etc/profile 添加如下命令 ulimit -c unlimited 5、打开系统配置文件 vi /etc/sysctl.c…

redis 如何切换db

文章来源&#xff1a;http://www.ttlsa.com/redis/redis-database/ redis默认有db0~db15之多。 一台服务器上都快开启200个redis实例了&#xff0c;看着就崩溃了。这么做无非就是想让不同类型的数据属于不同的应用程序而彼此分开。 那么&#xff0c;redis有没有什么方法使不同…

PostgreSQL安装+TimescaleDB安装(Windows)

PostgreSQL安装TimescaleDB安装&#xff08;Windows&#xff09; 一、安装环境1.系统2.PostgreSQL安装包3.TimescaleDB安装包4.Visual Studio Community 2019 二、PostgreSQL安装1.安装PostgreSQL2.配置环境变量3.验证是否安装成功 三、TimescaleDB安装1.安装TimescaleDB2.验证…

springboot连接redis并动态切换database(db0到db15)

redis redis db0到db15springboot连接redis添加配置文件application.properties测试是否连接成功redis动态切换database redis db0到db15 可以理解为数据库表这是redis默认提供的16个表 我们可以把不同的数据存在不同的db上 取得时候可以在不同的db拿到不同类型数据 springb…

各种接口

一、DB9与DB25 九针串口 串口是计算机主要的外部接口之一&#xff0c;通过九针串口连接的设备有很多&#xff0c;像串口鼠标、MODEM、手写板等等&#xff0c;九针串口的示意图如上&#xff0c;其各脚的定义如下&#xff1a; 1 DCD 载波检测 2 RXD 接收数据 3 TXD 发送数据…

Altium designer--DB接口DB9/DB15/DB25/DB37/DB50

使用Altium designer软件绘制DB接口封装图如下所示&#xff1a; 具体获取方式见文末链接 &#xff08;1&#xff09;DB9针 &#xff08;2&#xff09;DB15针 &#xff08;3&#xff09;DB25针 &#xff08;4&#xff09;DB37针 &#xff08;5&#xff09;DB50针 AD封装库链接…

常用接口定义02——DB与DR系列端口

&#xfeff;&#xfeff; DB系列与DR系列端子是设计PCB时经常会遇到的&#xff0c;直到前两天才专门找时间总结了一下两个系列接口的区别并从淘宝上找到实物图与之对应。 DB系列&#xff1a; 1.DB9 2.DB15&#xff08;三排&#xff09; 母头尺寸图&#xff1a; 3.DB15&#x…

pixhawk罗盘校准进度条没有反应

可能还是得把GPS加上才能校准罗盘。 https://blog.csdn.net/LockeDr/article/details/89320593 https://wenku.baidu.com/view/1b5c56114a2fb4daa58da0116c175f0e7cd11968.html

电子罗盘详解之地磁场和航向角

地球本身具有磁性,所以地球和近地空间之间存在着磁场,叫做地磁场。地磁场的强度为0. 3 至0. 6 高斯,其大小和方向随地点(甚至随时间) 而异。地球本身具有磁性,所以地球和近地空间之间存在着磁场,叫做地磁场。地磁场的强度为0. 3 至0. 6 高斯,其大小和方向随地点(甚至随时间) 而…

倾斜补偿的电子罗盘(2):磁传感器的误差来源、硬磁干扰的校准(3个参数)、实验验证

电子罗盘(2)&#xff1a;磁传感器的误差来源、硬磁干扰的校准&#xff08;3个参数&#xff09;、实验验证 文章目录 理想情况误差来源内部外部误差模型 硬磁干扰的校准&#xff08;3个参数&#xff09;使用的模型最小二乘法 实测结果总结代码和资料MATLAB代码参考资料样机 理想…

倾斜补偿的电子罗盘(3):椭球拟合,磁传感器软磁干扰和硬磁干扰的9参数校准

倾斜补偿的电子罗盘(3)&#xff1a;椭球拟合&#xff0c;磁传感器软磁干扰和硬磁干扰的9参数校准 背景 之前提到磁传感器的误差来源&#xff0c;并介绍了消除硬磁干扰的3参数校准。倾斜补偿的电子罗盘(2)&#xff1a;磁传感器的误差来源、硬磁干扰的校准&#xff08;3个参数&…

地磁传感器_磁感应计_电子罗盘(compass)原理

ref: http://www.360doc.com/content/14/0724/23/9152906_396847920.shtml https://wenku.baidu.com/view/8fcb6f94284ac850ad024244.html 原文链接&#xff1a;https://blog.csdn.net/weixin_43614541/article/details/104818380 1.利用旋转矩阵推导倾斜补偿公式 电子罗盘的…

电子罗盘全详解

目前, 导航系统在汽车、航海、航空等领域已经得到广泛的应用。电子罗盘是导航系统不可缺少的重要组成部分。 GPS导航定位的缺陷 1、虽然GPS在导航、定位、测速、定向方面有着广泛的应用&#xff0c;但由于其信号常被地形、地物遮挡&#xff0c;导致精度大大降低,其信号可用性仅…

电子罗盘详解之原理和特点

电子罗盘的原理 三维电子罗盘由三维磁阻传感器、双轴倾角传感器和MCU构成。 三维磁阻传感器用来测量地球磁场,倾角传感器是在磁力仪非水平状态时进行补偿;MCU处理磁力仪和倾角传感器的信号以及数据输出和软铁、硬铁补偿。 三维磁阻传感器采用三个互相垂直的磁阻传感器,每个…

大疆无人机飞行感知技术中各传感器作用

无人机的飞行感知技术主要有两个用途&#xff1a; 其一是提供给飞行控制系统&#xff0c;由于飞行控制系统的主要功能是控制飞机达到期望姿态和空间位置&#xff0c;所以这部分的感知技术主要测量飞机运动状态相关的物理量&#xff0c;涉及的模块包括陀螺仪、加速度计、磁罗盘、…

看完这个,让你分分钟搞定罗盘与加计校准!

看完这个&#xff0c;让你分分钟搞定罗盘与加计校准&#xff01; 罗盘和加计的校准是日常开发中最基础的工作&#xff0c;特邀Echo老师对罗盘和加速度计校准的工程方法进行总结&#xff0c;为小伙伴你们解惑&#xff0c;是有此文。 作者信息 Echo&#xff0c;本名邹佳池&…

android 磁场传感器 罗盘,Android开发获取重力加速度和磁场强度的方法

本文实例讲述了Android开发获取重力加速度和磁场强度的方法。分享给大家供大家参考,具体如下: Android获取重力加速度和磁场强度主要依靠: Sensor.getRotationMatrix (float[] R, float[] I, float[] gravity, float[] geomagnetic) 输入数据: gravity为重力传感器测得的重…

一文读懂电子罗盘的原理、校准和应用

1 概述及应用 基本介绍 电子罗盘&#xff0c;也叫数字指南针&#xff0c;是利用地磁场来定北极的一种方法&#xff0c;作为导航仪器或姿态传感器已被广泛应用。古代称为罗经&#xff0c;现代利用先进加工工艺生产的磁阻传感器为罗盘的数字化提供了有力的帮助。现在一般由用磁阻…

C#Winform程序制作仿真地平仪,磁罗盘飞行仪表盘

因为项目需要做一个电子飞行仪表盘包括地平仪和磁罗盘&#xff0c;网上找了很久&#xff0c;没有找到一个合适的控件&#xff0c;就学习了一些图形处理的开源代码做一个简陋的仪表盘来使用&#xff0c;希望对其他人有帮助&#xff0c;如果有好的建议不妨留言 源程序代码https:…