Redis基础用法
好的,下面是关于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文档。
本文作者: 永生
本文链接: https://yys.zone/detail/?id=392
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
发表评论
评论列表 (0 条评论)
暂无评论,快来抢沙发吧!