Redis 数据类型详解:String、List、Set、Hash、Zset

Redis 是一种 NoSQL 数据库,它支持多种数据类型。在前端开发过程中,我们经常会用到 Redis 来存储和处理各种数据。本文将详细介绍 Redis 支持的 5 种数据类型:String、List、Set、Hash、Zset,介绍它们的特点、使用方法和示例代码。

String

String 类型是 Redis 最基本的数据类型,它可以存储任何可编码的数据,包括字符串、数字和二进制数据。在 Redis 中,String 类型的值最大可以达到 512MB。除了基本的操作外,String 类型还支持一些特殊的命令,例如:INCR、DECR、APPEND、GETRANGE、SETBIT 等。

下面是一些常见的 String 类型的操作:

  • SET key value:设置一个 key 的值为 value。
  • GET key:获取 key 的值。
  • INCR key:将 key 的值增加 1。
  • DECR key:将 key 的值减少 1。
  • APPEND key value:将 value 追加到 key 的值的末尾。
  • GETRANGE key start end:获取 key 的值从 start 到 end 的子字符串。
  • SETBIT key offset value:将 key 的值的第 offset 位设置为 value(0 或 1)。

示例代码:

// 连接 Redis 数据库
const Redis = require('redis');
const client = Redis.createClient();

// 设置一个 key 的值为 value
client.set('name', 'Redis');
// 获取 key 的值
client.get('name', (err, value) => {
  console.log(value);
});
// 将 key 的值增加 1
client.incr('count');
// 将 key 的值减少 1
client.decr('count');
// 将 value 追加到 key 的值的末尾
client.append('msg', ', Hello world!');
// 获取 key 的值从 start 到 end 的子字符串
client.getrange('msg', 0, 4, (err, value) => {
  console.log(value);
});
// 将 key 的值的第 offset 位设置为 value(0 或 1)
client.setbit('flag', 0, 1);

List

List 类型是一个有序的字符串列表,它可以存储多个值,每个值都有一个索引值。在 Redis 中,List 类型还支持一些特殊的命令,例如:LPUSH、RPUSH、LPOP、RPOP 等。

下面是一些常见的 List 类型的操作:

  • LPUSH key value1 [value2 …]:将一个或多个值插入到列表头部。
  • RPUSH key value1 [value2 …]:将一个或多个值插入到列表尾部。
  • LPOP key:移除并返回列表头部的值。
  • RPOP key:移除并返回列表尾部的值。
  • LINDEX key index:获取列表指定索引位置的值。
  • LLEN key:获取列表的长度。

示例代码:

// 将一个或多个值插入到列表头部
client.lpush('list', 'a', 'b', 'c');
// 将一个或多个值插入到列表尾部
client.rpush('list', 'd', 'e', 'f');
// 移除并返回列表头部的值
client.lpop('list', (err, value) => {
  console.log(value);
});
// 移除并返回列表尾部的值
client.rpop('list', (err, value) => {
  console.log(value);
});
// 获取列表指定索引位置的值
client.lindex('list', 1, (err, value) => {
  console.log(value);
});
// 获取列表的长度
client.llen('list', (err, value) => {
  console.log(value);
});

Set

Set 类型是一个无序的字符串集合,它可以存储多个值,且每个值必须是唯一的,不能重复。在 Redis 中,Set 类型还支持一些特殊的命令,例如:SADD、SMEMBERS、SISMEMBER、SPOP 等。

下面是一些常见的 Set 类型的操作:

  • SADD key value1 [value2 …]:向集合添加一个或多个成员。
  • SMEMBERS key:返回集合中的所有成员。
  • SISMEMBER key member:判断 member 是否是集合的成员。
  • SCARD key:返回集合中的成员数。
  • SPOP key [count]:移除并返回集合中的一个或多个随机成员。

示例代码:

// 向集合添加一个或多个成员
client.sadd('set', 'a', 'b', 'c');
// 返回集合中的所有成员
client.smembers('set', (err, value) => {
  console.log(value);
});
// 判断 member 是否是集合的成员
client.sismember('set', 'a', (err, value) => {
  console.log(value);
});
// 返回集合中的成员数
client.scard('set', (err, value) => {
  console.log(value);
});
// 移除并返回集合中的一个或多个随机成员
client.spop('set', 2, (err, value) => {
  console.log(value);
});

Hash

Hash 类型是一个键值对集合,它可以存储多个键值对,每个键值对都有一个 key 和一个 value。在 Redis 中,Hash 类型还支持一些特殊的命令,例如:HSET、HGET、HGETALL、HDEL 等。

下面是一些常见的 Hash 类型的操作:

  • HSET key field value:设置 key 中 field 字段的值为 value。
  • HGET key field:获取 key 中 field 字段的值。
  • HGETALL key:获取 key 中所有键值对的值。
  • HDEL key field [field2 …]:删除 key 中一个或多个字段的值。

示例代码:

// 设置 key 中 field 字段的值为 value
client.hset('hash', 'name', 'Redis');
// 获取 key 中 field 字段的值
client.hget('hash', 'name', (err, value) => {
  console.log(value);
});
// 获取 key 中所有键值对的值
client.hgetall('hash', (err, value) => {
  console.log(value);
});
// 删除 key 中一个或多个字段的值
client.hdel('hash', 'name');

Zset

Zset 类型是一个有序的字符串集合,它可以存储多个值,每个值都有一个分值(score),在集合中按照分值从小到大进行排序。在 Redis 中,Zset 类型还支持一些特殊的命令,例如:ZADD、ZRANGE、ZRANGEBYSCORE、ZREM 等。

下面是一些常见的 Zset 类型的操作:

  • ZADD key score1 member1 [score2 member2 …]:向有序集合添加一个或多个成员,或者更新已有成员的分值。
  • ZRANGE key start stop [WITHSCORES]:获取有序集合中排名在 start 到 stop 之间的成员,可以选择返回成员的分值。
  • ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]:获取有序集合中分值在 min 到 max 之间的成员,可以选择返回成员的分值,可以指定返回成员的数量和偏移量。
  • ZREM key member1 [member2 …]:从有序集合中删除一个或多个成员。

示例代码:

// 向有序集合添加一个或多个成员,或者更新已有成员的分值
client.zadd('zset', 1, 'a', 2, 'b', 3, 'c');
// 获取有序集合中排名在 start 到 stop 之间的成员
client.zrange('zset', 0, -1, 'WITHSCORES', (err, value) => {
  console.log(value);
});
// 获取有序集合中分值在 min 到 max 之间的成员
client.zrangebyscore('zset', 1, 3, 'WITHSCORES', 'LIMIT', 0, 2, (err, value) => {
  console.log(value);
});
// 从有序集合中删除一个或多个成员
client.zrem('zset', 'a', 'b');

总结

本文介绍了 Redis 提供的 5 种数据类型:String、List、Set、Hash、Zset。了解这些数据类型的特点、使用方法和示例代码,可以让我们更好地使用 Redis 存储和处理数据,提高前端开发效率。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65a5fcbfadd4f0e0ffe998b0


纠错反馈