redis的基本使用

news2025/4/22 9:52:52

一、 Redis简介

  1. Redis是一个基于内存的 key-value 结构数据库。Redis是一款采用key-value数据存储格式的内存级NoSQL数据库,重点关注数据存储格式,是key-value格式,也就是键值对的存储形式。与MySQL数据库不同,MySQL数据库有表、有字段、有记录,Redis没有这些东西,就是一个名称对应一个值,并且数据以存储在内存中使用为主。什么叫以存储在内存中为主?其实Redis有它的数据持久化方案,分别是RDB和AOF,但是Redis自身并不是为了数据持久化而生的,主要是在内存中保存数据,加速数据访问的,所以说是一款内存级数据库。
  2. 官网介绍:Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。它支持字符串、哈希表、列表、集合、有序集合,位图,hyperloglogs等数据类型。内置复制、Lua脚本、LRU收回、事务以及不同级别磁盘持久化功能,同时通过Redis Sentinel提供高可用,通过Redis Cluster提供自动分区
  3. 特点:
    • 基于内存存储,读写性能高
    • 适合存储热点数据(热点商品、资讯、新闻)
    • 企业应用广泛

Redis在windows下的安装

  1. Redis安装包分为 Windows 版和 Linux 版:

    • Windows版下载地址:https://github.com/microsoftarchive/redis/releases
    • Linux版下载地址: https://download.redis.io/releases/
      在这里插入图片描述
  2. 下载的安装包有两种形式,一种是一键安装的msi文件,还有一种是解压缩就能使用的zip文件,哪种形式都行。

    • 啥是msi,其实就是一个文件安装包,不仅安装软件,还帮你把安装软件时需要的功能关联在一起,打包操作。比如如安装序列、创建和设置安装路径、设置系统依赖项、默认设定安装选项和控制安装过程的属性。说简单点就是一站式服务,安装过程一条龙操作一气呵成,就是为小白用户提供的软件安装程序。
  3. Redis的Windows版属于绿色软件,直接解压zip文件即可使用,解压后目录结构如下:
    在这里插入图片描述

二、服务器启动命令

  1. 服务启动命令:redis-server.exe redis.windows.conf(要在该文件夹目录下进行)
    在这里插入图片描述
    通过快捷键Ctrl + C 即可停止Redis服务

三、客户端连接命令

  1. 客户端连接命令:redis-cli.exe
    在这里插入图片描述
  2. 注意:通过redis-cli.exe命令默认连接的是本地的redis服务,并且使用默认6379端口(初学者无需调整服务器对外服务端口,默认6379。)。也可以通过指定如下参数连接:
    • -h ip地址
    • -p 端口号
    • -a 密码(如果需要)

四、 5种常用数据类型

  1. Redis存储的是key-value结构的数据,其中key是字符串类型,value有5种常用的数据类型:
    • 字符串 string:普通字符串,Redis中最简单的数据类型(常用)
    • 哈希 hash:也叫散列,类似于Java中的HashMap结构(一般拿来存储对象)
    • 列表 list:按照插入顺序排序,可以有重复元素,类似于Java中的LinkedList(使用例子:朋友圈的点赞)
    • 集合 set:无序集合,没有重复元素,类似于Java中的HashSet(使用例子:
    • 有序集合 (sorted set / zset):集合中每个元素关联一个分数(score),根据分数升序排序,没有重复元素(使用例子:各种排行榜)

五. redis的常用命令

5.1. 字符串操作命令

  1. Redis 字符串类型常用命令:
    • (SET key value):设置指定key的值
    • (GET key):获取指定key的值
    • (SETEX key seconds value ):设置指定key的值,并将 key 的过期时间设为 seconds 秒(常用的例子:短信的验证码)
    • (SETNX key value):只有在 key 不存在时设置 key 的值(常用例子:分布式锁)

用法说明:

set name tom   =》表示 设置 键名为name的值为tom,这里的name就是key的名称(键名)

get name    =》表示 获取 键名为name的值

setex age 60 100  =》表示 设置 键名为age的值为100,并把age的过期时间设置为60秒。(从创建完成后开始计时60秒,之后该键名的值就会失效。

setnx month 12     =》当month键名不存在时,表示设置month的值为12,当month键名已经存在时,命令失效,无法设置成功。

5.2. 哈希操作命令

  1. Redis hash 是一个string类型的 field 和 value 的映射表,hash特别适合用于存储对象,常用命令:
    • (HSET key field value): 将哈希表 key 中的字段 field 的值设为 value
    • (HGET key field): 获取存储在哈希表中指定字段的值
    • (HDEL key field):删除存储在哈希表中的指定字段
    • (HKEYS key): 获取哈希表中所有字段
    • (HVALS key):获取哈希表中所有值

用法说明:

hset 1 name zhangsan   
=》表示 设置 key为1的哈希表,key里面filed的值为name,filed对应的值为zhangsan(可以把filed看成属性,然后把value看成属性值)

hget 1 name   
=》表示 获取 存储在key为1的哈希表里面的字段为name的值

hdel 1 name 
=》表示删除存储在key为1的哈希表中里面的字段名为name的字段

hkeys 1 
=》表示获取key为1的哈希表的所有字段

hvals 1
=》表示获取key为1的哈希表里面的所有字段的值

在这里插入图片描述

5.3. 列表操作命令

  1. Redis 列表是简单的字符串列表,按照插入顺序排序,常用命令:
    • (LPUSH key value1 [value2] ): 将一个或多个值插入到列表头部(左边)
    • (LRANGE key start stop ): 获取列表指定范围内的元素
    • (RPOP key ): 移除并获取列表最后一个元素(右边)
    • (LLEN key ): 获取列表长度

在这里插入图片描述

5.4. 集合操作命令

  1. Redis set 是string类型的无序集合。集合成员是唯一的,集合中不能出现重复的数据,常用命令:
    • (SADD key member1 [member2] ): 向集合添加一个或多个成员
    • (SMEMBERS key ): 返回集合中的所有成员
    • (SCARD key ): 获取集合的成员数
    • (SINTER key1 [key2] ): 返回给定所有集合的交集
    • (SUNION key1 [key2] ): 返回所有给定集合的并集
    • (SREM key member1 [member2] ): 删除集合中一个或多个成员

5.5. 有序集合操作命令

  1. Redis有序集合是string类型元素的集合,且不允许有重复成员。每个元素都会关联一个double类型的分数。常用命令:
    • (ZADD key score1 member1 [score2 member2] ): 向有序集合添加一个或多个成员
    • (ZRANGE key start stop [WITHSCORES] ): 通过索引区间返回有序集合中指定区间内的成员
    • (ZINCRBY key increment member ): 有序集合中对指定成员的分数加上增量 increment
    • (ZREM key member [member …] ): 移除有序集合中的一个或多个成员

5.6. redis通用操作命令

  1. Redis的通用命令是不分数据类型的,都可以使用的命令:
    • (KEYS pattern ): 查找所有符合给定模式( pattern)的 key
    • (EXISTS key ): 检查给定 key 是否存在
    • (TYPE key ): 返回 key 所储存的值的类型
    • (DEL key ): 该命令用于在 key 存在是删除 key

六、在java中操作redis

6.1. redis的java客户端

  1. Redis 的 Java 客户端很多,常用的几种:

    • Jedis
    • Lettuce
    • Spring Data Redis
  2. Spring Data Redis 是 Spring 的一部分,对 Redis 底层开发包进行了高度封装。
    在 Spring 项目中,可以使用Spring Data Redis来简化操作。

6.1.1. Spring Data Redis 的使用方式

  1. 操作步骤:
      1. 导入Spring Data Redis 的maven坐标
      1. 配置Redis数据源
      1. 编写配置类,创建RedisTemplate对象,然后通过RedisTemplate对象操作Redis

步骤①:导入springboot整合redis的starter坐标
在这里插入图片描述
上述坐标可以在创建模块的时候通过勾选的形式进行选择,归属NoSQL分类中
在这里插入图片描述
步骤②:进行基础配置

spring:
  redis:
    host: localhost
    port: 6379
    database: 10   # database是指定使用redis里面的哪个数据库(默认用的是0数据库)

操作redis,最基本的信息就是操作哪一台redis服务器,所以服务器地址属于基础配置信息,不可缺少。但是即便你不配置,目前也是可以用的。因为以上两组信息都有默认配置,刚好就是上述配置值。

步骤③:使用springboot整合redis的专用客户端接口操作,此处使用的是RedisTemplate

可以选择创建redis对象:(在里面可以添加一些操作)

@Configuration
@Slf4j  //日志的注解,有它下面的log.info才能使用
public class RedisConfiguration {
@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
	 log.info("开始创建redis模板类...");
	 RedisTemplate redisTemplate = new RedisTemplate();        
	 // 设置Key的序列化器,默认为JdkSerializationRedisSerializer       
	 redisTemplate.setKeySerializer(new StringRedisSerializer());             
	 redisTemplate.setConnectionFactory(redisConnectionFactory);
	 return redisTemplate;
	 }
}

测试类:注意,测试类的位置要和引导类处于同一目录下(一般用idea的Spring Initializr创建的测试环境自动给你建立好目录的,但是如果是使用maven自己导入依赖实现的springboot项目,写测试类的时候则需要建立和引导类所处的目录结构,或者在@SpringbootTest()注解里面指定引导类)
在这里插入图片描述

在这里插入图片描述
注意操作redis之前,记得启动redis。

@SpringBootTest
class SpringbootRedisApplicationTests {
    @Autowired
    private RedisTemplate redisTemplate;
    @Test
    void set() {
        ValueOperations ops = redisTemplate.opsForValue();
        ops.set("age",41);
    }
    @Test
    void get() {
        ValueOperations ops = redisTemplate.opsForValue();
        Object age = ops.get("name");
        System.out.println(age);
    }
    @Test
    void hset() {
        HashOperations ops = redisTemplate.opsForHash();
        ops.put("info","b","bb");
    }
    @Test
    void hget() {
        HashOperations ops = redisTemplate.opsForHash();
        Object val = ops.get("info", "b");
        System.out.println(val);
    }
}

在操作redis时,需要先确认操作何种数据,根据数据种类得到操作接口。例如使用opsForValue()获取string类型的数据操作接口,使用opsForHash()获取hash类型的数据操作接口,剩下的就是调用对应api操作了。各种类型的数据操作接口如下:
在这里插入图片描述

6.1.2、StringRedisTemplate

由于redis内部不提供java对象的存储格式,因此当操作的数据以对象的形式存在时,会进行转码,转换成字符串格式后进行操作。为了方便开发者使用基于字符串为数据的操作,springboot整合redis时提供了专用的API接口StringRedisTemplate,你可以理解为这是RedisTemplate的一种指定数据泛型的操作API。

@SpringBootTest
public class StringRedisTemplateTest {
    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    @Test
    void get(){
        ValueOperations<String, String> ops = stringRedisTemplate.opsForValue();
        String name = ops.get("name");
        System.out.println(name);
    }
}

6.1.3、Redis客户端的选择

  1. Spring Boot默认使用的Redis客户端是Lettuce。Lettuce是一个高性能的异步Redis客户端,它基于Netty框架实现了高效的异步通信。它支持连接池和集群模式,并提供了丰富的功能和灵活的配置选项。

    • 在Spring Boot中,你可以通过在配置文件中设置spring.redis.client-type属性来指定使用的Redis客户端。默认情况下,该属性的值是lettuce,即使用Lettuce作为Redis客户端。如果你想使用Jedis作为Redis客户端,可以根据需要切换成指定客户端技术将该属性的值设置为对应的客户端技术,比如jedis。
  2. 切换成jedis客户端技术操作步骤如下:

步骤①:导入jedis坐标

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

edis坐标受springboot管理,无需提供版本号
步骤②:配置客户端技术类型,设置为jedis

spring:
  redis:
    host: localhost
    port: 6379
    client-type: jedis
  1. lettcus与jedis区别
    • jedis连接Redis服务器是直连模式,当多线程模式下使用jedis会存在线程安全问题,解决方案可以通过配置连接池使每个连接专用,这样整体性能就大受影响
    • lettcus基于Netty框架进行与Redis服务器连接,底层设计中采用StatefulRedisConnection。 StatefulRedisConnection自身是线程安全的,可以保障并发访问安全问题,所以一个连接可以被多线程复用。当然lettcus也支持多连接实例一起工作

七、redis的两种持久化方式

  1. redis提供了两种持久化的方式,分别是RDB(Redis DataBase)和AOF(Append Only File)。
    • RDB:就是在不同的时间点,将redis存储的数据生成快照并存储到磁盘等介质上;
    • AOF:与RDB相比,则是换了一个角度来实现持久化,那就是将redis执行过的所有写指令记录下来,在下次redis重新启动时,只要把这些写指令从前到后再重复执行一遍,就可以实现数据恢复了。
    • 其实RDB和AOF两种方式也可以同时使用,在这种情况下,如果redis重启的话,则会优先采用AOF方式来进行数据恢复,这是因为AOF方式的数据恢复完整度更高。如果没有数据持久化的需求,也完全可以关闭RDB和AOF方式。这样的话,redis将变成一个纯内存数据库,就像memcache一样。

Redis的使用应该是在Linux环境,这里只是基本了解下Redis的知识。

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

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

相关文章

WEB 3D技术 three.js 雾 基础使用讲解

本文 我们说一下 雾 在three.js中有一个 Fog类 它可以创建线性雾的一个效果 她就是模仿现实世界中 雾的一个效果 你看到远处物体会组件模糊 直到完全被雾掩盖 在 three.js 中 有两种雾的形式 一种是线性的 一种是指数的 个人觉得 线性的会看着自然一些 他是 从相机位置开始 雾…

Unity坦克大战开发全流程——开始场景——音效数据逻辑

开始场景——音效数据逻辑 从这里开始到后面的三小节我们都将干一件很重要的事——数据存储&#xff0c;只有实现了数据存储才能在再次进入游戏时保持游戏数据不被丢失。 类图分析&#xff1a;数据管理类是一个大类&#xff0c;它其中关联了两个类&#xff08;这两个类都是数据…

2023年终总结 —— 我和CSDN相遇的第一年之“技术学习和个人成长的回顾与展望”

​ ​ &#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 &#x1f4ab;个人格言:"没有罗马,那就自己创造罗马~" 目录 &#x1f38a;对2023的总结与回顾&#x1f38a; &#x1f3c5;获奖记录 &#x1f4da;学…

test mock-03-wiremock 模拟 HTTP 服务的开源工具 flexible and open source API mocking

拓展阅读 test 之 jmockit-01-overview jmockit-01-test 之 jmockit 入门使用案例 mockito-01-overview mockito 简介及入门使用 PowerMock Mock Server ChaosBlade-01-测试混沌工程平台整体介绍 jvm-sandbox 入门简介 wiremock WireMock是一个流行的开源工具&#xf…

蚂蚁实习一面面经

蚂蚁实习一面面经 希望可以帮助到大家 tcp建立连接为什么要三次握手&#xff1f; 三次握手的过程 注意&#xff1a;三次握手的最主要目的是保证连接是双工的&#xff0c;可靠更多的是通过重传机制来保证的 所谓三次握手&#xff0c;即建立TCP连接&#xff0c;需要客户端和…

Centos7部署Keepalived+lvs服务

IP规划&#xff1a; 服务器IP地址主服务器20.0.0.22/24从服务器20.0.0.24/24Web-120.0.0.26/24Web-220.0.0.27/24 一、主服务器安装部署keepalivedlvs服务 1、调整/proc响应参数 关闭Linux内核的重定向参数&#xff0c;因为LVS负载服务器和两个页面服务器需要共用一个VIP地…

力扣刷题记录(23)LeetCode:718、1143、1035

718. 最长重复子数组 要想到用一个二维数组dp去表示数组nums1和nums2的公共子数组的最大长度。其中二维数组的索引 i、j 分别表示nums1中[0,i-1]数组、nums2中[0,j-1]数组。如果满足nums1[i-1]nums2[j-1],那么dp[i][j]dp[i-1][j-1]1 class Solution { public:int findLength(v…

科技创新实验室数据管理优选:高效企业网盘推荐

科技创新实验室建设是国家加强科技创新基本能力建设的重要措施&#xff0c;企业网盘等高效办公工具的应用是保证科技创新实验室正常运行、提高科研项目团队合作效率的重要手段。 本文将介绍企业网盘Zoho WorkDrive提供的解决方案&#xff1a; 行业痛点1&#xff1a;分散的数据…

CentOS虚拟机硬盘管理

CentOS虚拟机硬盘管理 一、创建虚拟机时分配硬盘 创建虚拟机时&#xff0c;在下图这个页面需要重新选择一下硬盘&#xff0c;可以对硬盘进行配置。 默认自动分区 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/e9ce72af3d934e75be95f7f86860e92b.png 选择确认分…

GitHub的2FA验证问题解决工具

文章目录 前言认识2FA开源工具使用&#xff1a;AuthenticatorPro获取AuthenticatorPro的安卓APK如何使用 参考文章 前言 打开GitHub跳出来这个提示&#xff0c;需要进行验证&#xff1a; 如何解决呢&#xff1f;方案有很多&#xff0c;我们可以使用开源的一个工具&#xff1a;…

微软开源,全平台通用:Shell 自动补全工具 | 开源日报 No.132

microsoft/inshellisense Stars: 7.6k License: MIT inshellisense 是一个为 Shell 提供 IDE 风格自动补全的工具。它是一个终端本地运行时自动完成&#xff0c;支持 600 多个命令行工具&#xff0c;并且可以在 Windows、Linux 和 macOS 上使用。主要功能包括安装后可通过运行…

QT 输入框输入限制 正则表达式限制 整理

在使用 输入数值时&#xff0c;经常遇到限制其范围的需要&#xff0c;比如角太阳高度角范围为[-90,90]&#xff0c;经度值范围[-180,180]&#xff0c;方位角范围[0,360]。Qt提供了QIntValidator和QDoubleValidator可以限定数值输入范围&#xff0c;如使用QIntValidator限制整数…

Python武器库开发-武器库篇之Git的分支使用(三十九)

武器库篇之Git的分支使用(三十九) Git分支是一种用于在项目中并行开发和管理代码的功能。分支允许开发人员在不干扰主要代码的情况下创建新的代码版本&#xff0c;以便尝试新功能、修复错误或独立开发功能。一般正常情况下&#xff0c;开发人员开发一个软件&#xff0c;会有两…

C#语言发展历程(1-7)

一、类型发展 C#1中是没有泛型的 在C#2中在逐渐推出泛型。C#2还引入了可空类型。 示例&#xff1a;C#泛型&#xff08;详解&#xff09;-CSDN博客 1 C#3&#xff1a;引入了匿名类型、和隐式的局部变量&#xff08;var&#xff09; 匿名类型&#xff1a;我们主要是使用在LIN…

蓝桥杯C/C++程序设计——日期统计

问题描述 小蓝现在有一个长度为 100100 的数组&#xff0c;数组中的每个元素的值都在 00 到 99 的范围之内。数组中的元素从左至右如下所示&#xff1a; 现在他想要从这个数组中寻找一些满足以下条件的子序列&#xff1a; 子序列的长度为 88&#xff1b;这个子序列可以按照下…

【数据结构】栈和队列(栈的基本操作和基础知识)

&#x1f308;个人主页&#xff1a;秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343&#x1f525; 系列专栏&#xff1a;《数据结构》https://blog.csdn.net/qinjh_/category_12536791.html?spm1001.2014.3001.5482 目录 前言 栈 栈的概念和结构 栈的实现 ​…

Python+OpenGL绘制3D模型(九)完善插件功能: 矩阵,材质,法线

系列文章 一、逆向工程 Sketchup 逆向工程&#xff08;一&#xff09;破解.skp文件数据结构 Sketchup 逆向工程&#xff08;二&#xff09;分析三维模型数据结构 Sketchup 逆向工程&#xff08;三&#xff09;软件逆向工程从何处入手 Sketchup 逆向工程&#xff08;四&#xf…

结构体:搜索链表

#include<iostream> #include<iomanip> using namespace std; struct Student //创建结构体Student {int number; //学号char name[20]; //姓名float Chinese, Math, English; //成绩语数英Student* next; //下一个节点 }; Student* CreateList() //创建链表 {Stud…

Pytorch的讲解及实战·MNIST数据集手写数字识别

目录 一、前言与pytorch的下载 1、前言 2、下载pytorch ①创建虚拟环境 ②下载pytorch&#xff08;cpu版&#xff09; ③测试pytorch是否下载成功 ④使用jupyter notebook 但是使用不了torch的解决方法 二、pytorch的使用 1、Tensor的数据类型 ①torch.FloatTensor …

【网络安全 | Misc】a_good_idea

正文 使用winhex看到有zip压缩包&#xff1a; 改后缀&#xff1a; 得到两张图&#xff0c;txt中写道&#xff1a;寻找像素的秘密 使用stegsolve将合并两张图并进行像素相减&#xff1a; 再将该图进行转换色道&#xff1a; 扫描二维码得到flag&#xff1a;