好的,下面是关于Redis的详细介绍、常用命令以及Python和Node.js的客户端文档,内容涵盖了学术文章中可能需要的各个方面:

Redis 概览

Redis (REmote DIctionary Server) 是一个开源的、基于内存的、键值对形式的NoSQL数据库。它以其高性能、丰富的数据结构、持久化能力以及对分布式场景的支持而闻名。

主要特性:

  • 内存存储: 数据主要存储在内存中,读写速度极快,远超传统磁盘数据库。
  • 数据结构丰富: 支持字符串(String)、列表(List)、集合(Set)、有序集合(Sorted Set)、哈希(Hash)、位图(Bitmap)、HyperLogLog、地理空间索引(Geospatial)等多种数据结构。
  • 持久化: 提供RDB(快照)和AOF(追加式文件)两种持久化方式,可在重启后恢复数据。
  • 事务: 支持事务(Transaction)操作,保证一组命令的原子性执行。
  • 发布/订阅: 支持发布/订阅(Pub/Sub)模式,可用于消息队列等场景。
  • Lua 脚本: 支持Lua脚本执行,可以在服务器端原子性地执行复杂操作。
  • 主从复制: 支持主从复制(Master-Slave Replication),实现数据备份和读写分离。
  • 哨兵模式: 提供哨兵(Sentinel)机制,实现高可用性(HA),在主节点故障时自动进行故障转移。
  • 集群模式: 支持集群(Cluster)模式,实现数据的分布式存储和水平扩展。

应用场景:

  • 缓存: 作为热点数据的缓存层,提高应用响应速度。
  • 计数器: 实现点赞数、浏览量、在线人数等计数功能。
  • 会话管理: 存储用户会话信息(Session)。
  • 消息队列: 利用发布/订阅功能实现简单的消息队列。
  • 排行榜: 利用有序集合实现实时排行榜。
  • 分布式锁: 利用SETNX等命令实现分布式锁。
  • 地理位置应用: 利用Geospatial功能实现附近的人、附近的商家等功能。

Redis 常用命令

以下是一些常用的Redis命令,涵盖了各种数据类型的操作:

通用命令:

  • KEYS pattern:查找所有符合给定模式(pattern)的key。
  • EXISTS key [key ...]:检查给定 key 是否存在。
  • DEL key [key ...]:删除一个或多个key。
  • TYPE key:返回 key 所储存的值的类型。
  • EXPIRE key seconds:设置 key 的过期时间,以秒计。
  • TTL key:查看 key 的剩余生存时间(秒)。
  • PERSIST key: 移除key的过期时间
  • RENAME key newkey:修改 key 的名称。
  • RANDOMKEY:从当前数据库中随机返回一个 key 。

字符串 (String):

  • SET key value [EX seconds|PX milliseconds] [NX|XX]:设置键值对。
    • EX:设置过期时间(秒)。
    • PX:设置过期时间(毫秒)。
    • NX:仅当 key 不存在时设置。
    • XX:仅当 key 存在时设置。
  • GET key:获取 key 的值。
  • MSET key value [key value ...]:同时设置多个键值对。
  • MGET key [key ...]:获取多个 key 的值。
  • INCR key:将 key 的值加1。
  • DECR key:将 key 的值减1。
  • APPEND key value:将 value 追加到 key 原来的值的末尾。
  • STRLEN key: 返回key的长度

列表 (List):

  • LPUSH key value [value ...]:将一个或多个值插入到列表头部。
  • RPUSH key value [value ...]:将一个或多个值插入到列表尾部。
  • LPOP key:移除并返回列表的第一个元素。
  • RPOP key:移除并返回列表的最后一个元素。
  • LINDEX key index:通过索引获取列表中的元素。
  • LLEN key:获取列表长度。
  • LRANGE key start stop:获取列表指定范围内的元素。
  • LTRIM key start stop: 对列表进行修剪

集合 (Set):

  • SADD key member [member ...]:向集合添加一个或多个成员。
  • SMEMBERS key:返回集合中的所有成员。
  • SISMEMBER key member:判断 member 元素是否是集合 key 的成员。
  • SCARD key:获取集合的成员数。
  • SREM key member [member ...]:移除集合中一个或多个成员。
  • SINTER key1 [key2 ...]:返回多个集合的交集。
  • SUNION key1 [key2 ...]:返回多个集合的并集。
  • SDIFF key1 [key2 ...]:返回多个集合的差集。

有序集合 (Sorted Set):

  • ZADD key score member [score member ...]:向有序集合添加一个或多个成员,或者更新已存在成员的分数。
  • ZRANGE key start stop [WITHSCORES]:通过索引区间返回有序集合的成员。
  • ZREVRANGE key start stop [WITHSCORES]:返回有序集合中指定分数区间内的成员,分数从高到低排序。
  • ZSCORE key member:返回有序集合中成员的分数。
  • ZRANK key member:返回有序集合中成员的排名。
  • ZREMRANGEBYRANK key start stop:移除有序集合中给定的排名区间的所有成员
  • ZCARD key:获取有序集合的成员数。
  • ZCOUNT key min max:计算在有序集合中指定区间分数的成员数。

哈希 (Hash):

  • HSET key field value:将哈希表 key 中的字段 field 的值设为 value。
  • HGET key field:获取存储在哈希表中指定字段的值。
  • HMSET key field value [field value ...]:同时将多个 field-value (域-值)对设置到哈希表 key 中。
  • HMGET key field [field ...]:获取所有给定字段的值。
  • HGETALL key:获取在哈希表中指定 key 的所有字段和值。
  • HDEL key field [field ...]:删除一个或多个哈希表字段。
  • HEXISTS key field:查看哈希表 key 中,指定的字段是否存在。
  • HKEYS key: 获取hash表中所有的字段
  • HVALS key: 获取hash表中所有的值
  • HLEN key:获取哈希表中字段的数量。

发布/订阅 (Pub/Sub):

  • SUBSCRIBE channel [channel ...]:订阅一个或多个频道。
  • PUBLISH channel message:将信息发送到指定的频道。
  • UNSUBSCRIBE [channel [channel ...]]:取消订阅一个或多个频道。

事务 (Transaction):

  • MULTI:标记一个事务块的开始。
  • EXEC:执行所有事务块内的命令。
  • DISCARD:取消事务,放弃执行事务块内的所有命令。
  • WATCH key [key ...]:监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。
  • UNWATCH:取消 WATCH 命令对所有 key 的监视。

docker-compose搭建:

  redis:
    image: redis:latest
    container_name: redis
    restart: always
    ports:
      - "6379:6379"
    volumes:
      - /home/redis/:/usr/local/etc/redis/  # 挂载配置文件
      - /home/redis/data:/data  # 数据持久化

    command: ["redis-server", "--requirepass", "passwd"]  # 配置 Redis 启动时启用密码

Python 客户端 (redis-py)

redis-py 是 Redis 的 Python 客户端库,提供了简洁易用的 API 来操作 Redis 数据库。

安装:

pip install redis

基本用法:

import redis

# 连接到 Redis 服务器
r = redis.Redis(host='localhost', port=6379, db=0)  # 默认连接到本地6379端口的0号数据库

# 字符串操作
r.set('mykey', 'myvalue')
value = r.get('mykey')
print(value)  # 输出: b'myvalue' (注意:Python3中返回的是bytes类型)

# 列表操作
r.lpush('mylist', 'item1', 'item2')
items = r.lrange('mylist', 0, -1)
print(items)  # 输出: [b'item2', b'item1']

# 哈希操作
r.hset('myhash', 'field1', 'value1')
r.hset('myhash', 'field2', 'value2')
hash_data = r.hgetall('myhash')
print(hash_data)  # 输出: {b'field1': b'value1', b'field2': b'value2'}

# 事务操作
with r.pipeline() as pipe:  # 使用pipeline可以减少网络往返次数
    pipe.multi()
    pipe.set('key1', 'value1')
    pipe.set('key2', 'value2')
    pipe.execute()

# 发布/订阅
p = r.pubsub()
p.subscribe('mychannel')
for message in p.listen():
    print(message)
# 在另一个终端或程序中发布消息:
# r.publish('mychannel', 'Hello')

更详细的API文档:
https://redis-py.readthedocs.io/en/stable/

Node.js 客户端 (ioredis)

ioredis 是一个强大且功能齐全的 Node.js Redis 客户端,支持所有 Redis 命令和特性,包括集群、哨兵、流水线、Lua 脚本等。

安装:

npm install ioredis

基本用法:

const Redis = require('ioredis');

// 连接到 Redis 服务器
const redis = new Redis({
  host: 'localhost',
  port: 6379,
  db: 0, // 默认连接到本地6379端口的0号数据库
});

// 字符串操作
async function stringOperations() {
  await redis.set('mykey', 'myvalue');
  const value = await redis.get('mykey');
  console.log(value); // 输出: myvalue
}
stringOperations();
// 列表操作
async function listOperations() {
    await redis.lpush('mylist', 'item1', 'item2');
    const items = await redis.lrange('mylist', 0, -1);
    console.log(items); // 输出: [ 'item2', 'item1' ]
}

// 哈希操作
async function hashOperations() {
  await redis.hset('myhash', 'field1', 'value1');
  await redis.hset('myhash', 'field2', 'value2');
  const hashData = await redis.hgetall('myhash');
  console.log(hashData); // 输出: { field1: 'value1', field2: 'value2' }
}

//事务操作
async function transaction() {
    const [ok,result] = await redis.multi().set("foo", "bar").get("foo").exec();
    console.log(result)
}
//发布订阅
async function pubsub() {
    redis.subscribe("news", "music", (err, count) => {
        if (err) {
            console.error("Failed to subscribe: %s", err.message);
        } else {
            console.log(
                `Subscribed successfully! This client is currently subscribed to ${count} channels.`
            );
        }
    });
    redis.on("message", (channel, message) => {
    console.log(`Received ${message} from ${channel}`);
    });
    //在另一个终端或程序中发布消息:
    // redis.publish("news","hello");
}

//其他命令类似

 

可视化工具(命令查询中文乱码的)

  • RedisInsight: Redis 官方推荐的 GUI 工具,跨平台,功能强大,支持中文(下载时需要填信息,随便填)。

更详细的API文档:

https://github.com/luin/ioredis

总结

以上内容详细介绍了Redis的特性、应用场景、常用命令,以及Python (redis-py) 和 Node.js (ioredis) 客户端的使用方法。这些信息应该足以满足您在学术文章中对Redis的描述和引用。请注意,Redis 的功能非常丰富,本文档仅涵盖了其核心部分,更深入的用法和高级特性,请参考官方文档和客户端库的API文档。