Redis的5种数据类型
redis是一种高级的key-value的存储系统,键是string类型,其中value支持五种数据类型,对于键和值的描述如下所示:
键(key):
【1】key值不能重复
【2】作用:标识存储的数据
【3】数据类型:string
值(value):支持5种数据类型
值的数据类型 | 值的格式说明 |
---|---|
string | 字符串类型,类似于Java中String |
hash | 由键值对组成,类似于Java中Map |
list | 列表类型,类似于Java中List,元素是有序,可以重复。 |
set | 集合类型,类似于Java中Set,元素是无序,不可重复 |
sorted set/zset | 有序的集合类型,每个元素有一个分数用来决定它的顺序。 |
string类型
字符串类型是Redis中最为基础的数据存储类型,它在Redis中以二进制保存。无论存入的是字符串、整数、浮点类型都会以字符串写入。
在Redis中字符串类型的值最多可以容纳的数据长度是512M,这是以后最常用的数据类型。
string 类型数据的基本操作
命令 | 功能 |
---|---|
set 键 值 | 添加或修改一个键和值,键不存在就是添加,存在就是修改 |
get 键 | 获取值,如果存在就返回值,不存在返回nil(就是C语言中NULL) |
del 键 | 删除指定的键和值,返回删除的个数 |
mset key1 value1 [key2 value2 …] | 同时设置多个key的值 |
mget key1 [key2 …] | 同时获取多个key的值 |
strlen key | 获取字符串长度 |
append key value | 如果原始信息存在就追加,否则新建 |
incr key | 递增数字,仅仅对数字类型的键有用,相当于Java的i++运算 |
incrby key increment | key自增increment指定整数,increment可为负数,表示减少。 |
incrbyfloat key increment | 增加指定浮点数,仅仅对数字类型的键有用 |
decr key | 递减数字,仅仅对数字类型的键有用,相当于Java的i–- |
decrby key increment | key自减decrement,decrement可以为正数,表示增加。 |
hash
Redis中的Hash类型可以看成是键和值都是String类型的Map容器,每一个Hash可以存储4G个键值对。
hash 类型数据的基本操作
命令 | 功能 |
---|---|
hset 键 字段 值 | 添加键,字段,值 |
hget 键 字段 | 通过键,字段得到值 |
hmset 键 字段 值 字段 值 | multiply多个,一次添加多个字段和值 |
hmget 键 字段 字段 | 通过键,获取多个字段和值 |
hdel 键 字段 字段 | 删除一个或多个字段的值 |
hgetall 键 | 得到这个键下所有的字段和值 |
hlen key | 获取哈希表中字段数量 |
hexists key field | 判断字段是否存在 |
hkeys key | 获取所有字段名 |
hvals key | 获取所有字段值 |
hincrby key field increment | 设置指定字段的数值数据增加指定的整数值 |
hincrbyfloat key field increment | 设置指定字段的数值数据增加指定的浮点数值 |
hsetnx key field value | 当字段不存在时赋值 |
list
List类型是按照插入顺序排序的字符串链表。和数据结构中的普通链表一样,我们可以在其左部(left)和右部(right)添加新的元素。在插入时,如果该键并不存在,Redis将为该键创建一个新的链表。与此相反,如果链表中所有的元素均被移除,那么该键也将会被从数据库中删除。List中可以包含的最大元素数量是4G个。
list 类型数据基本操作
命令 | 行为 |
---|---|
lpush 键 元素 元素… | left 从左边向指定的键中添加1个或多个元素,返回列表中元素的个数 |
rpush 键 元素 元素… | right 从右边向指定的键中添加1个或多个元素 |
lpop 键 | 从左边删除一个元素,返回被删除的元素 |
rpop 键 | 从右边删除一个元素,返回被删除的元素 |
lrange 键 开始 结束 | 得到键中指定范围的元素的数据 每个元素都有一个索引号,从左向右0~n 从右向左索引号:-1~-(n+1),每个元素有2个索引号 如果要取出整个列表中所有的元素,索引号应该是:0~-1 |
lindex 键 索引值 | 查询指定索引的元素 |
llen 键 | 获取列表的长度 |
ltrim key start end | 截取名称为key的list |
lset key index value | 给名称为key的list中index位置的元素赋值 |
lrem key count value | 删除count个名称为key的list中值为value的元素 |
rpoplpush srckey dstkey | 返回并删除名称为srckey的list的尾元素,并将该元素添加到名称为dstkey的list的头部 |
blpop key1 [key2] timeout | 规定时间从左边内获取并移除数据 |
brpop key1 [key2] timeout | 规定时间从右边内获取并移除数据 |
brpoplpush source destination timeout | 规定时间从返回并删除名称为source的list的尾元素,并将该元素添加到名称为destination 的list的头部 |
set
Set类型看作为没有排序的字符集合,和List类型一样,我们也可以在该类型的数据值上执行添加、删除或判断某一元素是否存在等操作。Set可包含的最大元素数量是4G,和List类型不同的是,Set集合中不允许出现重复的元素。
set 类型数据的基本操作
命令 | 行为 |
---|---|
sadd 键 元素 元素… | 向一个键中添加1个或多个元素 |
smembers 键 | 得到这个集合中所有的元素 |
sismember 键 元素 | 判断指定的元素在集合中是否存在,存在返回1,不存在返回0 |
scard 键 | 获取集合数据总量 |
srem 键 元素 元素… | 通过键删除一个或多个元素 |
spop key | 随机返回并删除名称为key的set中一个元素 |
srandmember key | 随机返回名称为key的set的一个元素 |
sinter key1 key2 …key | 求交集 |
sunion key1 keys | 求并集 |
sdiff key1 keys | 求差集 |
sinterstore dstkey keys | 求交集并将交集保存到dstkey的集合 |
sunionstore dstkey keys | 求并集并将并集保存到dstkey的集合 |
sdiffstore dstkey keys | 求差集并将差集保存到dstkey的集合 |
smove srckey dstkey member | 将指定数据从原始集合移动到目标集合中 |
sorted_set(zset)
Redis 有序集合和set集合一样也是无序不可以重复。不同的是每个元素都会关联一个分数(排序因子)。
redis正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复,每个集合可存储40多亿个成员。
sorted_set 类型数据的基本操作
命令 | 行为 |
---|---|
zadd key score1 value1 [score2 value2] | 添加1个或多个元素,每个元素都有一个分数 |
zrange key start stop | 获取指定范围的元素,得到所有的元素,索引是0到-1 |
zrange key start stop [WITHSCORE] | 查询指定的元素和对应的分数 |
zrevrange key start stop withscores | 按照分数倒叙获取指定的元素和对应的分数 |
zremkey value1 [value2 …] | 删除一个或多个值 |
zcount key min max | 获取指定分数范围内的元素个数 |
zcard key | 得到元素个数 |
zrank key value | 获取正序排序的元素的排名 |
zrevrank key value | 获取逆序排序的元素的排名 |
zscore key value | 得到元素的分数 |
zincrby key increment member | 增加某个元素的分数 |
zrangebysroce key min max | 获取指定分数范围内的元素 |
zrevrangebysroce key min max | 倒序排序获取排名在某个范围的元素 |
zremrangebyrank key start stop | 按照排名范围删除元素 |
zremrangebysroce key min max | 按照分数范围删除元素,min和max的用法和4中的一样 |
Redis 通用指令
命令 | 功能 |
---|---|
exists key | 确认一个key是否存在 |
type key | 返回值的类型 |
keys pattern | 返回满足给定pattern的所有key,pattern的查询规则见下图 |
random key | 随机返回key空间的一个 |
key rename oldname newname | 重命名key |
setex key seconds value | 为不存在的key赋值并设置一个过期时间,单位(秒) |
psetex key millisseconds value | 为不存在的key赋值并设置一个过期时间,单位(毫秒) |
expire key seconds | 为已存在的key设置一个过期时间,单位(秒) |
pexpire key millisseconds | 为已存在的key设置一个过期时间,单位(毫秒) |
expireat key timestamp | 为已存在的key以时间戳的方式设置过期时间,单位(秒) |
pexpire key millisseconds-timestamp | 为已有的key以时间戳的方式设置过期时间,单位(毫秒) |
ttl key | 获取key的有效时间(秒) |
pttl key | 获取key的有效时间(毫秒) |
db size | 返回当前数据库中key的数目 |
select index | 选择第0~15中的库 |
move key dbindex | 移动当前数据库中的key到dbindex数据库 |
sort | 为所有的key排序 |
flushdb | 清除当前数据库的所有keys |
flushall | 清除所有数据库的所有keys |
key pattern的匹配规则