一、引言

Redis 是一个基于内存的高性能键值数据库,支持多种数据结构,常用于缓存、消息队列和实时数据处理。

二、安装

https://github.com/tporadowski/redis/releases

三、数据类型

3.1 string(字符串)

(1)根据键获取值

不存在则返回nil

1
get <key>

(2)根据多个键获取多个值

1
get <key> <key> <key>

(3)设置键值

1
set <key> <value>

(4)设置多个键值

1
set <key> <value> <key> <value> <key> <value>

(5)判断键值是否存在

1
setnx <key> <value>

用处:

  • 分布式锁

    操作 redis 之前先用 setnx 检查 flag,返回为1,则可以操作。操作结束后删除 flag。

(6)设置键值过期时间

1
set <key> <second> <value>

(7)删除键值

1
del <key>

(8)字符串拼接值

1
append <key> <value>

(9)自增自减

1
2
3
4
5
6
7
8
9
10
11
12
13
set count 0

incr count
get count # 1

decr count
get count # 0

incrby count 10
get count # 10

decrby count 10
get count # 0

(10)字符串长度

1
strlen <key>

(11)比特流操作

1
2
3
setbit <key> <offset> <value>	# 设置比特中某个偏移的值
getbit <key> <offset> # 查看比特中某个偏移的值
bitcount <key> # 比特中设为1的数量

3.2 key 操作

(1)查找键

参数支持简单的正则表达式

1
keys <pattern>

(2)判断键是否存在

存在返回1,不存在返回0

1
exists <key>

(3)查看值的数据类型

1
type key

(4)删除键

1
del <key> <key> <key> ...

(5)查看键的有效期

返回结果是秒为单位的整数

-1 表示永不过期,

-2 表示当前数据已经过期,查看一个不存在的数据的有效期就是 -2

1
ttl key

(6)设置 key 有效期

给已有的数据重新设置有效期,有效期到了,数据就会被删除

1
expire <key> <seconds>

(7)清空所有 key

1
flushall

(8)key 重命名

1
rename <oldkey> <newkey>

(9)select 切换数据库

redis 的配置文件中,默认有0-15之间的16个数据库,默认操作的就是0号数据库

1
select <数据库ID>

3.3 list 数组

注意:list 的子成员类型为 string

(1)添加子成员

1
2
3
4
5
6
7
# 在左边添加
lpush <key> <value> <value> <value>
# 在右边添加
rpush <key> <value> <value> <value>
# 在指定元素的左边/右边插入一个数据
linsert key before <指定元素> <value>
linsert key after <指定元素> <value>

(2)获取列表成员

根据指定的索引(下标)获取成员的值,负数下标从右边-1开始,逐个递减

1
lindex <key> <index>

(3)获取列表切片

闭区间包括 stop

1
lrange <key> <start> <stop>

(4)获取列表长度

1
llen <key>

(5)按索引设置值

1
lset <key> <index> <value>

(6)删除指定成员

1
2
lpop <key>	# 第一个成员出列, 并返回它
rpop <key> # 最后一个成员出列, 并返回它
1
2
3
4
# count = 0 表示删除列表所有值为 value 成员
# count > 0 表示删除列表左侧开始的前 count 个 value 成员
# count < 0 表示删除列表右侧开始的前 count 个 value 成员
lrem <key> <count> <value>

3.4 hash(哈希)

1
2
3
4
5
key:{
field1:value1
field2:value2
field3:value3
}

(1)设置指定键的属性/域

设置指定键的的单个属性

1
hset <key> <field> <value> <field> <value> <field> <value> ...

(2)获取指定键的域/属性的值

1
hget <key> <field> <value>

(3)获取指定键的所有键/值

1
2
hkeys <key>
hvals <key>

(4)获取哈希的所有域值对

1
hgetall <key>

(5)删除指定键的域/属性

1
hdel <key> <field> <field> <field> ...

(6)判断指定属性/域是否存在于当前键对应的hash中

1
hexists <key> <field>

(7)属性值自增自减

1
2
hincrby <key> <field>
hdecrby <key> <field>

3.5 set(集合)

去重、无序

(1)添加元素

1
sadd <key> <member> <member> <member> ...

(2)获取集合所有的成员

1
smembers <key>

(3)获取集合的长度

1
scard <key>

(4)随机抽取一个或多个元素

1
spop <key> [count=1]

(5)删除指定元素

1
srem <key> <value>

(6)交集、差集和并集

1
2
3
4
5
6
# 交集
sinter <key> <key>
# 差集
sdiff <key> <key>
# 并集
sunion <key> <key>

3.6 zset(有序集合)

有序集合(score/value)去重并且根据 score 权重值来进行排序的。score 从小到大排列。

(1)添加成员

1
zadd <key> <score> <member> <score> <member> <score> <member> ...

(2)获取 score 在指定区间的所有成员

1
2
3
4
5
6
7
8
# 按 score 进行从低往高排序获取指定 score 区间
zrangebyscore <key> <min_score> <max_score>
# 按 score 进行从高往低排序获取指定 score 区间
zrevrangebyscore <key> <min_score> <max_score>
# 按 score 进行从低往高排序获取指定索引区间, 0 -1 表示从低到高全部成员
zrange <key> <start_idx> <stop_idx>
# 按 scoer 进行从高往低排序获取指定索引区间
zrevrange <key> <start_idx> <stop_idx>

(3)获取集合长度

1
zcard <key>

(4)获取指定成员的权重值

1
zscore <key> <member>

(5)获取指定成员在集合中的排名

1
2
3
4
# 从低到高排
zrank <key> <member>
# 从高到低排
zrevrank <key> <member>

(6)获取 score 在指定区间的所有成员的数量

1
zcount <key> <min> <max>

(7)给指定成员增加权重值

1
zincrby <key> <score> <member>

(8)删除成员

1
zrem <key> <member> <member> <member> ...

(9)删除指定数量的成员

1
2
3
4
# 删除指定数量的成员,从最低 score 开始删除
zpopmin <key> [count]
# 删除指定数量的成员,从最高 score 开始删除
zpopmax <key> [count]