redis基本数据类型
1、String
在Redis中,所有的 key 都是字符串(java中操作的key会被序列化,在redis中都是字符串形式)。不同的key对应的value则具备不同的数据结构,所说的五种不同的数据类型,指的是value的数据类型不同。
Redis 中的字符串是动态字符串,内部是可以修改的,像 Java 中的 StringBuffer,它采用分配冗余空间
的方式来减少内存的频繁分配。在 Redis 内部结构中,一般实际分配的内存会大于需要的内存,当字符
串小于 1M 的时候,扩容都是在现有的空间基础上加倍,扩容每次扩 1M 空间,最大 512M。
Redis 字符串常用指令:
命令 | 描述 | 示例 |
---|---|---|
set | 设置key对应的value的值 | set key value |
append | key 已存在,在对应的value后追加值,否则就创建新的键值对 | append key value |
decr | 可以实现对value的减 1 操作(前提是 value 是一个数字),如果value不是数字,会报错,如果value 不存在,则会给一个默认的值为0,在默认值的基础上减1 | decr key |
decrby | 和 decr 类似,但是可以自己设置步长,该命令第二个参数就是步长(increment) | decrby key increment |
get | 获取key对应的value的值 | get key |
getrange | 用来返回key对应的value的子串,类似于java里边的 substring。这个命令第二个和第三个参数就是截取的起始和终止位置,其中,下标从0开始计数,-1 表示最后一个字符串,-2 表示倒数第二个字符串,以此类推... | getrange key start end |
getset | 获取并更新某一个 key, 会先返回key对应的value,然后更新key对应的value为新set的值 | getset key value |
incr | 给某一个 key 的 value 自增 (自增1) | incr key |
incrby | 给某一个 key 的 value 自增,同时还可以设置步长(increment) | incrby key increment |
incrbyfloat | 和 incrby 类似,但是自增的步长可以设置为浮点数 | incrbyfloat key 0.5 |
mget、mset | 批量获取和批量存储 | mget key1 key2 key3 mset key1 value1 key2 value2 |
ttl | 查看 key 的有效期 (-1永不过期) | ttl key |
setex | 在给 key 设置 value 的同时,还设置过期时间(单位:s) | setex key second value |
psetex | 和 setex 类似 (单位:ms) | psetex key milliseconds value |
setnx | 默认情况下, set 命令会覆盖已经存在的 key,setnx 则不会 (已存在的不会进行修改,且返回0,不存在的设置成功,返回1) | setnx key value |
msetnx | 批量设置(有一个key存在,就都失败,返回0) | msetnx key1 value1 key2 value2 |
setrange | 覆盖一个已经存在的 key 的value (offset:偏移量,起始下标,从0开始) | setrange key offset value |
strlen | 查看字符串长度 | strlen key |
1.2 BIT 命令
在Redis中,字符串都是以二进制的方式存储的。例如:
set k1 a, a对应ASCII码是97 ,97转为二进制是 01100001, BIT相关的命令就是对二进制进行操作的。
命令 | 描述 | 示例 |
---|---|---|
getbit | key 对应的 value 在 offset 处的 bit 值 | getbit key offset |
setbit | 修改 key 对应的 value 在 offset 处的 bit 值 | setbit key offset value |
bitcount | 统计二进制数据中 1 的个数 | bitcount key [start end] |
实例: a对应的是 01100001, b对应的是 01100010
127.0.0.1:6379> set k1 a
OK
127.0.0.1:6379> get k1
"a"
127.0.0.1:6379> getbit k1 0
(integer) 0
127.0.0.1:6379> getbit k1 1
(integer) 1
127.0.0.1:6379> getbit k1 2
(integer) 1
127.0.0.1:6379> getbit k1 3
(integer) 0
127.0.0.1:6379> getbit k1 4
(integer) 0
127.0.0.1:6379> getbit k1 5
(integer) 0
127.0.0.1:6379> getbit k1 6
(integer) 0
127.0.0.1:6379> getbit k1 7
(integer) 1
127.0.0.1:6379> setbit k1 6 1
(integer) 0
127.0.0.1:6379> setbit k1 7 0
(integer) 1
127.0.0.1:6379> get k1
"b"
127.0.0.1:6379> bitcount k1
(integer) 3
127.0.0.1:6379> bitcount k1 0 3
(integer) 3
127.0.0.1:6379>
bit的一个运用:统计个数。
下表列出了常用的 redis 字符串命令:
序号 | 命令 | 描述 |
---|---|---|
1 | SET key value | 设置指定 key 的值 |
2 | GET key | 获取指定 key 的值。 |
3 | GETRANGE key start end | 返回 key 中字符串值的子字符 |
4 | GETSET key value | 将给定 key 的值设为 value ,并返回 key 的旧值(old value)。 |
5 | GETBIT key offset | 对 key 所储存的字符串值,获取指定偏移量上的位(bit)。 |
6 | MGET key1 [key2..] | 获取所有(一个或多个)给定 key 的值。 |
7 | SETBIT key offset value | 对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。 |
8 | SETEX key seconds value | 将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)。 |
9 | SETNX key value | 只有在 key 不存在时设置 key 的值。 |
10 | SETRANGE key offset value | 用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始。 |
11 | STRLEN key | 返回 key 所储存的字符串值的长度。 |
12 | MSET key value [key value ...] | 同时设置一个或多个 key-value 对。 |
13 | MSETNX key value [key value ...] | 同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。 |
14 | PSETEX key milliseconds value | 这个命令和 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间,而不是像 SETEX 命令那样,以秒为单位。 |
15 | INCR key | 将 key 中储存的数字值增一。 |
16 | INCRBY key increment | 将 key 所储存的值加上给定的增量值(increment) 。 |
17 | INCRBYFLOAT key increment | 将 key 所储存的值加上给定的浮点增量值(increment) 。 |
18 | DECR key | 将 key 中储存的数字值减一。 |
19 | DECRBY key decrement key | 所储存的值减去给定的减量值(decrement) 。 |
20 | APPEND key value | 如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。 |
2、Hash
在hash结构中,key是一个字符串,value则是一个 key/value 的键值对。
Redis hash 命令
命令 | 描述 | 示例 |
---|---|---|
hset | 添加值 | hset key field value [field value ...] eg: hset k1 name lucky |
hget | 获取值 | hget key field eg:hget k1 name |
hmset | 批量设置 | hmset key field value [field value ...] |
hmget | 批量获取 | hmget key field [field ...] |
hdel | 删除一个指定的 field | hdel key field [field ...] |
hsetnx | 默认情况下,如果 key 和 field 相同,会覆盖掉已有的 value,hsetnx 则不会 | hsetnx key field value |
hvals | 获取所有的 value | hvals key |
hkeys | 获取所有的 key | hkeys key |
hgetall | 同时获取所有的 key 和 value | hgetall key |
hexists | 返回 field 是否存在(存在返回1,不存在返回0) | hexists key field |
hincrby | 给指定的 value 自增 | hincrby key field increment |
hincrbyfloat | 可以自增一个浮点数 | hincrbyfloat key field increment |
hlen | 返回 某一个 key 中 value 的数量 | hlen key |
hstrlen | 返回某一个 key 中的某一个 field 的字符串长度 | hstrlen key field |
下表列出了 redis hash 基本的相关命令:
序号 | 命令 | 描述 |
---|---|---|
1 | HDEL key field2 [field2] | 删除一个或多个哈希表字段 |
2 | HEXISTS key field | 查看哈希表 key 中,指定的字段是否存在。 |
3 | HGET key field | 获取存储在哈希表中指定字段的值/td> |
4 | HGETALL key | 获取在哈希表中指定 key 的所有字段和值 |
5 | HINCRBY key field increment | 为哈希表 key 中的指定字段的整数值加上增量 increment 。 |
6 | HINCRBYFLOAT key field increment | 为哈希表 key 中的指定字段的浮点数值加上增量 increment 。 |
7 | HKEYS key | 获取所有哈希表中的字段 |
8 | HLEN key | 获取哈希表中字段的数量 |
9 | HMGET key field1 [field2] | 获取所有给定字段的值 |
10 | HMSET key field1 value1 [field2 value2 ] | 同时将多个 field-value (域-值)对设置到哈希表 key 中。 |
11 | HSET key field value | 将哈希表 key 中的字段 field 的值设为 value 。 |
12 | HSETNX key field value | 只有在字段 field 不存在时,设置哈希表字段的值。 |
13 | HVALS key | 获取哈希表中所有值 |
14 | HSCAN key cursor [MATCH pattern] [COUNT count] | 迭代哈希表中的键值对。 |
3、List
Redis 列表命令
命令 | 描述 | 示例 |
---|---|---|
lpush | 将value值从左往右依次插入到列表头部。如果 key 不存在,那么在进行 push 操作前会创建一个空列表。 | lpush key element [element ...] |
lrange | 返回列表指定区间内的元素。 | lrange key start stop |
rpush | 功能类似于lpush,从右往左依次插入到列表头部。 | rpush key element [element ...] |
rpop | 移除并返回列表的尾元素。 | rpop key |
lpop | 移除并返回列表的头元素。 | lpop key |
lindex | 返回列表中,下标为 index 的元素。 | lindex key index |
ltrim | 可以对一个列表进行修剪 | ltrim key start stop |
blpop | 阻塞式的弹出,相当于 lpop 的阻塞版 | blpop key [key ...] timeout |
下表列出了列表相关的基本命令:
序号 | 命令 | 描述 |
---|---|---|
1 | BLPOP key1 [key2] timeout | 移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。 |
2 | BRPOP key1 [key2] timeout | 移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。 |
3 | BRPOPLPUSH source destination timeout | 从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。 |
4 | LINDEX key index | 通过索引获取列表中的元素 |
5 | LINSERT key BEFORE|AFTER pivot value | 在列表的元素前或者后插入元素 |
6 | LLEN key | 获取列表长度 |
7 | LPOP key | 移出并获取列表的第一个元素 |
8 | LPUSH key value1 [value2] | 将一个或多个值插入到列表头部 |
9 | LPUSHX key value | 将一个或多个值插入到已存在的列表头部 |
10 | LRANGE key start stop | 获取列表指定范围内的元素 |
11 | LREM key count value | 移除列表元素 |
12 | LSET key index value | 通过索引设置列表元素的值 |
13 | LTRIM key start stop | 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。 |
14 | RPOP key | 移除并获取列表最后一个元素 |
15 | RPOPLPUSH source destination | 移除列表的最后一个元素,并将该元素添加到另一个列表并返回 |
16 | RPUSH key value1 [value2] | 在列表中添加一个或多个值 |
17 | RPUSHX key value | 为已存在的列表添加值 |
4、Set
set 集合内的元素是不重复的。
Redis 集合命令
命令 | 描述 | 示例 |
---|---|---|
sadd | 添加元素到一个 key 中 | sadd key member [member ...] |
smembers | 获取一个 key 下的所有元素。 | smembers key |
srem | 移除指定的元素 | srem key member [member ...] |
sismemeber | 返回某一个成员是否在集合中(返回0:不存在,1:存在) | sismember key member |
scard | 返回集合的数量 | scard key |
srandmember | 随机返回一个元素 | srandmember key [count] |
spop | 随机返回并且出栈一个元素 | spop key [count] |
smove | 把一个元素从一个集合移到另一个集合中去 | smove source destination member |
sdiff | 返回两个集合的差集 | sdiff key [key ...] |
sinter | 返回两个集合的交集 | sinter key [key ...] |
sdiffstore | 类似于 sdiff ,不同的是,计算出来的结果会保存在一个新的集合中。 | sdiffstore destination key [key ...] |
sinterstore | 类似于 sinter,只是将计算出来的交集保存到一个新的集合中。 | sinterstore destination key [key ...] |
sunion | 求并集 | sunion key [key ...] |
sunionstore | 求并集并且将结果保存到新的集合中。 | sunionstore destination key [key ...] |
下表列出了 Redis 集合基本命令:
序号 | 命令 | 描述 |
---|---|---|
1 | SADD key member1 [member2] | 向集合添加一个或多个成员 |
2 | SCARD key | 获取集合的成员数 |
3 | SDIFF key1 [key2] | 返回给定所有集合的差集 |
4 | SDIFFSTORE destination key1 [key2] | 返回给定所有集合的差集并存储在 destination 中 |
5 | SINTER key1 [key2] | 返回给定所有集合的交集 |
6 | SINTERSTORE destination key1 [key2] | 返回给定所有集合的交集并存储在 destination 中 |
7 | SISMEMBER key member | 判断 member 元素是否是集合 key 的成员 |
8 | SMEMBERS key | 返回集合中的所有成员 |
9 | SMOVE source destination member | 将 member 元素从 source 集合移动到 destination 集合 |
10 | SPOP key | 移除并返回集合中的一个随机元素 |
11 | SRANDMEMBER key [count] | 返回集合中一个或多个随机数 |
12 | SREM key member1 [member2] | 移除集合中一个或多个成员 |
13 | SUNION key1 [key2] | 返回所有给定集合的并集 |
14 | SUNIONSTORE destination key1 [key2] | 所有给定集合的并集存储在 destination 集合中 |
15 | SSCAN key cursor [MATCH pattern] [COUNT count] | 迭代集合中的元素 |
5、ZSet
有序集合
Redis 有序集合命令
命令 | 描述 | 示例 |
---|---|---|
zadd | 将指定的元素添加到有序集合中 | zadd key score member |
zscore | 返回 member 的 score 值 | zscore key member |
zrange | 返回集合中的一组元素 (WITHSCORES: 会携带值) | zrange key start stop [withscores] |
zrevrange | 返回一组元素,但是是倒序 | zrevrange key start stop |
zcard | 返回元素个数 | zcard key |
zcount | 返回 score 在某一个区间内的元素个数 | zcount key min max eg: zcount k1 60 90 包含60,90 zcount k1 (60 (90 不包含60,90 |
zrangebyscore | 按照 score 的范围返回元素 | zrangebyscore key min max [withscores] |
zrank | 返回元素排名 (从小到大) | zrank key member |
zrevrank | 返回元素排名 (从大到小) | zrevrank key member |
zincrby | score 自增 | zincrby key increment member |
zinterstore | 给两个集合求交集 | ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight] |
zrem | 弹出一个元素 | zrem key member [member ...] |
zlexcount | 计算有序集合中成员数量 | zlexcount key min max eg: zlexcount k1 - + 统计全部 zlexcount k1 (member (member |
zrangebylex | 返回指定区间内的成员 | zrangebylex key min max eg: zrangebylex k1 - + zrangebylex k1 (member (member |
下表列出了 redis 有序集合的基本命令:
序号 | 命令 | 描述 |
---|---|---|
1 | ZADD key score1 member1 [score2 member2] | 向有序集合添加一个或多个成员,或者更新已存在成员的分数 |
2 | ZCARD key | 获取有序集合的成员数 |
3 | ZCOUNT key min max | 计算在有序集合中指定区间分数的成员数 |
4 | ZINCRBY key increment member | 有序集合中对指定成员的分数加上增量 increment |
5 | ZINTERSTORE destination numkeys key [key ...] | 计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中 |
6 | ZLEXCOUNT key min max | 在有序集合中计算指定字典区间内成员数量 |
7 | ZRANGE key start stop [WITHSCORES] | 通过索引区间返回有序集合成指定区间内的成员 |
8 | ZRANGEBYLEX key min max [LIMIT offset count] | 通过字典区间返回有序集合的成员 |
9 | ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT] | 通过分数返回有序集合指定区间内的成员 |
10 | ZRANK key member | 返回有序集合中指定成员的索引 |
11 | ZREM key member [member ...] | 移除有序集合中的一个或多个成员 |
12 | ZREMRANGEBYLEX key min max | 移除有序集合中给定的字典区间的所有成员 |
13 | ZREMRANGEBYRANK key start stop | 移除有序集合中给定的排名区间的所有成员 |
14 | ZREMRANGEBYSCORE key min max | 移除有序集合中给定的分数区间的所有成员 |
15 | ZREVRANGE key start stop [WITHSCORES] | 返回有序集中指定区间内的成员,通过索引,分数从高到底 |
16 | ZREVRANGEBYSCORE key max min [WITHSCORES] | 返回有序集中指定分数区间内的成员,分数从高到低排序 |
17 | ZREVRANK key member | 返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序 |
18 | ZSCORE key member | 返回有序集中,成员的分数值 |
19 | ZUNIONSTORE destination numkeys key [key ...] | 计算给定的一个或多个有序集的并集,并存储在新的 key 中 |
20 | ZSCAN key cursor [MATCH pattern] [COUNT count] | 迭代有序集合中的元素(包括元素成员和元素分值) |
以上都是对于value的操作,下面是对key的操作。
6、key
命令 | 描述 | 示例 |
---|---|---|
del | 删除一个 key/value | del key [key ...] |
dump | 序列化给定的 key | dump key |
exists | 判断一个 key 是否存在(存在返回1,不存在返回0) | exists key |
ttl | 查看一个 key 的有效期(-1 永久有效, -2 已经过期) | ttl key |
expire | 给一个 key 设置有效期,如果 key 在过期之前被重新 set 了,则过期时间会失效。 | expire key seconds |
persist | 移除一个 key 的过期时间 | persist key |
keys * | 查看所有的 key | keys * keys pattern |
pttl | 和 ttl 一样,只不过这里返回的是毫秒 | pttl key |
7、说明
1、 四种数据类型(list/set/zset/hash),在第一次使用时,如果容器不存在,就自动创建一个
2、 四种数据类型(list/set/zset/hash),如果里边没有元素了,那么立即删除容器,释放内存。