Skip to content

redis技术

📖 redis是什么?

redis是一种内存数据库,数据保存在内存中,读写速度非常快,常用于高频请求等场景。

  • 比如用户信息、用户权限、等等。

安装:

shell
npm install redis

📖 redis使用

js
const redis = require('redis');
const client = redis.createClient();
// 错误监听
client.on('error', (err) => {
  console.log('Error ' + err);
});

// 连接并测试(排队)
async function connectTest() {
    await client.connect(); // 连接到 Redis
    await client.set('hello', 'world'); // 设置键值对
    const value = await client.get('hello'); // 获取值
    console.log('获取到的值:', value); // 输出: world
    await client.quit();  // 断开连接
}

connectTest();

📖 redis数据类型

  • String(字符串)
  • Hash(哈希)
  • List(列表)
  • Set(集合)
  • ZSet(有序集合)

String(字符串)

js
await client.set('key', 'value'); // 设置键值对
const value = await client.get('key'); // 获取值
await client.del('key'); // 删除键
await client.set('age', '20', { EX: 60 }); // 60秒后过期

await client.incr('age'); // 自增
await client.decr('age'); // 自减
await client.incrBy('page:views', 10); // 自增10
await client.decrBy('page:views', 10); // 自减10

Hash(哈希)用于存储对象,如用户信息。

js
// 设置单个哈希字段值
await client.hSet('username', 'name', 'value'); 
await client.hSet('username', 'email', 'john@example.com');

// 或者一次性设置多个
await client.hSet('username', {
  name: 'Jane',
  email: 'jane@example.com',
  age: '25'
});

const userName = await client.hGet('user:1000', 'name'); // 获取单个字段值
const user = await client.hGetAll('user:1000'); // 获取所有字段值
await client.hDel('user:1000', 'name', 'email', 'age'); // 删除多个字段

List(列表)用于存储有序的字符串列表。

js
// 从左边或右边推入元素
await client.lPush('tasks', 'task1'); // ['task1']
await client.rPush('tasks', 'task2'); // ['task1', 'task2']
await client.lPush('tasks', 'task0'); // ['task0', 'task1', 'task2']

const tasks = await client.lRange('tasks', 0, -1); // 获取所有元素
console.log(tasks); // ['task0', 'task1', 'task2']

const firstTask = await client.lIndex('tasks', 0);
console.log(firstTask); // 'task0'

Set(集合)无序的、唯一的字符串集合,用于存储不重复的数据。

js
// CREATE - 添加成员
await client.sAdd('tags', 'javascript');
await client.sAdd('tags', 'nodejs');
await client.sAdd('tags', 'redis');
await client.sAdd('tags', 'nodejs'); // 这个不会被添加,因为重复了

// READ - 获取所有成员
const allTags = await client.sMembers('tags');
console.log(allTags); // ['javascript', 'nodejs', 'redis'] (顺序不确定)

// 检查成员是否存在
const exists = await client.sIsMember('tags', 'nodejs');
console.log(exists); // true

// DELETE - 移除成员
await client.sRem('tags', 'javascript');