Redis初识

2-2通用命令

1
2
3
4
5
6
7
8
keys * #遍历所有key
del key [key…] #删除指定的key-value
dbsizee 算出key的总数
expire key seconds #key在sc秒后过期
ttl key #查看key剩余的过期时间(-1 代表没有过期时间 -2代表已过期)
persist key #去掉key的过期时间
exists key #检查一个key是否存在
type key #返回key的类型,结果为string hash list set zset none(key不存在)

image

2-3 数据结构和内部编码

1648653844115-f9099d9c-0908-4971-a374-08e3d655e908

image

2-4 单线程

image.png
image.png

单线程为什么还这么快?

  • 纯内存
  • 非阻塞IO
  • 避免线程切换和竞态消耗

其它注意点

  • 一次只运行一条命令
  • 拒绝长(慢)命令
1
keys,flushall,flushdb,slow lua script,mutil/exec,operate big value(collection)
  • 其实不是全是单线程,如下面的命令 fysnc file descriptor , close file descriptor

2-5 字符串

场景: 缓存, 计数器,分布式锁

特点

key都为字符串 value可为 字符串(json) 整数 二进制

API

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
注:以下命令 时间复杂度均为 o(1)


get key
#获取key对应的value

set key value
#设置key-value

del key
#删除key-value

incr key
#key自增1,如果key不存在,自增后get(key)=1

decr key o(1)
#key自减1,如果key不存在,自减后get(key)=-1

incrby key k
#Key自增k,如果key不存在自增后get(key)=k

decr key k
#Key自减k,如果key不存在,自减后get(key)=-k

set key value
#不管key是否存在,都设置

setnx key value
#key不存在,才设置

set key value xx
#key存在,才设置

1
2
3
4
5
6
7
注:以下命令 时间复杂度均为 o(n)

mget keyl key2 key3...
#批量获取key,原子操作

mset key1 valuel key2 value2 key3 value3
#批量设置key-value
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
注:以下命令 时间复杂度均为 o(1)

getset key newvalue
#set key newvalue并返回旧的value

append key value
#将value追加到旧的value(相当于字符串拼接)

strlen key
#返回字符串的长度(注意中文)

incrbyfloat key 3.5
#增加key对应的值3.5

getrange key start end
#获取字符串指定下标所有的值

setrange key index value
#设置指定下标所有对应的值

2.5 hash

特点
key还是String类型 ,值则分成 field和value,可以添加field来对属性进行扩充
redis本身就是一个map结构的,所以可以把这种数据结构理解成 “mapmap”,其中 field就像key一样不能相同 。

image

API所有命令都是以h开头

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
命令 时间复杂度均为 o(1)

hget key field
#获取hash key对应的field的value

hset key field value
#设置hash key对应field的value

hdel key field
#删除hash key对应field的value

hexists key field
#判断hash key是否有field

hlen key
#获取hash key field的数量

hsetnx key field value
#设置hash key对应field的value(如field已经存在,则失败)

hincrby key field intCounter
#hash key对应的field的value自增intCounter

hincrbyfloat key field floatCounter
#hincrby浮点数版
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
命令 时间复杂度均为 o(n)

hmget key field1 field2....fieldN
#批量获取hash key的一批field对应的值

hmset key fieldI valuel field2 value2..fieldN valueN
#批量设置hash key的一批field value

hgetall key
#返回hash key对应所有的field和value

hvals key
#返回hash key对应所有field的value

hkeys key
#返回hash key对应所有field

image
image


Redis初识
http://yoursite.com/2022/03/31/数据库/Redis/Redis从入门到高可用/第2章 API的理解和使用/
作者
mohuani
发布于
2022年3月31日
许可协议