redis 数据类型
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
补
bitmaps :位图
hyperloglog : 超小内存唯一值计数
geo : 地理信息定位
string
string类型是Redis最基本的数据类型,二进制安全的。redis的string可以包含任何数据,比如jpg图片或者序列化的对象,一个键最大能存储512MB1
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# SET 设置键值 GET 获取键值
redis 127.0.0.1:6379> SET name "weilai"
OK
redis 127.0.0.1:6379> GET name
"weilai"
127.0.0.1:6379> strlen name
(integer) 6
127.0.0.1:6379> getset name newvalue
"weilai"
127.0.0.1:6379> get name
"newvalue"
127.0.0.1:6379> getrange name 1 3
"ewv"
127.0.0.1:6379> SETRANGE name 1 a
(integer) 8
127.0.0.1:6379> get name
"nawvalue"
127.0.0.1:6379> setnx name 1 -- key存在时,不创建
(integer) 0
127.0.0.1:6379> set name newname xx -- key存在时,才更新
OK
127.0.0.1:6379> get name
"newname"
127.0.0.1:6379> set name1 newname1 xx -- key不存在时,不更新
(nil)
127.0.0.1:6379> get name1
(nil)
127.0.0.1:6379> get name
"nawvalue"
mset 和 mget 设置(得到) 多个key的值1
2
3
4
5
6
7127.0.0.1:6379> mset date "2019.08.30" time "11:00 a.m." weather "sunny"
OK
127.0.0.1:6379> mget date time name weather
1) "2019.08.30"
2) "11:00 a.m."
3) "weilai"
4) "sunny"
append 添加字符串1
2
3
4127.0.0.1:6379> append name '1995'
(integer) 10
127.0.0.1:6379> GET name
"weilai1995"
del 删除1
2
3
4127.0.0.1:6379> del name
(integer) 1
127.0.0.1:6379> get name
(nil)
incr/decr 增加/减少 11
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16127.0.0.1:6379> decr num
(integer) -1
127.0.0.1:6379> get num
"-1"
127.0.0.1:6379> incr num
(integer) 0
127.0.0.1:6379> get num
"0"
127.0.0.1:6379> incrby num 3
(integer) 3
127.0.0.1:6379> decrby num 2
(integer) 1
127.0.0.1:6379> get num
"1"
127.0.0.1:6379> incrbyfloat num 3.5
"4.5"
Hash
Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。HMSET, HGETALL 命令 user:1 为键值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
43redis 127.0.0.1:6379> hmset user:1 username weilai password handsome
OK
127.0.0.1:6379> hmget user:1 username password
1) "weilai"
2) "handsome"
redis 127.0.0.1:6379> HGETALL user:1
1) "username"
2) "weilai"
3) "password"
4) "handsome"
127.0.0.1:6379> hmget user:1 username password port
1) "weilai"
2) "handsome"
3) "22"
redis 127.0.0.1:6379> hget user:1 username
"weilai"
127.0.0.1:6379> HGET user:1 weilai
(nil)
127.0.0.1:6379> hkeys user:1 # 获取 key
1) "username"
2) "password"
3) "port"
127.0.0.1:6379> hvals user:1 #获取 value
1) "weilai"
2) "handsome"
3) "22"
127.0.0.1:6379> hlen user:1
(integer) 3
127.0.0.1:6379> hexists user:1 password # 是否存在 passw
(integer) 1
127.0.0.1:6379> hexists user:1 passwd
(integer) 0
hdel user:1 password port
(integer) 2
127.0.0.1:6379> hgetall user:1
1) "username"
2) "weilai"
127.0.0.1:6379> hsetnx user:1 username fisher # 存在username 不创建
(integer) 0
127.0.0.1:6379> hgetall user:1
1) "username"
2) "weilai"
# 每个 hash 可以存储 232 - 1 键值对(40多亿)
List
Redis 列表是简单的字符串列表,按照插入顺序排序。可以添加一个元素lpush到列表的头部(左边)或者rpush尾部(右边)lrange 获取指定长度 (从0 开始)
lpushx/rpushx 只能是 key 存在,且仅能添加一个
lpop/rpop 移除最左/右 边 的一个元素
ltrim 截取一段长度
llen 列表元素个数
lrem weilai 0 python 删除所有的’python’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
42redis 127.0.0.1:6379> lpush weilai redis
(integer) 1
redis 127.0.0.1:6379> lpush weilai mongodb
(integer) 2
redis 127.0.0.1:6379> rpush weilai rabitmq
(integer) 3
redis 127.0.0.1:6379> lrange weilai 0 10
1) "mongodb"
2) "redis"
3) "rabitmq""
127.0.0.1:6379> lrange weilai 0 1
1) "mongodb"
2) "redis"
127.0.0.1:6379> llen weilai
(integer) 3
127.0.0.1:6379> lpush weilai python java c++ shell
(integer) 8
127.0.0.1:6379> lrange weilai 0 10
1) "shell"
2) "c++"
3) "java"
4) "python"
5) "mongodb"
6) "redis"
7) "rabitmq"
127.0.0.1:6379> lrem weilai 0 python # 删除所有的python 元素
(integer) 1
127.0.0.1:6379> lrange weilai 0 10
1) "shell"
2) "c++"
3) "java"
4) "mongodb"
5) "redis"
6) "rabitmq"
127.0.0.1:6379> ltrim weilai 2 4
OK
127.0.0.1:6379> lrange weilai 0 10
1) "java"
2) "mongodb"
3) "redis"
# 列表最多可存储 232 - 1 元素 (4294967295, 每个列表可存储40多亿)
Set
Redis的Set是string类型的无序集合。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)
sadd/srem 添加/删除元素sismember 判断是否为set的一个元素smembers 返回该集合的所有成员sdiff 返回一个集合与其它集合的差异sinter 返回几个集合的交集sunion 返回几个集合的并集
1 | 127.0.0.1:6379> sadd zoo cat dog |
zset(sorted set:有序集合)
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
zset的成员是唯一的,但分数(score)却可以重复
1 | redis 127.0.0.1:6379> zadd weilai 0 redis |