中国网站排名100,安居客二手房,2003网站服务器建设中,什么是速成网站文章目录 引言一、什么是redis1. redis简介2. redis的特点3. redis的应用场景 二、redis在windows下安装1. 下载安装2.验证是否安装成功3. 配置环境变量 三、redis-cli常用命令介绍1. redis-cli2. keys *3. set key value4. get key5. exists key6. del key7. info8. flushdb9.… 文章目录 引言一、什么是redis1. redis简介2. redis的特点3. redis的应用场景 二、redis在windows下安装1. 下载安装2.验证是否安装成功3. 配置环境变量 三、redis-cli常用命令介绍1. redis-cli2. keys *3. set key value4. get key5. exists key6. del key7. info8. flushdb9. ping10. select index11. move key 数据名【0-15】 四、redis数据类型和key的命名规范1. redis数据类型2. key命名规范 五、字符串操作六、hash类型操作七、列表类型操作八、集合类型操作九、有序集合类型操作十、node中使用ioredis连接Redis总结 引言
数据库在现代化的应用开发中起着至关重要的作用它们为我们存储和检索大量的数据提供了便利。然而在不断增长的数据海洋中我们如何保持应用的性能并快速地存储和检索数据呢答案是使用Redis。Redis是一种开源的内存中的数据结构存储系统它可以用作数据库、缓存和消息中间件。在本文中我们将介绍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的特点 速度快Redis是基于内存操作的因此读写速度非常快可以达到10万次/秒的读操作和8.1万次/秒的写操作。 支持多种数据结构Redis支持多种数据结构如字符串string、列表list、集合set、有序集合sorted set、哈希hashes等满足丰富的业务需求。 丰富的功能Redis还支持数据备份即Master-Slave模式的备份。另外Redis还支持事务、管道和分布式等功能。 支持持久化可以将内存中的数据保存在磁盘中重启后可以再次加载进行使用从而达到持久化的效果。 高可用和分布式支持通过Redis Sentinel和Redis Cluster等实现服务器的高可用和分布式。 简单易用Redis有很多客户端几乎所有的语言都有对应的客户端且API使用也非常简单。 开源Redis是开源的可以免费使用和修改。
3. redis的应用场景 缓存系统Redis通常用作内存数据存储系统作为NoSQL的键值数据库来实现内存缓存功能。在缓存应用中Redis通常用于减少应用与慢速的磁盘数据源如关系型数据库或传统的Web API的交互。 消息队列系统Redis的发布订阅、阻塞队列等特性使得它可以作为消息中间件使用。 实时分析如实时统计、计数、排行榜等在这类场景下Redis的Set和Sorted Set常常能立大功。 分布式锁Redis可以实现对某些公共资源的访问限制从而保证系统并发控制的效果。 会话缓存Session Cache其实就是把用户的信息、用户权限、快捷信息等放在会话里。很多网站也是用的 Redis来实现的。 网页访问分析比如记录每个网页访问的次数、频率等等这样可以为网站的热点推荐提供数据支持。 数据过期处理可以通过Redis的键值对过期策略处理某些过期数据。 应用排行榜社交类、游戏类应用经常会有各种排行榜的需求Redis提供的Sorted Set可以非常方便的实现这个功能。 社区网站和合作工具支持“发布/订阅”的消息模式可以帮助我们构建实时工作队列。 物流追踪和预定系统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了 验证是否配置成功winR 输入
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 *
列出所有keyskeys * 。这将返回数据库中所有的keys。
3. set key value
设置key-valueset key value。这会将key-value数据对存入数据库例如 set mykey myvalue。
set username zhangsan这就是在redis中存储了一个键值对key是username, value是zhangsan
4. get key
获取key-valueget key。这将返回与指定key关联的value例如 get mykey。
get username获取key为username的value值如上图就是zhangsan
5. exists key
检查key是否存在exists key。如果key存在该命令返回1否则返回0。
6. del key
删除keydel 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 命名的建议规范 命名应简短且富有描述性。例如用 user123 更合适而不是 typevalue:123。如果 Key 过长不仅会导致额外的内存开销还可能影响内存的操作效率。 命名应保持一致性。例如如果你使用 user123那么将来的所有关键字都必须遵循这种模式如 product456而不是在一些地方使用 var789。 可以使用字符集合包括一部分 ASCII 码其中一般字符如字母数字“.”“-”“”“_”“:” 等用于保证 Key 的可读性和易于理解。 不要使用特殊保留字符。Redis 的一些模式匹配功能使用 “[]”“()”“*”“?” 等字符如果在 Key 中使用这些字符可能会导致无法找到 Key。 避免 Key 冲突。尽量确保每个 Key 的名称是唯一的特别是在数据量较大的情况下。 不推荐在 Key 名称中使用空格这可能在使用某些命令时引入错误。 如果 Key 的数量很大那么 Key 的命名规则应尽可能地反映出数据的结构以便进行批量操作。例如“object-type:id” 这种命名方式如 “user:1000”可以让你轻松地找到某个类型的所有对象。
总的来说Redis 中 Key 的命名应尽可能做到语义化方便理解和管理同时也需要考虑内存和性能的影响。
五、字符串操作
Redis中的字符串类型是最基本的数据类型其对应的操作有以下几种 增加 命令为set key value例如set name “jackson”。这条命令会将键值对{name, “jackson”}存储到redis中如果键name已经存在那么会将它对应的旧值替换为jackson。 修改 修改可以通过set命令来进行例如set name michael。如果键name已经存在那么这条命令会替换掉它的旧值如果没有存在那么就等同于增加一个新的键值对。 查询 查询操作有两种第一种是直接通过键查询命令为get key例如get name会返回name对应的值。 第二种是通过多个键查询命令为mget keys例如mget name age会返回name和age这两个键对应的值。 删除 删除的命令为del key例如del name这条命令会删除键为name的键值对。如果键不存在那么这条命令不会生效。 追加 追加的命令为append key value例如append name “jackson”如果键name已经存在于redis中那么这条命令会在它对应的值的后面追加jackson如果键不存在那么这条命令等同于set name “jackson”。 长度 获取键对应值的长度的命令为strlen key例如strlen name这条命令会返回键name对应的值的长度。 子串 获取键对应值的子串的命令为getrange key start end例如getrange name 0 1这条命令会返回键name对应的值的第0位到第1位的子串。 替换 替换键对应值的子串的命令为setrange key offset value例如setrange name 0 “Jack”这条命令会将键name对应的值的从第0位开始的子串替换为Jack。 自增/自减 对键对应的数值进行自增或自减的命令有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此命令只有在字段不存在时设置值能避免不必要的更新操作提高性能。
实例说明
例如有一个用户对象包含idnameagegender等属性可以如此存储
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
MongoDBrpop key移除并返回列表的最后一个元素。
127.0.0.1:6379 rpop mylist
Redislrem 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) PostgreSQLlindex 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对数据进行操作。
八、集合类型操作
Redis的Set是string类型的无序集合。集合成员是唯一的这就意味着集合中不能出现重复的数据。 在Redis中可以使用以下命令对集合类型的数据进行增删改查操作 增加元素 SADD将一个或多个元素添加到集合中。 例如SADD fruits apple banana orange 删除元素 SREM从集合中删除一个或多个指定元素。 例如SREM fruits apple 修改元素 Redis的集合类型并不支持修改元素的操作只能通过删除和重新添加元素来实现更新。 查询元素 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) 3SMEMBERS 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中对有序集合类型的数据常用操作有 ZADD将一个或多个成员元素及其分值加入到有序集合中。 示例命令ZADD myset 1 member1 2 member2 3 member3 作用将成员元素member1的分值设为1member2的分值设为2member3的分值设为3并将它们加入到名为myset的有序集合中。 ZREM从有序集合中移除一个或多个成员元素。 示例命令ZREM myset member1 member2 作用从名为myset的有序集合中移除成员元素member1和member2。 ZRANK返回有序集合中指定成员元素的排名。 示例命令ZRANK myset member2 作用返回名为myset的有序集合中成员元素member2的排名按照分值从小到大的顺序排列。 ZRANGE返回有序集合中指定排名范围内的成员元素。 示例命令ZRANGE myset 0 2 作用返回名为myset的有序集合中排名在0到2之间的成员元素按照分值从小到大的顺序排列。 ZSCORE返回有序集合中指定成员元素的分值。 示例命令ZSCORE myset member2 作用返回名为myset的有序集合中成员元素member2的分值。 ZINCRBY将有序集合中指定成员元素的分值增加指定值。 示例命令ZINCRBY myset 2 member2 作用将名为myset的有序集合中成员元素member2的分值增加2。 ZCOUNT返回有序集合中分值处于指定范围的成员元素数量。 示例命令ZCOUNT myset 1 3 作用返回名为myset的有序集合中分值在1到3之间的成员元素数量。 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以上示例完成了以下操作
创建了一个有序集合myset并添加了成员元素member1(分值为1)、“member2”(分值为2)和member3(分值为3)。移除了有序集合myset中的成员元素member1。返回了有序集合myset中成员元素member2的排名。返回了有序集合myset中排名在0到2之间的成员元素。返回了有序集合myset中成员元素member2的分值。将有序集合myset中成员元素member2的分值增加了2。返回了有序集合myset中分值在1到3之间的成员元素数量。返回了有序集合myset中的成员元素数量。
十、node中使用ioredis连接Redis
在Node.js中使用ioredis连接Redis的步骤如下
首先安装ioredis模块。可以使用npm在命令行中运行以下命令进行安装
npm install ioredis在代码中引入ioredis模块
const Redis require(ioredis);使用ioredis创建Redis客户端对象
const redis new Redis({host: localhost, // Redis服务器的主机地址port: 6379, // Redis服务器的端口号password: password, //可选Redis服务器的密码db: 0 //可选选择指定的数据库默认连接到0号数据库
});监听是否链接成功
redis.on(error, err {if (err) {console.log(Redis链接错误);console.log(err);redis.quit() // 链接失败退出链接}
})redis.on(ready, () {console.log(Redis链接成功);
})可以通过Redis客户端对象执行一系列的Redis命令例如set、get、hgetall等命令
// 设置键名为name的值为John
redis.set(name, John);// 获取键名为name的值
redis.get(name, (err, result) {console.log(result); // 输出John
});使用完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的结合还有其他疑问或者想要深入了解欢迎留言讨论。谢谢