Redis 是一个高性能的 NoSQL 数据库,常用于缓存、消息队列、计数器等场景。本文将介绍 Redis 的常用命令及使用技巧,帮助前端开发者更好地使用 Redis。
Redis 常用命令
字符串类型
字符串类型是 Redis 中最基本的数据类型,常用命令包括:
- SET key value:设置 key 对应的值为 value。
- GET key:获取 key 对应的值。
- INCR key:将 key 对应的值加 1。
- DECR key:将 key 对应的值减 1。
- APPEND key value:将 value 追加到 key 对应的值后面。
示例代码:
// www.javascriptcn.com code example
// 设置 key 为 foo 的值为 bar
redisClient.set('foo', 'bar', function(err, result) {
console.log(result); // OK
});
// 获取 key 为 foo 的值
redisClient.get('foo', function(err, result) {
console.log(result); // bar
});
// 将 key 为 count 的值加 1
redisClient.incr('count', function(err, result) {
console.log(result); // 1
});
// 将 key 为 count 的值减 1
redisClient.decr('count', function(err, result) {
console.log(result); // 0
});
// 将 hello 追加到 key 为 world 的值后面
redisClient.append('world', 'hello', function(err, result) {
console.log(result); // 10
});哈希类型
哈希类型是 Redis 中用于存储对象的数据类型,常用命令包括:
- HSET key field value:设置 key 对应哈希中 field 对应的值为 value。
- HGET key field:获取 key 对应哈希中 field 对应的值。
- HMSET key field1 value1 field2 value2 ...:同时设置多个 field 对应的值。
- HGETALL key:获取 key 对应哈希中所有 field 和对应的值。
示例代码:
// www.javascriptcn.com code example
// 设置 key 为 user:1 的哈希中 name 对应的值为 Alice
redisClient.hset('user:1', 'name', 'Alice', function(err, result) {
console.log(result); // 1
});
// 获取 key 为 user:1 的哈希中 name 对应的值
redisClient.hget('user:1', 'name', function(err, result) {
console.log(result); // Alice
});
// 同时设置 key 为 user:1 的哈希中 name 和 age 对应的值
redisClient.hmset('user:1', 'name', 'Alice', 'age', '18', function(err, result) {
console.log(result); // OK
});
// 获取 key 为 user:1 的哈希中所有 field 和对应的值
redisClient.hgetall('user:1', function(err, result) {
console.log(result); // { name: 'Alice', age: '18' }
});列表类型
列表类型是 Redis 中用于存储有序列表的数据类型,常用命令包括:
- LPUSH key value1 value2 ...:将 value1、value2 等值从左边插入 key 对应的列表中。
- RPUSH key value1 value2 ...:将 value1、value2 等值从右边插入 key 对应的列表中。
- LLEN key:获取 key 对应列表的长度。
- LRANGE key start stop:获取 key 对应列表中索引从 start 到 stop 的值。
示例代码:
// www.javascriptcn.com code example
// 将 a、b、c 从左边插入 key 为 list 的列表中
redisClient.lpush('list', 'a', 'b', 'c', function(err, result) {
console.log(result); // 3
});
// 将 d、e、f 从右边插入 key 为 list 的列表中
redisClient.rpush('list', 'd', 'e', 'f', function(err, result) {
console.log(result); // 6
});
// 获取 key 为 list 的列表的长度
redisClient.llen('list', function(err, result) {
console.log(result); // 6
});
// 获取 key 为 list 的列表中索引从 2 到 4 的值
redisClient.lrange('list', 2, 4, function(err, result) {
console.log(result); // [ 'c', 'd', 'e' ]
});集合类型
集合类型是 Redis 中用于存储无序集合的数据类型,常用命令包括:
- SADD key member1 member2 ...:将 member1、member2 等成员加入 key 对应的集合中。
- SMEMBERS key:获取 key 对应集合中所有成员。
- SISMEMBER key member:判断 member 是否是 key 对应集合的成员。
- SREM key member1 member2 ...:将 member1、member2 等成员从 key 对应的集合中移除。
示例代码:
// www.javascriptcn.com code example
// 将 a、b、c 加入 key 为 set 的集合中
redisClient.sadd('set', 'a', 'b', 'c', function(err, result) {
console.log(result); // 3
});
// 获取 key 为 set 的集合中所有成员
redisClient.smembers('set', function(err, result) {
console.log(result); // [ 'a', 'b', 'c' ]
});
// 判断 d 是否是 key 为 set 的集合的成员
redisClient.sismember('set', 'd', function(err, result) {
console.log(result); // 0
});
// 将 b、c 从 key 为 set 的集合中移除
redisClient.srem('set', 'b', 'c', function(err, result) {
console.log(result); // 2
});有序集合类型
有序集合类型是 Redis 中用于存储有序集合的数据类型,常用命令包括:
- ZADD key score1 member1 score2 member2 ...:将 member1、member2 等成员及其分数加入 key 对应的有序集合中。
- ZRANGE key start stop [WITHSCORES]:获取 key 对应有序集合中分数从小到大排序的索引从 start 到 stop 的成员。
- ZREVRANGE key start stop [WITHSCORES]:获取 key 对应有序集合中分数从大到小排序的索引从 start 到 stop 的成员。
- ZRANK key member:获取 key 对应有序集合中 member 的排名。
- ZSCORE key member:获取 key 对应有序集合中 member 的分数。
示例代码:
// www.javascriptcn.com code example
// 将 Alice 的分数为 90、Bob 的分数为 80、Charlie 的分数为 70 加入 key 为 scores 的有序集合中
redisClient.zadd('scores', 90, 'Alice', 80, 'Bob', 70, 'Charlie', function(err, result) {
console.log(result); // 3
});
// 获取 key 为 scores 的有序集合中分数从小到大排序的索引从 0 到 1 的成员
redisClient.zrange('scores', 0, 1, function(err, result) {
console.log(result); // [ 'Charlie', 'Bob' ]
});
// 获取 key 为 scores 的有序集合中分数从大到小排序的索引从 0 到 1 的成员
redisClient.zrevrange('scores', 0, 1, function(err, result) {
console.log(result); // [ 'Alice', 'Bob' ]
});
// 获取 key 为 scores 的有序集合中 Alice 的排名
redisClient.zrank('scores', 'Alice', function(err, result) {
console.log(result); // 2
});
// 获取 key 为 scores 的有序集合中 Charlie 的分数
redisClient.zscore('scores', 'Charlie', function(err, result) {
console.log(result); // 70
});Redis 使用技巧
使用连接池
Redis 的连接是有限的资源,使用连接池可以提高连接的复用率和性能。可以使用第三方库如 redis-pool 来实现连接池。
示例代码:
// www.javascriptcn.com code example
const RedisPool = require('redis-pool');
const pool = RedisPool.create({
host: 'localhost',
port: 6379,
max: 10, // 最大连接数
idleTimeoutMillis: 30000, // 连接空闲超时时间
});
pool.acquire().then(redisClient => {
redisClient.get('foo', function(err, result) {
console.log(result);
pool.release(redisClient);
});
});使用 Lua 脚本
Redis 支持使用 Lua 脚本执行多个命令,可以提高性能和可维护性。使用 redis.call 函数可以调用 Redis 命令,使用 KEYS、ARGV 可以获取参数。
示例代码:
local key = KEYS[1]
local value = ARGV[1]
redis.call('set', key, value)
return redis.call('get', key)redisClient.eval("local key = KEYS[1] local value = ARGV[1] redis.call('set', key, value) return redis.call('get', key)", 1, 'foo', 'bar', function(err, result) {
console.log(result); // bar
});使用过期时间
Redis 支持设置键的过期时间,可以用于缓存、限流等场景。可以使用 EXPIRE、TTL 命令来设置和获取过期时间。
示例代码:
// www.javascriptcn.com code example
// 设置 key 为 foo 的过期时间为 60 秒
redisClient.expire('foo', 60, function(err, result) {
console.log(result); // 1
});
// 获取 key 为 foo 的剩余过期时间
redisClient.ttl('foo', function(err, result) {
console.log(result); // 58
});结语
本文介绍了 Redis 的常用命令及使用技巧,希望对前端开发者有所帮助。Redis 还有很多其他功能和命令,欢迎大家深入了解和使用。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d14289a941bf71342aac1e