xb18
xb18
文章78
标签0
分类0
redis使用

redis使用

命令行查询

1
2
3
4
5
6
7
8
redis-cli -p 6383 # 默认是6379
redis-cli # 默认端口连接

HGETALl 'dict:wb:cur:boardlist'

# 命名
# 存储数据 dict:wb:cur:boardlist
# 发布消息 msg:wb:cur:boardlist:change

常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
# set
HSET myhash field1 "Hello"
SET key 'val' # 默认不过期
# get
GET key
HGETALL myhash
HGET myhash field1
# del
HDEL myhash field1

SET mykey "Hello"
GET mykey
DEL key1 key2 key3

发布订阅

1
2
3
4
5
SUBSCRIBE channel_name
PUBLISH channel_name message
UNSUBSCRIBE [channel_name] # 退订一个或多个频道。如果不指定频道名称,则退订所有频道
PUBSUB CHANNELS # 查看所有可订阅的频道
PUBSUB NUMSUB notify.test # 查看有几个订阅者

HINCRBY

1
HINCRBY key field increment

参数说明:

  • key:哈希表的名称。
  • field:要进行递增操作的字段。字段不存在会默认设置为0
  • increment:递增的增量值,可以是正数(加)也可以是负数(减)。

要获取 HINCRBY 命令增加后的值,可以使用 HGET 命令或者 HGETALL 命令来获取哈希表中指定字段的值。

返回值是字符串类型

SCAN

1
2
3
4
5
SCAN 0               # 扫描整个键空间,初始位置为0
SCAN 10 # 使用下一个扫描起始位置为10的结果
SCAN 0 MATCH *abc* # 扫描并匹配模糊模式为*abc*的键
SCAN 0 COUNT 100 # 每次返回100个键的扫描结果
SCAN cursor [MATCH pattern] [COUNT count]

DBSIZE

要统计Redis中键的数量,可以使用DBSIZE命令。该命令返回当前Redis数据库中的键的总数;

需要注意的是,DBSIZE命令的执行是一个O(1)复杂度的操作,因此可以在很短的时间内获取到键的数量,而不会随着键数量的增加而影响性能。

INFO memory

执行以上命令后,会返回一个包含多个键值对的信息。其中包括内存使用的各种指标,例如使用的内存总量、键的数量、使用的主要数据结构等。

nodejs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import { createClient } from 'redis'; // @4.x  https://github.com/redis/node-redis

const client = await createClient()
.on('error', err => console.log('Redis Client Error', err))
.connect();

// raw Redis commands
await client.HSET('key', 'field', 'value');
await client.HGETALL('key');

// friendly JavaScript commands
await client.hSet('key', 'field', 'value');
await client.hGetAll('key');

await client.sendCommand(['HGETALL', 'key']); // ['key1', 'field1', 'key2', 'field2']

eggjs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
const { ctx, app } = this;
// set
await app.redis.set('foo', 'bar');
// get
ctx.body = await app.redis.get('foo');


// 多个redis
const { ctx, app } = this;
// set
await app.redis.get('instance1').set('foo', 'bar');
// get
ctx.body = await app.redis.get('instance1').get('foo');


// 配置
config.redis = {
client: {
port: 6379, // Redis port
host: '127.0.0.1', // Redis host
password: 'auth',
db: 0,
keyPrefix: 'web:', // 设置 Redis 键的默认前缀为 "web:"
},
}
// 多个redis
config.redis = {
clients: {
foo: { // instanceName. See below
port: 6379, // Redis port
host: '127.0.0.1', // Redis host
password: 'auth',
db: 0,
},
bar: {
port: 6379,
host: '127.0.0.1',
password: 'auth',
db: 1,
},
}
}

// redis password
$vim /etc/redis/redis.conf
requirepass xxxxxxxxxx // xxxxxxxxxx is your password

redis和mysql

Redis可以提供数据持久化的功能,包括两种持久化方式:

  1. 快照持久化(RDB):Redis可以将当前数据库状态保存到磁盘上的二进制文件。这个文件可以在Redis重启时用于恢复数据。
  2. 追加日志持久化(AOF):Redis可以将所有写操作以追加的方式写入日志文件。这个日志文件可以在Redis重启时重放,以重建数据库状态。

虽然Redis提供了持久化功能,但是MySQL仍然有其独特的优势和适用场景,因此在某些情况下,使用Redis和MySQL的组合可以带来更好的效果:

  1. 事务和ACID支持:Redis虽然提供了简单的事务支持,但是在复杂事务场景下可能不如MySQL灵活。MySQL是一种关系型数据库,支持事务和ACID特性,对于需要保证数据一致性和事务处理的应用场景,MySQL可能是更好的选择。
  2. 数据一致性的长期保证:Redis持久化可以恢复数据,但是对于在持久化过程中发生故障的情况,可能会导致部分数据丢失。而MySQL以其稳定的持久化能力,能够更好地确保数据的一致性和可靠性。
  3. 复杂查询和分析:MySQL作为关系型数据库,提供了更丰富的查询和分析功能,例如支持复杂的SQL语句、聚合查询、连接操作等。对于需要进行复杂查询和数据分析的场景,使用MySQL可能更加适合。

总之,Redis对于高性能的缓存和部分持久化需求来说非常适用,但在一些其他方面(如事务支持和复杂查询)可能相对有限。因此,在一些需要更准确数据一致性、复杂查询和更多灵活性的场景中,使用Redis和MySQL的组合可以发挥各自的优势,满足不同的需求。

本文作者:xb18
本文链接:https://moelj.com/2023/10/17/redis/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可