redis基本数据类型

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),如果里边没有元素了,那么立即删除容器,释放内存。

你可能感兴趣的:(redis基本数据类型)