Redis基础知识学习笔记(二)

news2024/11/15 2:03:34

文章目录

  • 一.Redis安装
    • 1.Windows 下安装
      • 1>资源管理器目录进入
      • 2>目录进入命令:
      • 3.配置环境变量
    • 2.Linux 下安装
      • 1> 安装redis
      • 2> 启动redis
      • 3> 查看 redis 是否启动
  • 二.Redis配置
    • 1. 查看配置
    • 2. 编辑配置
    • 3. 参数说明
  • 三.Redis数据类型
    • 1. String(字符串)
      • 常用命令
      • 实例
    • 2. Hash(哈希)
      • 常用命令
      • 实例
    • 3. List(列表)
      • 常用命令
      • 实例
    • 4. Set(集合)
      • 常用命令
      • 实例
    • 5. zset(sorted set:有序集合)
      • 常用命令
      • 实例
    • 6. HyperLogLog
    • 7. Bitmaps
    • 8. Geospatial Indexes
    • 9. Streams

一.Redis安装

1.Windows 下安装

Github下载: https://github.com/tporadowski/redis/releases(推荐)

官网下载: https://redis.io/download(注意没有Windows版本的)

Windows下的.msi安装和.zip格式区别:

.msi是Windows installer开发出来的程序安装文件,它可以让你安装,修改,卸载你所安装的程序。说白了.msi就是Windows installer的数据包,把所有和安装文件相关的内容封装在一个包里。此外:它还包含有关安装过程自己的信息。例如:安装序列、目标文件夹路径、安装选项和控制安装过程的属性。
.zip是一个压缩包,解压之后即可,不需要安装

建议使用zip压缩包方式下载,如图:
20240901172300

一般解压缩到除C盘之外的盘即可,重命名为redis
20240901172751

在redis的安装目录下打开cmd窗口,运行:

1>资源管理器目录进入

20240901173049

2>目录进入命令:

cd 切换目录命令示例:

例:cd // 显示当前目录

例:cd … // 进入父目录

例:cd /d d: // 进入上次d盘所在的目录(或在直接输入:d:)

例:cd /d d:\ // 进入d盘根目录

例:cd d: // 显示上次d盘所在的目录

例:cd /d d:\src // 进入d:\src目录
redis-server.exe redis.windows.conf

20240901173215

默认端口为6379,出现图上的图标说明redis服务启动成功。命令里面的 redis.windows.conf 可以省略,省略后,使用redis-server.exe命令会使用默认的配置。出现这个即表示redis服务器启动成功了,切记不要关闭

以同样的方式在redis的安装目录下打开cmd,挨个运行:

使用redis-cli.exe命令来打开Redis客户端连接本地redis
redis-cli.exe -h 127.0.0.1 -p 6379

设置键值对:
set myKey abc

取出键值对:
get myKey

20240901173731

也可在客户端连接服务器之后使用ping命令查看是否连接成功,返回PONG则成功

3.配置环境变量

为了方便,建议把Redis路径配置到系统变量Path值中,这样就省得再输路径了。

我们把redis的安装路径复制到系统环境变量的path中即可,之后按ctrl+R进入cmd窗口即可直接运行redis命令

2.Linux 下安装

由于CentOs停止维护,我们以Ubuntu示例,本质流程都一个样

1> 安装redis

sudo apt update
sudo apt install redis-server

2> 启动redis

redis-server

3> 查看 redis 是否启动

redis-cli

如果终端打开以下内容,即表示安装成功:

redis 127.0.0.1:6379>

127.0.0.1 是本机 IP ,6379 是 redis 服务端口。
我们输入 PING 命令,返回PONG即表示安装成功

redis 127.0.0.1:6379> ping
PONG

二.Redis配置

本机使用Redis服务器的话可以挂vscode上使用

Redis 的配置文件位于 Redis 安装目录下,文件名为 redis.conf(Windows 名为 redis.windows.conf)。

1. 查看配置

可以通过 CONFIG 命令查看或设置配置项。(记得打开redis服务器)
语法:

# 查询指定名为<CONFIG_SETTING_NAME>的配置项
redis 127.0.0.1:6379> CONFIG GET CONFIG_SETTING_NAME

# 查询配置文件中所有的配置项
CONFIG GET *

20240901175832

2. 编辑配置

你可以通过修改 redis.conf 文件或使用 CONFIG set 命令来修改配置。
语法:

# 修改指定名为<CONFIG_SETTING_NAME>的值改为<NEW_CONFIG_VALUE>
redis 127.0.0.1:6379> CONFIG SET CONFIG_SETTING_NAME NEW_CONFIG_VALUE

3. 参数说明

redis.conf 配置项说明如下:

序号配置项说明
1daemonize noRedis 默认不是以守护进程的方式运行,可以通过该配置项修改,使用 yes 启用守护进程(Windows 不支持守护线程的配置为 no )
2pidfile /var/run/redis.pid当 Redis 以守护进程方式运行时,Redis 默认会把 pid 写入 /var/run/redis.pid 文件,可以通过 pidfile 指定(windows不支持哦)
3port 6379指定 Redis 监听端口,默认端口为 6379
4bind 127.0.0.1绑定的主机地址
5timeout 300当客户端闲置多长秒后关闭连接,如果指定为 0 ,表示关闭该功能
6loglevel notice指定日志记录级别,Redis 总共支持四个级别:debug、verbose、notice、warning,默认为 notice
7logfile stdout日志记录方式,默认为标准输出,如果配置 Redis 为守护进程方式运行,而这里又配置为日志记录方式为标准输出,则日志将会发送给 /dev/null
8databases 16设置数据库的数量,默认数据库为0,可以使用SELECT 命令在连接上指定数据库id
9save 指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合
10rdbcompression yes指定存储至本地数据库时是否压缩数据,默认为 yes
11dbfilename dump.rdb指定本地数据库文件名,默认值为 dump.rdb
12dir ./指定本地数据库存放目录
13slaveof 设置当本机为 slave 服务时,设置 master 服务的 IP 地址及端口
14masterauth 当 master 服务设置了密码保护时,slave 服务连接 master 的密码
15requirepass foobared设置 Redis 连接密码
16maxclients 128设置同一时间最大客户端连接数,默认无限制
17maxmemory 指定 Redis 最大内存限制
18appendonly no指定是否在每次更新操作后进行日志记录
19appendfilename appendonly.aof指定更新日志文件名
20appendfsync everysec指定更新日志条件
21vm-enabled no指定是否启用虚拟内存机制
22vm-swap-file /tmp/redis.swap虚拟内存文件路径
23vm-max-memory 0将所有大于 vm-max-memory 的数据存入虚拟内存
24vm-page-size 32Redis swap 文件 page 大小
25vm-pages 134217728设置 swap 文件中的 page 数量
26vm-max-threads 4设置访问swap文件的线程数
27glueoutputbuf yes设置在向客户端应答时,是否把较小的包合并为一个包发送
28hash-max-zipmap-entries 64, hash-max-zipmap-value 512指定在超过一定的数量或者最大的元素超过某一临界值时,采用一种特殊的哈希算法
29activerehashing yes指定是否激活重置哈希
30include /path/to/local.conf指定包含其它的配置文件

可视化工具我这里使用的DataGrip
20240901182527

三.Redis数据类型

Redis 主要支持以下几种数据类型:

类型特性
string(字符串)基本的数据存储单元,可以存储字符串、整数或者浮点数。
hash(哈希)一个键值对集合,可以存储多个字段。
list(列表)一个简单的列表,可以存储一系列的字符串元素。
set(集合)一个无序集合,可以存储不重复的字符串元素。
zset(sorted set:有序集合)类似于集合,但是每个元素都有一个分数(score)与之关联。
位图(Bitmaps)基于字符串类型,可以对每个位进行操作。
超日志(HyperLogLogs)用于基数统计,可以估算集合中的唯一元素数量。
地理空间(Geospatial)用于存储地理位置信息。
发布/订阅(Pub/Sub)一种消息通信模式,允许客户端订阅消息通道,并接收发布到该通道的消息。
流(Streams)用于消息队列和日志存储,支持消息的持久化和时间排序。
模块(Modules)Redis 支持动态加载模块,可以扩展 Redis 的功能。

注意:Redis支持多个数据库,并且每个数据库的数据是隔离的不能共享,并且基于单机才有,如果是集群就没有数据库的概念。

Redis是一个字典结构的存储服务器,而实际上一个Redis实例提供了多个用来存储数据的字典,客户端可以指定将数据存储在哪个字典中。这与我们熟知的在一个关系数据库实例中可以创建多个数据库类似,所以可以将其中的每个字典都理解成一个独立的数据库。

每个数据库对外都是一个从0开始的递增数字命名,Redis默认支持16个数据库(可以通过配置文件支持更多,无上限),可以通过配置databases来修改这一数字。客户端与Redis建立连接后会自动选择0号数据库,不过可以随时使用SELECT命令更换数据库

然而这些以数字命名的数据库又与我们理解的数据库有所区别。首先Redis不支持自定义数据库的名字,每个数据库都以编号命名,开发者必须自己记录哪些数据库存储了哪些数据。另外Redis也不支持为每个数据库设置不同的访问密码,所以一个客户端要么可以访问全部数据库,要么连一个数据库也没有权限访问。最重要的一点是多个数据库之间并不是完全隔离的,比如FLUSHALL命令可以清空一个Redis实例中所有数据库中的数据。综上所述,这些数据库更像是一种命名空间,而不适宜存储不同应用程序的数据。比如可以使用0号数据库存储某个应用生产环境中的数据,使用1号数据库存储测试环境中的数据,但不适宜使用0号数据库存储A应用的数据而使用1号数据库B应用的数据,不同的应用应该使用不同的Redis实例存储数据。由于Redis非常轻量级,一个空Redis实例占用的内存只有1M左右,所以不用担心多个Redis实例会额外占用很多内存。

1. String(字符串)

string 是 redis 最基本的数据类型,一个 key 对应一个 value,最大能存储 512MB。

string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据,比如jpg图片或者序列化的对象。

常用命令

命令作用
SET key value设置键的值
GET key获取键的值
INCR key将键的值加 1
DECR key将键的值减 1
APPEND key value将值追加到键的值之后

实例

set test "玛卡巴卡"
get test
incr test
decr test
append test "万岁!"

20240901182901
利用set创建了一个键为test,值为“玛卡巴卡”,get获取test的值,由于这里string值为中文,不能使用incr和decr,append增加值
20240901183315

2. Hash(哈希)

Redis hash 是一个键值(key=>value)对集合,类似于一个小型的 NoSQL 数据库。

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

每个哈希最多可以存储 2^32 - 1 个键值对。

常用命令

命令作用
HSET key field value设置哈希表中字段的值
HGET key field获取哈希表中字段的值
HGETALL key获取哈希表中所有字段和值
HDEL key field删除哈希表中的一个或多个字段

场景:存储、读取、修改用户属性

实例

首先删除前面的String类型的test或者使用另外的数据库,redis共有16个

-- 选择2号数据库
select 2

-- 删除test键
del test

运行:

hmset test field1 "Hello" field2 "World"
hget test field1
hgetall test
hdel test field1
hgetall test

实例中我们使用了hmset设置了两个 field=>value 对, hget 获取对应 field 对应的 value,hdel删除了field1,hgetall获取了test键的全部值
20240901184459

3. List(列表)

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

列表最多可以存储 2^32 - 1 个元素。

常用命令

命令作用
LPUSH key value将值插入到列表头部
RPUSH key value将值插入到列表尾部
LPOP key移出并获取列表的第一个元素
RPOP key移出并获取列表的最后一个元素
LRANGE key start stop获取列表在指定范围内的元素

场景:1、最新消息排行等功能(比如朋友圈的时间线) 2、消息队列

实例

同理,这里我们先使用del命令删除test键

del test

lpush test redis
lpush test mongodb
lpush test rabbitmq
lrange test 0 10
rpush test java
lrange test 0 10
lpop test
rpop test
lrange test 0 10

20240901185930

4. Set(集合)

Redis 的 Set 是 string 类型的无序集合。

集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。

常用命令

命令作用
SADD key value向集合添加一个或多个成员,添加一个 string 元素到 key 对应的 set 集合中,成功返回 1,如果元素已经在集合中返回 0。
SREM key value移除集合中的一个或多个成员
SMEMBERS key返回集合中的所有成员
SISMEMBER key value判断值是否是集合的成员

场景:1、共同好友 2、利用唯一性,统计访问网站的所有独立ip 3、好友推荐时,根据tag求交集,大于某个阈值就可以推荐

实例

同理,这里我们先使用del命令删除test键

del test

sadd test redis
sadd test mongodb
sadd test rabbitmq
smembers test
sadd test rabbitmq
smembers test
srem test rabbitmq
sismember test rabbitmq

20240901190303
注意:以上实例中 rabbitmq 添加了两次,但根据集合内元素的唯一性,第二次插入的元素将被忽略。

5. zset(sorted set:有序集合)

Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

zset的成员是唯一的,但分数(score)却可以重复。

常用命令

命令作用
ZADD key score value向有序集合添加一个或多个成员,或更新已存在成员的分数
ZRANGE key start stop [WITHSCORES]返回指定范围内的成员
ZREM key value移除有序集合中的一个或多个成员
ZSCORE key value返回有序集合中,成员的分数值

场景:1、排行榜 2、带权重的消息队列

实例

同理,这里我们先使用del命令删除test键

del test
zadd test 0 redis
zadd test 0 mongdb
zadd test 0 rabbitmq
zadd test 1 rabbitmq
zrange test 0 1000
zrem test redis
zscore test rabbitmq

20240901190659

6. HyperLogLog

  1. 用于基数估计算法的数据结构。
  2. 常用于统计唯一值的近似值。

7. Bitmaps

  1. 位数组,可以对字符串进行位操作。
  2. 常用于实现布隆过滤器等位操作。

8. Geospatial Indexes

处理地理空间数据,支持地理空间索引和半径查询。

9. Streams

  1. 日志数据类型,支持时间序列数据。
  2. 用于消息队列和实时数据处理。

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

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

相关文章

JVM学习《类加载运行-jvm内存模型》

目录 1.类加载过程 1.1 加载过程详解 1.2 类加载器 2.类加载器和双亲委派机制 3.JVM的内存模型 4.那些是GC Roots的对象有哪些&#xff1f; 1.类加载过程 通过类加载器加载主类到JVM&#xff0c;加载过程可以分为五个主要阶段&#xff1a;加载、验证、准备、解析、初始化。…

PyTorch中使用Transformer对一维序列进行分类的源代码

在PyTorch中使用Transformer对一维序列进行分类是一种常见做法&#xff0c;尤其是在处理时间序列数据、自然语言处理等领域。Transformer模型因其并行化处理能力和自注意力机制而成为许多任务的首选模型。 下面是一个使用PyTorch实现Transformer对一维序列进行分类的完整示例代…

ECC密码与RSA

一、ECC密码&#xff08;椭圆曲线密码&#xff09; 1.基本知识 定义&#xff1a; ECC 全称为椭圆曲线加密&#xff0c;EllipseCurve Cryptography&#xff0c;是一种基于椭圆曲线数学的公钥密码。与传统的基于大质数因子分解困难性的加密方法不同&#xff0c;ECC 依赖于解决椭圆…

@antv/x6 要求不显示水平滚动条,并且如果水平方向上显示不全的节点,则要求自动显示全部节点,垂直方向可以出现滚动条来滚动显示所有的节点。

1、要求一共有二个&#xff1a; 要求一&#xff1a;水平滚动条不显示。之前的文章中就已经发表过&#xff0c;可以用Scroller的className来处理。要求二&#xff1a;水平方向上显示全部节点&#xff0c;如果有显示不全的节点&#xff08;即看不到的节点&#xff09;要求能够显示…

asp.net实验:数据库写入不成功

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…

国庆节微信头像怎么制作?制作国庆国旗节日头像的4个方法

国庆将至&#xff0c;不少朋友的微信头像都换成了渐变红旗头像&#xff0c;是不是觉得超酷呢&#xff1f;如果你也想拥有这样的头像&#xff0c;那就跟着这篇文章一起操作吧&#xff01; 国庆节前夕&#xff0c;让我们先来了解一下如何制作渐变红旗头像。首先&#xff0c;我们需…

基于Python的Flask框架实战全流程从新建到部署【2】

本项目是基于win10系统运行以及操作的&#xff0c;部署在win7系统。 Flask 是一个轻量级的可定制框架&#xff0c;使用Python语言编写&#xff0c;较其他同类型框架更为灵活、轻便、安全且容易上手。 本文是flask框架实战项目&#xff0c;从新建、运行、测试、部署项目…

C/C++的内存分布、动态内存管理等的介绍

文章目录 前言一、C/C的内存分布二、C/C动态内存管理总结 前言 C/C的内存分布、动态内存管理等的介绍 一、C/C的内存分布 因为程序在运行过程中需要存储一些不同的数据&#xff0c;所以需要对内存空间进行分类 二、C/C动态内存管理 C语言动态内存管理是malloc / calloc / rea…

光降解水凝胶:三色光响应

大家好&#xff0c;今天来了解一种三色可见光波长选择性光降解水凝胶生物材料——《Tricolor visible wavelength-selective photodegradable hydrogel biomaterials》发表于《Nature Communications》&#xff0c;其交联剂Rubiq、Rubp和oNB对低能可见光&#xff08;400 - 617n…

洛科威岩棉板重塑屋面应用,以多重优势成为“优选材料”

屋面作为建筑物的“外衣”&#xff0c;不仅承载着遮风挡雨的基本功能&#xff0c;更在保温隔热、防火安全、防潮隔音等方面发挥着举足轻重的作用。然而&#xff0c;面对极端气候、自然灾害以及日益严苛的环保标准&#xff0c;传统屋面材料逐渐暴露出其局限性&#xff0c;保温效…

JVM垃圾判定算法

垃圾收集技术是Java的一堵高墙。Java堆内存中存放着几乎所有的对象实例&#xff0c;垃圾收集器在对堆内存进行回收前&#xff0c;第一件事情就是要确定这些对象中哪些还存活&#xff0c;哪些已经死去&#xff08;即不可能再被任何途径使用的对象&#xff09;。也就是判定垃圾。…

STM32 使用8720 通过LWIP发送数据

一、硬件IOC 1、GPIO 2、NVIC 3、SYS 4、RCC 5、ETH 6、USART 7、LWIP 二、软件函数 1、Main /* USER CODE BEGIN Includes */ #include "ytcesys.h" /* USER CODE END Includes *//* USER CODE BEGIN 2 */ ethreset(); MX_LWIP_Init(); OPEN_USART1…

chunqiude

CVE-2022-28512 靶标介绍&#xff1a; Fantastic Blog (CMS)是一个绝对出色的博客/文章网络内容管理系统。它使您可以轻松地管理您的网站或博客&#xff0c;它为您提供了广泛的功能来定制您的博客以满足您的需求。它具有强大的功能&#xff0c;您无需接触任何代码即可启动并运…

【Java开发】Maven安装配置详细教程

原创文章&#xff0c;不得转载。 文章目录 产生背景用途安装配置本地仓库配置镜像 产生背景 在Java应用程序开发中&#xff0c;随着项目规模的不断扩大和复杂性增加&#xff0c;项目依赖的库、插件和配置文件也变得愈加复杂。传统的项目构建工具&#xff08;如Ant&#xff09;…

简单选择排序例题

从上面题目看出&#xff0c;如果排序方法可保证在排序前后排序码相同的相对位置不变&#xff0c;也就是四个选项里&#xff0c;21和21*之间不会交换 简单选择排序方法是&#xff1a;首先在所有记录中找到排序吗最小的记录&#xff0c;把它与第一个记录交换&#xff0c;然后在其…

EXO:模型最终验证的地方;infer_tensor;step;MLXDynamicShardInferenceEngine

目录 EXO:模型最终验证的地方 EXO:infer_tensor EXO:step MXNet的 mx.array 类型是什么 NDArray优化了什么 1. 异步计算和内存优化 2. 高效的数学和线性代数运算 3. 稀疏数据支持 4. 自动化求导 举例说明 EXO:模型最终验证的地方 EXO:infer_tensor 这段代码定…

【科技前沿】用深度强化学习优化电网,让电力调度更聪明!

Hey小伙伴们&#xff0c;今天我要跟大家分享一个超级酷炫的技术应用——深度强化学习在电网优化中的典型案例&#xff01;如果你对机器学习感兴趣&#xff0c;或是正寻找如何用AI技术解决实际问题的方法&#xff0c;这篇分享绝对不容错过&#xff01;&#x1f469;‍&#x1f4…

Pyqt5高级技巧2:Tab顺序、伙伴快捷键、各类常用控件的事件、可移动的卡片式布局(含基础Demo)

目录 一、编辑Tab顺序 二、编辑伙伴 三、设置快捷键&#xff08;仅MainWindow可用&#xff09; 四、信号槽 【基本介绍】 【常用信号槽】控件对窗体&#xff08;拖地&#xff09; 【常用信号槽】控件对控件 【自定义信号槽】步骤 五、设计文件的转化 六、GUI的运行 1…

【研发日记】吃透新能源充电协议(一)——GB27930实例报文解析

文章目录 前言 背景介绍 充电协议框架 充电握手阶段 充电准备阶段 充电传输阶段 充电结束阶段 错误处理阶段 总结 参考资料 前言 近期在一个嵌入式开发项目中&#xff0c;用到了新能源充电协议&#xff0c;期间在翻阅各种资料文件时&#xff0c;一些地方还是容易理解…

包装和类练习 Stack的使用

目录 1.最小栈 2.有效的括号 3.栈的压入、弹出序列 4.逆波兰表达式求值 5.链栈与顺序栈相比&#xff0c;比较明显的优点是&#xff08; &#xff09; 1.最小栈 2.有效的括号 class Solution {public boolean isValid(String s) {Stack<Character> st new Stack<&g…