Steve's Blog

Talk is cheap, show me the code.

0%

Redis数据类型

1. 什么是Redis

Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings)散列(hashes)列表(lists)集合(sets)有序集合(sorted sets) 与范围查询, bitmapshyperloglogs地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication)LUA脚本(Lua scripting)LRU驱动事件(LRU eviction)事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。

2. Redis数据类型

z. key的一些操作

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
# 设置键值
set key val
# 获取键对应的值
get key
# 删除键值对
del key
# 设置key的超时时间,单位是秒
expire key seconds
# 查看键对应的超时时间,返回单位是秒
ttl key
# 设置key的超时时间,单位是毫秒
pexpire key milliseconds
# 查看键对应的超时时间,返回单位是毫秒
pttl key
# 判断key是否存在
exists key
# 获取所有key
keys *
# 获取满足特定模式的key
keys pattern
# 换DB, Redis有16个Database,下标为0-15,默认处于第0个
select index
# 将key移动到指定DB
move key index
# 获取value的类型
type key

a. String

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
# 设置键值
SET key val
# 获取键对应的值
GET key
# 获取key对应的旧值,设置key的新值,如果旧值不存在,会返回nil
GETSET key val

# 获取key指定偏移量上的位(bit)
GETBIT key offset
# 设置key指定偏移量上的位(bit)
SETBIT key offset val

# 设置key-val,并且设置其过期时间(单位为秒)
SETEX key seconds val
# 设置key-val,只有key不存在时才能设置成功
SETNX key val
# 设置key-val,并且设置其过期时间(单位为毫秒)
PSETEX key milliseconds val

# 获取多个key对应的值
MGET key1 [key2] ...
# 设置多个key-val对
MSET key1 val1 [key2 val2]...
# 设置多个key-val,仅在所有被设置的key都不存在时设置成功,只要里面有一个key存在,返回0表示设置失败,设置成功时返回1
MSETNX key1 val1 [key2 val2]...

# 获取范围内的字符串(和Java不同,字符串的截取范围既包括startIndex,也包括endIndex)
GETRANGE key startIndex endIndex
# 使用val覆盖从偏移量offset开始的字符
SETRANGE key offset val
# 在key后追加val的值,如果key不存在,会设置key-val,此时APPEND命令相当于SET
APPEND key val
# 获取key对应的字符串长度,key不存在时返回0
STRLEN key

# INCR 命令将 key 中储存的数字值增一,如果key不存在,按照初始值为0处理;如果key对应的值不是数字,会返回一个错误;
# 本操作的值限制在64bit内;INCR命令放在字符串中的原因是int值在Redis中以字符串的形式保存
INCR key
# 将key中存储的的数字加一个指定的数字increment
INCRBY key increment
# 将key中存储的数字值减一,和INCR功能类似
DECR key
# 将key中存储的的数字减一个指定的数字decrement
DECRBY key decrement

b. List

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
# 移出并获取列表的第一个元素
LPOP key
# 将一个或多个值插入到列表头部
LPUSH key value1 [value2]
# 将一个值插入到已存在的列表头部
LPUSHX key value
# 移除列表的最后一个元素,返回值为移除的元素
RPOP key
# 在列表中添加一个或多个值
RPUSH key value1 [value2]
# 为已存在的列表添加值
RPUSHX key value

# 通过索引获取列表中的元素
LINDEX key index
# 通过索引设置列表元素的值
LSET key index value
# 获取列表长度
LLEN key
# 获取列表指定范围内的元素
LRANGE key start stop
# 移除列表元素
LREM key count value
# 通过索引获取列表中的元素
LINDEX key index
# 在列表的元素前或者后插入元素
LINSERT key BEFORE|AFTER pivot value

# 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除
LTRIM key start stop
# 移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
BLPOP key1 [key2 ] timeout
# 移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
BRPOP key1 [key2 ] timeout

c. Hash

Hash采用的数据结构是哈希表,每个hash中最多可以存2^31-1个键值对,约40多亿个

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 将哈希表 key 中的字段 field 的值设为 value 
HSET key field val
# 获取存储在哈希表中指定字段的值
HGET key field

# 删除一个或多个哈希表字段
HDEL key field1 [field2]
# 查看哈希表 key 中,指定的字段是否存在

HEXISTS key field
# 获取所有哈希表中的字段
HKEYS key
# 获取哈希表中所有值
HVALS key
# 获取哈希表中字段的数量
HLEN key

# 获取在哈希表中指定 key 的所有字段和值
HGETALL key
# 同时将多个 field-value (域-值)对设置到哈希表 key 中
HMSET key field1 val1 [field2, val2]...
# 获取所有给定字段的值
HMGET key field1 [field2]...

d. Set

e. ZSet

参考资料

[1] redis中文官方网站

[2]