redis基本介绍以及在node中使用

文章目录

  • 引言
  • 一、什么是redis
    • 1. redis简介
    • 2. redis的特点
    • 3. redis的应用场景
  • 二、redis在windows下安装
    • 1. 下载安装
    • 2.验证是否安装成功
    • 3. 配置环境变量
  • 三、redis-cli常用命令介绍
    • 1. redis-cli
    • 2. keys *
    • 3. set key value
    • 4. get key
    • 5. exists key
    • 6. del key
    • 7. info
    • 8. flushdb
    • 9. ping
    • 10. select index
    • 11. move key 数据名【0-15】
  • 四、redis数据类型和key的命名规范
    • 1. redis数据类型
    • 2. key命名规范
  • 五、字符串操作
  • 六、hash类型操作
  • 七、列表类型操作
  • 八、集合类型操作
  • 九、有序集合类型操作
  • 十、node中使用ioredis连接Redis
  • 总结

引言

数据库在现代化的应用开发中起着至关重要的作用,它们为我们存储和检索大量的数据提供了便利。然而,在不断增长的数据海洋中,我们如何保持应用的性能并快速地存储和检索数据呢?答案是使用RedisRedis是一种开源的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。在本文中,我们将介绍Redis的基本概念,以及如何在Node.js环境中使用Redis。我们将探索Redis的独特性能,并演示如何通过Node.js轻松地将其集成到您的应用中。 无论您是一名刚开始接触Redis的初学者,还是一名在寻找如何在Node.js中使用Redis的经验开发者,本文都将为您提供有价值的信息。

一、什么是redis

1. redis简介

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

2. redis的特点

  1. 速度快Redis是基于内存操作的,因此读写速度非常快,可以达到10万次/秒的读操作和8.1万次/秒的写操作。

  2. 支持多种数据结构Redis支持多种数据结构,如字符串(string)、列表(list)、集合(set)、有序集合(sorted set)、哈希(hashes)等,满足丰富的业务需求。

  3. 丰富的功能Redis还支持数据备份,即Master-Slave模式的备份。另外,Redis还支持事务、管道和分布式等功能。

  4. 支持持久化:可以将内存中的数据保存在磁盘中,重启后可以再次加载进行使用,从而达到持久化的效果。

  5. 高可用和分布式支持:通过Redis SentinelRedis Cluster等实现服务器的高可用和分布式。

  6. 简单易用Redis有很多客户端,几乎所有的语言都有对应的客户端,且API使用也非常简单。

  7. 开源Redis是开源的,可以免费使用和修改。

3. redis的应用场景

  1. 缓存系统Redis通常用作内存数据存储系统作为NoSQL的键值数据库来实现内存缓存功能。在缓存应用中,Redis通常用于减少应用与慢速的磁盘数据源(如关系型数据库或传统的Web API)的交互。

  2. 消息队列系统Redis的发布订阅、阻塞队列等特性使得它可以作为消息中间件使用。

  3. 实时分析:如实时统计、计数、排行榜等,在这类场景下,RedisSetSorted Set常常能立大功。

  4. 分布式锁Redis可以实现对某些公共资源的访问限制,从而保证系统并发控制的效果。

  5. 会话缓存Session Cache):其实就是把用户的信息、用户权限、快捷信息等放在会话里。很多网站也是用的 Redis来实现的。

  6. 网页访问分析:比如记录每个网页访问的次数、频率等等,这样可以为网站的热点推荐提供数据支持。

  7. 数据过期处理:可以通过Redis的键值对过期策略,处理某些过期数据。

  8. 应用排行榜:社交类、游戏类应用经常会有各种排行榜的需求,Redis提供的Sorted Set可以非常方便的实现这个功能。

  9. 社区网站和合作工具:支持“发布/订阅”的消息模式可以帮助我们构建实时工作队列。

  10. 物流追踪和预定系统Redis可以通过状态更新来追踪物品或车辆的实时位置。

二、redis在windows下安装

这里只记录一下windows下的安装流程,其他系统的可以去redis官网查看教程

1. 下载安装

下载地址:https://github.com/tporadowski/redis/releases

在这里插入图片描述
下载zip压缩包,解压即可使用

2.验证是否安装成功

找到解压的目录,cmd
在这里插入图片描述

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

 redis-cli.exe -h 127.0.0.1 -p 6379

在这里插入图片描述
再输入:

info server

在这里插入图片描述
当你看到上图,说明redis安装成功,可以使用。

3. 配置环境变量

建议将redis启动目录,配置环境变量,这样就可以在全局访问redis
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
验证是否配置成功,win+R
输入

redis-server.exe redis.conf

后面的那个redis.conf可以省略,如果省略,会启用默认的
在这里插入图片描述
如上图所示redis启动成功,代表配置的环境变量生效。

三、redis-cli常用命令介绍

1. redis-cli

前面我们验证redis是否安装成功时用到了一行命令

 redis-cli.exe -h 127.0.0.1 -p 6379

这个命令的作用是通过Redis的命令行工具redis-cli来连接本机(IP地址为127.0.0.1)上运行的Redis数据库服务,其中连接的端口号6379(这是Redis默认端口号)。在成功连接数据库后,你可以在命令行中输入Redis命令进行相应的数据库操作。

具体来说:

  • redis-cli.exe:这是Redis的命令行工具。
  • -h 127.0.0.1:这指定了要连接的Redis服务器的IP地址(这里的127.0.0.1是本机的IP地址)。
  • -p 6379:这指定了要连接的Redis服务器的端口号(Redis的默认端口号为6379)。\

其实可以直接输入

redis-cli

其他的会默认执行
在这里插入图片描述

2. keys *

列出所有keys:keys * 。这将返回数据库中所有的keys。
在这里插入图片描述

3. set key value

设置key-value:set key value。这会将key-value数据对存入数据库,例如 set mykey myvalue
在这里插入图片描述

set username zhangsan

这就是在redis中存储了一个键值对,key是username, value是zhangsan

4. get key

获取key-value:get key。这将返回与指定key关联的value,例如 get mykey
在这里插入图片描述

get username

获取keyusernamevalue值,如上图就是zhangsan

5. exists key

检查key是否存在:exists key。如果key存在,该命令返回1,否则返回0。
在这里插入图片描述

6. del key

删除key:del key。这会从数据库中删除指定的key,例如 del mykey
在这里插入图片描述

7. info

查看所有信息:info。获取Redis的统计信息
在这里插入图片描述

8. flushdb

清空数据库:flushdb。清空当前数据库所有数据

9. ping

测试连接:ping。测试客户端与Redis服务器的连通性。
在这里插入图片描述

10. select index

选择数据库:select index。Redis默认设置了16个数据库,编号从0开始,可以使用该命令选择你要操作的数据库。
在这里插入图片描述
如上图,我显示切换到1数据库,然后查看1中所有的key,显示空的,
然后我再次切换为0,查看key,有数据

Redis 默认提供了 16 个数据库,编号从 0 到 15。这些数据库之间相互独立,每个数据库都有自己的键值对,即一个数据库中的数据在另一个数据库中是不可见的。

这些数据库之间可以通过 SELECT 命令进行切换。如果没有明确指定,Redis 将默认使用 0 号数据库。试图访问一个不存在的数据库不会报错,而是创建这个数据库。你可以通过 CONFIG GET databases 命令查询 Redis 数据库的数量。

需要注意的是,尽管Redis提供了多个数据库,但这种机制并没有提供真正的数据库隔离。例如,所有数据库都共享同一个事件循环、后台任务(如过期、持久化等),并且同时只能有一个数据库被选中。

因此,这种多数据库的设计主要适用于将相关的数据保存在一起,而不必将所有数据混在一起,这样可以使得数据访问更加简单、便捷。而对于真正的多租户场景或需要严格的数据库隔离性,建议使用多个Redis实例。

11. move key 数据名【0-15】

在Redis中,我们可以使用MOVE命令将键值对从一个数据库移动到另一个数据库。例如,假设我们有两个数据库,数据库1和数据库2,我们在数据库1中有名称为key1的键值对,我们想将这个键值对移动到数据库2。

以下是操作步骤:

1.首先,我们需要确认当前所在的数据库,这可以通过SELECT命令完成。启动redis服务并进入redis-cli,输入以下命令:

127.0.0.1:6379> SELECT 1

这将切换到数据库1。这里,1是数据库的索引号。

2.然后,我们需要确认‘key1’确实在数据库1中。这可以通过EXISTS命令完成。输入以下命令:

127.0.0.1:6379> EXISTS key1

如果key1存在,它将返回1。如果不存在,它将返回0

3.然后,我们可以使用MOVE命令,将key1从数据库1移动到数据库2(索引为2)。输入以下命令:

127.0.0.1:6379> MOVE key1 2

这将移动key1到数据库2。如果操作成功,它将返回1。如果失败,它会返回0

4.最后,我们可以切换到数据库2,并确认key1是否在这个数据库中。输入以下命令:

127.0.0.1:6379> SELECT 2
127.0.0.1:6379> EXISTS key1

如果key1存在,它将返回1,表明我们已经成功地将键值对从一个数据库移动到了另一个数据库。

四、redis数据类型和key的命名规范

1. redis数据类型

数据类型描述
STRING字符串类型,可以包含任何数据,如jpeg图片或者序列化的对象
LISTRedis List的实现为一个双向链表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销
SETSET是string类型的无序集合,集合成员是唯一的,这就意味着集合中重复的数据会被过滤掉
ZSET (sorted set)ZSET也是string类型的集合,另外每个元素都将关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
HASHRedis hash 是一个键值对集合, 是一个string类型的field和value的映射表,所以他适合用于存储对象。
BITMAPS位图数据类型,将字符串看作二进制位数组来使用,字符串的每一个 bit 位都只能存储 0 或者 1 两种状态的数字
STREAMSRedis 5.0 版本引入的新数据类型,主要用于处理实时的数据流。

2. key命名规范

在 Redis 中,Key 的命名是非常自由的,但为了保证良好的可读性和管理性,下面是一些关于 Key 命名的建议规范:

  1. 命名应简短且富有描述性。例如,用 user🆔123 更合适,而不是 type🆔value:123。如果 Key 过长,不仅会导致额外的内存开销,还可能影响内存的操作效率。

  2. 命名应保持一致性。例如,如果你使用 user🆔123,那么将来的所有关键字都必须遵循这种模式,如 product🆔456,而不是在一些地方使用 var🆔789。

  3. 可以使用字符集合,包括一部分 ASCII 码,其中一般字符,如字母,数字,“.”,“-”,“+”,“_”,“:” 等,用于保证 Key 的可读性和易于理解。

  4. 不要使用特殊保留字符。Redis 的一些模式匹配功能使用 “[]”,“()”,“*”,“?” 等字符,如果在 Key 中使用这些字符,可能会导致无法找到 Key。

  5. 避免 Key 冲突。尽量确保每个 Key 的名称是唯一的,特别是在数据量较大的情况下。

  6. 不推荐在 Key 名称中使用空格,这可能在使用某些命令时引入错误。

  7. 如果 Key 的数量很大,那么 Key 的命名规则应尽可能地反映出数据的结构,以便进行批量操作。例如,“object-type:id” 这种命名方式(如 “user:1000”)可以让你轻松地找到某个类型的所有对象。

总的来说,Redis 中 Key 的命名应尽可能做到语义化,方便理解和管理,同时也需要考虑内存和性能的影响。

五、字符串操作

Redis中的字符串类型是最基本的数据类型,其对应的操作有以下几种:

  1. 增加:
    命令为set key value,例如:set name “jackson”。这条命令会将键值对{name, “jackson”}存储到redis中,如果键name已经存在,那么会将它对应的旧值替换为"jackson"。

  2. 修改:
    修改可以通过set命令来进行,例如:set name "michael"。如果键name已经存在,那么这条命令会替换掉它的旧值,如果没有存在,那么就等同于增加一个新的键值对。

  3. 查询:
    查询操作有两种,第一种是直接通过键查询,命令为get key,例如:get name,会返回"name"对应的值。
    第二种是通过多个键查询,命令为mget keys,例如:mget name age,会返回"name"和"age"这两个键对应的值。

  4. 删除:
    删除的命令为del key,例如:del name,这条命令会删除键为"name"的键值对。如果键不存在,那么这条命令不会生效。

  5. 追加:
    追加的命令为append key value,例如:append name “jackson”,如果键"name"已经存在于redis中,那么这条命令会在它对应的值的后面追加"jackson",如果键不存在,那么这条命令等同于set name “jackson”。

  6. 长度:
    获取键对应值的长度的命令为strlen key,例如:strlen name,这条命令会返回键"name"对应的值的长度。

  7. 子串:
    获取键对应值的子串的命令为getrange key start end,例如:getrange name 0 1,这条命令会返回键"name"对应的值的第0位到第1位的子串。

  8. 替换:
    替换键对应值的子串的命令为setrange key offset value,例如:setrange name 0 “Jack”,这条命令会将键"name"对应的值的从第0位开始的子串替换为"Jack"。

  9. 自增/自减:
    对键对应的数值进行自增或自减的命令有incr key、decr key、incrby key increment、decrby key decrement,例如:incr age、decr age、incrby age 5、decrby age 2。这些命令分别会将键"age"对应的值增1、减1、增5、减2。

六、hash类型操作

Redis中的hash类型数据,可以理解为是字符串类型的field和value的映射表。hash适合用于存储对象。

增加操作:可以使用HSET命令

如,增加一个hash类型的数据,命令如下:

HSET hset_key field1 value1

这个命令意思是在键‘hset_key’中设置一个子键field1,并赋值value1,如果该子键已存在则覆盖其原来的值。

删除操作:可以使用HDEL命令

如,删除一个hash类型的数据,命令如下:

HDEL hset_key field1

这个命令意思是删除键‘hset_key’中的子键field1。

修改操作:使用HSET命令

在redis的hash类型中,如果键中的field已经存在,使用HSET命令会覆盖原来的值。所以修改操作同增加操作。

查找操作:可以使用HGET或HGETALL命令

如,获取一个hash类型中的一个字段,命令如下:

HGET hset_key field1

这个命令意思是获取键‘hset_key’中的子键field1的值。

如果想获取一个hash类型的所有字段以及字段值,命令如下:

HGETALL hset_key

这个命令意思是返回键‘hset_key’相关的所有键值对。

在使用hash类型时,如果对性能要求较高,可以使用HSETNX,此命令只有在字段不存在时设置值,能避免不必要的更新操作,提高性能。

实例说明:

例如有一个用户对象,包含id,name,age,gender等属性,可以如此存储:

HSET user:1000 id 1000
HSET user:1000 name "coder"
HSET user:1000 age 30
HSET user:1000 gender "male"

查看用户属性:

HGETALL user:1000

修改用户的年龄:

HSET user:1000 age 31

删除用户的name属性:

HDEL user:1000 name

七、列表类型操作

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

一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。

Redis中列表类型(list)的数据操作主要包括插入(lpush、rpush)、删除(lpop、rpop、lrem)、修改(lset)、查询(lindex、lrange等)等操作。

增加:

  • lpush key value [value ...]:将一个或多个值插入到列表头部,列表不存在时,会创建一个新的空列表,并进行lpush操作。当列表存在,key对应的值不是列表类型时,返回错误。
127.0.0.1:6379> lpush mylist "Redis"
(integer) 1
127.0.0.1:6379> lpush mylist "MongoDB"
(integer) 2

删除:

  • lpop key:移除并返回列表的第一个元素。
127.0.0.1:6379> lpop mylist
"MongoDB"
  • rpop key:移除并返回列表的最后一个元素。
127.0.0.1:6379> rpop mylist
"Redis"
  • lrem key count value:根据参数count的值,移除列表中与参数value相等的元素。
127.0.0.1:6379> lrem mylist 0 "Redis" 
(integer) 1

查询:

  • lrange key start stop:返回列表的指定区间内的元素,区间以偏移量start和stop指定。
127.0.0.1:6379> lrange mylist 0 4
1) "MongoDB"
2) "Redis"
3) "MYSQL"
4) "Oracle"
5) "PostgreSQL"
  • lindex key index:返回列表中指定位置的元素。
127.0.0.1:6379> lindex mylist 1
"Redis"

修改:

  • lset key index value:通过索引位置来设置列表中的值。
127.0.0.1:6379> lset mylist 1 "MySQL"
OK
127.0.0.1:6379> lindex mylist 1
"MySQL"

以上就是在Redis中对于列表类型数据的一些基本操作,操作主要依靠各种不同的命令来进行。这些都是Redis很实用的基础命令,可以帮助我们更好地使用Redis对数据进行操作。

八、集合类型操作

RedisSetstring类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
Redis中,可以使用以下命令对集合类型的数据进行增删改查操作:

  1. 增加元素

    • SADD:将一个或多个元素添加到集合中。
      例如:SADD fruits apple banana orange
  2. 删除元素

    • SREM:从集合中删除一个或多个指定元素。
      例如:SREM fruits apple
  3. 修改元素
    Redis的集合类型并不支持修改元素的操作,只能通过删除和重新添加元素来实现更新。

  4. 查询元素

    • SMEMBERS:返回集合中的所有元素。
      例如:SMEMBERS fruits

    • SISMEMBER:判断一个元素是否在集合中。
      例如:SISMEMBER fruits apple

    • SCARD:返回集合中的元素个数。
      例如:SCARD fruits

    • SRANDMEMBER:随机返回集合中的一个元素。
      例如:SRANDMEMBER fruits

    • SSCAN:迭代集合中的元素并返回匹配的元素。
      例如:SSCAN fruits 0 MATCH *n*

需要注意的是,以上命令中的集合类型指的是Redis中的无序不重复元素的集合。例如,上述命令中的"fruits"表示一个集合,可以存储多个水果元素,且这些元素是无序的且不重复的。

举例说明:
假设我们使用SADD命令向fruits集合添加元素,然后使用SMEMBERS命令查询集合中的元素,如下所示:

> SADD fruits apple banana orange
(integer) 3
> SMEMBERS fruits
1) "banana"
2) "orange"
3) "apple"

可以看到,通过SADD命令将apple、banana和orange添加到了fruits集合中,并且通过SMEMBERS命令返回了集合中的所有元素。

另外,也可以使用SISMEMBER命令判断一个元素是否在集合中,例如:

> SISMEMBER fruits apple
(integer) 1

可以看到,通过SISMEMBER命令判断apple是否在fruits集合中,返回结果为1,表示存在。

需要注意的是,以上命令只是针对集合类型的数据,不能对其他类型的数据进行操作。

九、有序集合类型操作

Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

有序集合的成员是唯一的,但分数(score)却可以重复。

集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

Redis中对有序集合类型的数据常用操作有:

  1. ZADD:将一个或多个成员元素及其分值加入到有序集合中。
    示例命令:ZADD myset 1 member1 2 member2 3 member3
    作用:将成员元素"member1"的分值设为1,"member2"的分值设为2,"member3"的分值设为3,并将它们加入到名为"myset"的有序集合中。

  2. ZREM:从有序集合中移除一个或多个成员元素。
    示例命令:ZREM myset member1 member2
    作用:从名为"myset"的有序集合中移除成员元素"member1"和"member2"。

  3. ZRANK:返回有序集合中指定成员元素的排名。
    示例命令:ZRANK myset member2
    作用:返回名为"myset"的有序集合中成员元素"member2"的排名,按照分值从小到大的顺序排列。

  4. ZRANGE:返回有序集合中指定排名范围内的成员元素。
    示例命令:ZRANGE myset 0 2
    作用:返回名为"myset"的有序集合中排名在0到2之间的成员元素,按照分值从小到大的顺序排列。

  5. ZSCORE:返回有序集合中指定成员元素的分值。
    示例命令:ZSCORE myset member2
    作用:返回名为"myset"的有序集合中成员元素"member2"的分值。

  6. ZINCRBY:将有序集合中指定成员元素的分值增加指定值。
    示例命令:ZINCRBY myset 2 member2
    作用:将名为"myset"的有序集合中成员元素"member2"的分值增加2。

  7. ZCOUNT:返回有序集合中分值处于指定范围的成员元素数量。
    示例命令:ZCOUNT myset 1 3
    作用:返回名为"myset"的有序集合中分值在1到3之间的成员元素数量。

  8. ZCARD:返回有序集合中的成员元素数量。
    示例命令:ZCARD myset
    作用:返回名为"myset"的有序集合中的成员元素数量。

综合示例:

ZADD myset 1 member1 2 member2 3 member3
ZREM myset member1
ZRANK myset member2
ZRANGE myset 0 2
ZSCORE myset member2
ZINCRBY myset 2 member2
ZCOUNT myset 1 3
ZCARD myset

以上示例完成了以下操作:

  1. 创建了一个有序集合"myset",并添加了成员元素"member1"(分值为1)、“member2”(分值为2)和"member3"(分值为3)。
  2. 移除了有序集合"myset"中的成员元素"member1"。
  3. 返回了有序集合"myset"中成员元素"member2"的排名。
  4. 返回了有序集合"myset"中排名在0到2之间的成员元素。
  5. 返回了有序集合"myset"中成员元素"member2"的分值。
  6. 将有序集合"myset"中成员元素"member2"的分值增加了2。
  7. 返回了有序集合"myset"中分值在1到3之间的成员元素数量。
  8. 返回了有序集合"myset"中的成员元素数量。

十、node中使用ioredis连接Redis

Node.js中使用ioredis连接Redis的步骤如下:

  1. 首先,安装ioredis模块。可以使用npm在命令行中运行以下命令进行安装:
npm install ioredis
  1. 在代码中引入ioredis模块:
const Redis = require('ioredis');
  1. 使用ioredis创建Redis客户端对象:
const redis = new Redis({host: 'localhost', // Redis服务器的主机地址port: 6379, // Redis服务器的端口号password: 'password', //(可选)Redis服务器的密码db: 0 //(可选)选择指定的数据库,默认连接到"0"号数据库
});
  1. 监听是否链接成功
redis.on('error', err => {if (err) {console.log('Redis链接错误');console.log(err);redis.quit() // 链接失败退出链接}
})redis.on('ready', () => {console.log('Redis链接成功');
})
  1. 可以通过Redis客户端对象执行一系列的Redis命令,例如set、get、hgetall等命令:
// 设置键名为"name"的值为"John"
redis.set('name', 'John');// 获取键名为"name"的值
redis.get('name', (err, result) => {console.log(result); // 输出:John
});
  1. 使用完Redis后,最好关闭Redis客户端连接,以释放资源:
redis.quit();

上述是一个基本的使用ioredis连接Redis的示例。根据具体的需求,可以使用ioredis提供的各种API进行更复杂的操作,例如哈希操作、发布/订阅等。

总结

总结来说,Redis是一款高性能的键值存储数据库,它具备快速读写能力和丰富的数据结构支持。在Node.js开发中,我们可以利用redis模块将其与应用程序进行集成,从而提升系统的性能和可靠性。

通过本文的介绍,我们了解了Redis的基本概念和特点,包括数据类型、集群架构和持久化机制等。我们还学习了如何在Node.js应用程序中使用redis模块进行数据操作,包括连接Redis服务器、设置和获取键值对。

通过使用Redis,我们可以轻松地实现数据的缓存、会话管理和消息队列等功能。它给我们带来了方便、高效和可靠的解决方案,对于构建高负载的实时应用程序非常有帮助。

总之,Redis是一款非常优秀的数据库,它在Node.js中的应用也是非常广泛的。希望本文的介绍能够帮助读者加深对Redis的理解,并在实际开发中能够灵活运用。如果你对Redis和Node.js的结合还有其他疑问或者想要深入了解,欢迎留言讨论。谢谢!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2023年计算机设计大赛国三 数据可视化 (源码可分享)

2023年暑假参加了全国大学生计算机设计大赛,并获得了国家三等奖(国赛答辩出了点小插曲)。在此分享和记录本次比赛的经验。 目录 一、作品简介二、作品效果图三、设计思路四、项目特色 一、作品简介 本项目实现对农产品近期发展、电商销售、灾…

面试官问我Redis怎么测,我一脸懵逼!

有些测试朋友来问我,redis要怎么测试?首先我们需要知道,redis是什么?它能做什么? redis是一个key-value类型的高速存储数据库。 redis常被用做:缓存、队列、发布订阅等。 所以,“redis要怎么测试…

13 Web全栈 pnpm

什么是pnpm? 可以理解成performant npm缩写 速度快、节省磁盘空间的软件包管理器 特点 快速- pnpm比其他包管理器快2倍高效- node_modules中的文件链接自特定的内容寻址存储库支持monorepos- 内置支持单仓多包严格- pnpm默认创建了一个非平铺的node_modules 因此代…

UE4/5Niagara粒子特效学习(使用UE5.1,适合新手)

目录 创建空模板 创建粒子 粒子的基础属性 粒子的生命周期 颜色 大小设置 生成的位置 Skeletal Mesh Location的效果: Shape Location 添加速度 添加Noise力场 在生成中添加: 效果: ​编辑 在更新中添加: 效果&…

基础论文学习(1)——ViT

Vision Transformer(ViT) 模型架构是在 ICLR 2021 上作为会议论文发表的一篇研究论文中介绍的,题为“An Image is Worth 16*16 Words: Transformers for Image Recognition at Scale”。它由Neil Houlsby,Alexey Dosovitskiy和Goo…

常用获取威胁情报数据+信息溯源的平台

获取威胁情报数据 奇安信威胁分析平台深信服威胁情报中心360安全大脑腾讯哈勃分析系统绿盟威胁情报中心安全星图平台安天威胁情报中心VenusEye威胁情报中心VirustotalIBM X-Force威胁情报ThreatBookAlienVaultVirusScan多引擎在线扫描RiskIQThreatMiner 需要注意的是&#xff0…

php 系列题目,包含查看后端源代码

一、弱类型比较问题 原则: 1.字符串和数字比较,字符串回被转换成数字。 "admin" 0(true) admin被转换成数字,由于admin是字符串,转换失败,变成0 int(admin)0,所以比较结果是ture 2.混合字符串转…

【轴承故障诊断】用于轴承故障诊断的集中时频分析研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Go语言基础之函数

函数 Go语言中支持函数、匿名函数和闭包,并且函数在Go语言中属于“一等公民”。 函数定义 Go语言中定义函数使用func关键字,具体格式如下: func 函数名(参数)(返回值){函数体 }其中: 函数名:由字母、数字、下划线…

借助frp的xtcp+danted代理打通两边局域网p2p方式访问

最终效果 实现C内网所有设备借助c1内网代理访问B内网所有服务器 配置公网服务端A frps 配置frps.ini [common] # 绑定frp穿透使用的端口 bind_port 7000 # 使用token认证 authentication_method token token xxxx./frps -c frps.ini启动 配置service自启(可选) /etc/…

分布式核心知识以及常见微服务框架

分布式中的远程调用 在微服务架构中,通常存在多个服务之间的远程调用的需求。远程调用通常包含两个部分:序列化和通信协议。常见的序列化协议包括json、xml、 hession、 protobuf、thrift、text、 bytes等,目前主流的远程调用技术有基于HTTP…

C#小轮子:MiniExcel,快速操作Excel

文章目录 前言环境安装功能测试普通读写读新建Excel表格完全一致测试:成功大小写测试:严格大小写别名读测试:成功 写普通写别名写内容追加更新模板写 其它功能xlsx和CSV互转 前言 Excel的操作是我们最常用的操作,Excel相当于一个…

Unity 之NavMeshAgent 组件(导航和路径寻找的组件)

文章目录 **作用**:**属性和方法**:**用途**:**注意事项**: NavMeshAgent 是Unity引擎中用于导航和路径寻找的组件。它可以使游戏对象在场景中自动找到可行走的路径,并在避免障碍物的情况下移动到目标位置。 以下是关于…

从零玩转系列之微信支付实战PC端装修我的订单页面 | 技术创作特训营第一期

一、前言 欢迎来到本期的博客!本篇文章是 PC 端的结尾了,前面经历过九个章节到本章节刚刚好十章节感谢观看我的文章,那么接下来我们将要编写的是我的订单页面. GGBOM! 本篇完毕后将是 UniApp 的篇章感受移动端的诱惑 💗 本次为前端知识点如果不懂前段可以…

信号波形解读

can波形解读 实际波形 标准帧 发送数据 仲裁段 0x1AA 数据长度为8字节 内容为:0x41, 0x20, 0x38, 0x41, 0x00, 0x16, 0x00, 0x00 波特率 111K

关于stm32推挽带有上下拉电阻的思考、IO口驱动能力是什么

1、发现推挽带有上下拉电阻 1.1、stm32手册 记忆中推挽是不需要上下拉的,没关注过,但是我真的理解上下拉吗,下图来自stm32f4的中文版和英文版的数据手册,没有翻译错,就是“推挽带有上下拉的能力”。 1.2、查找相关信…

基于决策树(Decision Tree)的乳腺癌诊断

决策树(DecisionTree)学习是以实例为基础的归纳学习算法。算法从--组无序、无规则的事例中推理出决策树表示形式的分类规则,决策树也能表示为多个If-Then规则。一般在决策树中采用“自顶向下、分而治之”的递归方式,将搜索空间分为若千个互不相交的子集,在决策树的内部节点(非叶…

DDD 架构分层,MQ消息要放到那一层处理?

作者:小傅哥 博客:https://bugstack.cn 沉淀、分享、成长,让自己和他人都能有所收获!😄 本文的宗旨在于通过简单干净实践的方式教会读者,使用 Docker 配置 RocketMQ 并在基于 DDD 分层结构的 SpringBoot 工…

【Java 动态数据统计图】动态数据统计思路案例(动态,排序,数组)一(112)

需求&#xff1a;&#xff1a; 有一个List<Map<String.Object>>,存储了某年某月的数据&#xff0c; 数据是根据用户查询条件进行显示的&#xff1b;所以查询的数据是动态的&#xff1b;需按月份统计每个年月数据出现的次数&#xff0c;并且按照月份排序&#xff1…

unity 之 Input.GetMouseButtonDown 的使用

文章目录 Input.GetMouseButtonDown Input.GetMouseButtonDown 当涉及到处理鼠标输入的时候&#xff0c;Input.GetMouseButtonDown 是一个常用的函数。它可以用来检测鼠标按键是否在特定帧被按下。下面我会详细介绍这个函数&#xff0c;并举两个例子说明如何使用它。 函数签名…