本文介绍redis中的五大基本数据类型及常用命令
数据类型 | 说明 |
String | 是Redis中最基本的数据类型,二进制安全的,它可以包含任意数据类型。如图片。Redis中String类型的数据上限的512M。 |
List | Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。 |
Hash | 是一个string类型的field和value的映射表,hash特别适合用于存储对象。Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。 |
Hash | Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。 |
ZSet | 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。 |
启动redis服务并登陆客服端
string介绍
通用命令
五种数据类型的数据结构差异所以命令也不同,但是也有一些相通的命令,在这里简单介绍:
创建一个简单的k/v对
127.0.0.1:6379> set name xn
OK
在redis中默认有16个数据库,编号0-15,正常情况下,用户登陆后首先看到的是0号数据库,可以手动换到其他数据库:
select
127.0.0.1:6380> set name zhangsan
OK
127.0.0.1:6380> select 4
OK
127.0.0.1:6380[4]> get name
(nil)
127.0.0.1:6380[4]> select 0
OK
127.0.0.1:6380> get name
"zhangsan"
del命令
该命令用于存在key删除key
127.0.0.1:6379> del name
(integer) 1
127.0.0.1:6379> del name
(integer) 0
dump命令
序列化key,并返回被序列化的值
127.0.0.1:6379> dump name
"\x00\x03dpb\t\x00\xe5\xa2\xc4\xd1\xfc\xb2\xd9\xcb"
127.0.0.1:6379> dump name1
(nil)
如果key不存在就返回nil
exists命令
检查key是否存在
127.0.0.1:6379> exists name
(integer) 1
127.0.0.1:6379> exists name1
(integer) 0
1表示存在,o表示不存在
ttl命令
以秒为单位,返回key的剩余时间
127.0.0.1:6379> ttl name
(integer) -1
127.0.0.1:6379> ttl name1
(integer) -2
-2表示key不存在,-1表示没有设置有效时间,不会过期,我们可以通过EXPIRE key 设置有效时间
expire命令
是指有效时间,单位为秒
127.0.0.1:6379> expire name 120
(integer) 1
127.0.0.1:6379> ttl name
(integer) 112
127.0.0.1:6379> ttl name
(integer) 10
127.0.0.1:6379> ttl name
(integer) 7
127.0.0.1:6379> ttl name
(integer) -2
112是剩余的有效时间
pexpire命令
同样是设置过期时间,只是单位为毫秒
127.0.0.1:6379> pexpire name 100
(integer) 1
127.0.0.1:6379> ttl name
(integer) -2
-2就表示已经不存在了
pttl
和ttl命令一样,只是返回单位为毫秒
127.0.0.1:6379> pexpire name 100000
(integer) 1
127.0.0.1:6379> ttl name
(integer) 91
127.0.0.1:6379> pttl name
(integer) 84601
keys
通过正则表达式查找符合条件的key
127.0.0.1:6379> set age 18
OK
127.0.0.1:6379> set sex 男
OK
127.0.0.1:6379> set address 深圳
OK
127.0.0.1:6379> keys *
1) "age"
2) "address"
3) "sex"
key * 查询所有的key
randomkey命令
从当前数据库随机返回一个key
127.0.0.1:6379> randomkey
"address"
127.0.0.1:6379> randomkey
"age"
127.0.0.1:6379> randomkey
"sex"
127.0.0.1:6379> randomkey
"age"
type命令
返回key对应的数据类型
127.0.0.1:6379> type name
none
127.0.0.1:6379> type age
string
127.0.0.1:6379> type sex
string
不存在的返回none
rename命令
修改key的名称
127.0.0.1:6379> rename age age1
OK
127.0.0.1:6379> exists age
(integer) 0
127.0.0.1:6379> exists age1
(integer) 1
flushdb
清空当前库
flushall
清空所有库
string类型之BIT
Redis中字符串的存储方式都是以二进制的方式存储的。
比如:
127.0.0.1:6379> set k1 a
OK
k1的值为a,对应的ascii码是97,转换为二进制就是01100001。BIT命令就是对这个二进制数据进行操作的
命令 | 说明 |
getbit | 获取二级制中对应偏移量的值 |
setbit | 设置对应二进制位的值 |
bitcount | 统计二进制中位中为1的个数 |
bitop | 对二进制数据做位元操作,与,或,非,异或操作 |
bitpos | 返回字符串里面第一个被设置为1或者0的bit位 |
GetBit命令
用于key所储存的字符串值,获取指定偏移量的为(bit)
127.0.0.1:6379> set k1 a
OK
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
当偏移量 OFFSET 比字符串值的长度大,或者 key 不存在时,返回 0
SetBit命令
用于对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit),返回的结果是该位上原来的bit值。比如我们设置 k1为a,k2为c,a对应的ASCII码为97(01100001),c对应的ASCII码为99(01100011),相差了一个1,如此我们就可以通过setbit来调整
127.0.0.1:6379> set k2 c
OK
127.0.0.1:6379> get k1
"a"
127.0.0.1:6379> get k2
"c"
127.0.0.1:6379> setbit k1 6 1
(integer) 0
127.0.0.1:6379> get k1
"c"
如此我们就将k1的值快速调整为了c
BitCount命令
用来统计二进制中为1的个数,比如a(97 01100001)为3,c(99 01100011)为4.
127.0.0.1:6379> get k1
"a"
127.0.0.1:6379> get k2
"c"
127.0.0.1:6379> bitcount k1
(integer) 3
127.0.0.1:6379> bitcount k2
(integer) 4
BitOp命令
对一个或多个保存二进制位的字符串 key 进行位元操作,并将结果保存到 destkey 上。BITOP 命令支持 AND(与) 、 OR(或) 、 NOT(非) 、 XOR(异或)运算。比如a 01100001和c 01100011进行相关运算
127.0.0.1:6379> get k1
"a"
127.0.0.1:6379> get k2
"c"
127.0.0.1:6379> bitop and k3 k1 k2
(integer) 1
127.0.0.1:6379> get k3
"a"
127.0.0.1:6379> bitop or k4 k1 k2
(integer) 1
127.0.0.1:6379> get k4
"c"
127.0.0.1:6379> bitop xor k5 k1 k2
(integer) 1
127.0.0.1:6379> get k5
"\x02"
not运算注意参数个数
127.0.0.1:6379> bitop not k6 k1
(integer) 1
127.0.0.1:6379> get k6
"\x9e"
BitPos命令
返回字符串里面第一个被设置为1或者0的bit位。
返回一个位置,把字符串当做一个从左到右的字节数组,第一个符合条件的在位置0,其次在位置8,等等。还是以a为例01100001
127.0.0.1:6379> bitpos k1 1
(integer) 1
127.0.0.1:6379> bitpos k1 0
(integer) 0
其他五个命令就不一一演示
Hash介绍
在实际开发过程中我们肯定会碰到很多需要存储对象的需求,此时hash就比较合适了。hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。
Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。
命令 | 说明 |
hset | 设置key中字段的值 |
hget | 获取key中字段的值 |
hmset | 批量设置key中的字段 |
hmget | 批量获取key中字段的值 |
hdel | 删除key中指定的字典 |
hsetnx | 设置key中的字段的值,如果字段存在就忽略 |
hvals | 获取key中所有的字段的值 |
hkeys | 获取key中的所有的字段 |
hgetall | 获取key中的所有的字段及值 |
hexists | 判断key中的字段是否存在 |
hincrby | 将key中的字段增加特定的值 |
hincrbyfloat | 和hincrby类似增加的float类型的数据 |
hlen | 获取key中的字段的个数 |
hstrlen | 获取key中某个字段的值得长度 |
List类型命令介绍
列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。
命令 | 说明 |
lpush | 向列表头部添加一个或多个元素 |
lrange | 获取列表中指定的元素0第一个,-1最后一个 |
rpush | 向列表尾部添加一个或多个元素 |
llen | 获取列表长度 |
lset | 通过index设置列表的值 |
rpop | 移除列表最后一个元素,并返回 |
lpop | 移除列表头部元素,并返回 |
lindex | 获取列表中对应下标的值 |
ltrim | 截取列表对应的元素 |
blpop | lpop的阻塞版 |
brpop | rpop的阻塞版 |
rpoplpush | 移除一个列表的最后一个元素,并将该元素添加到另一个列表的头部 |
brpoplpush | rpoplpush的阻塞版本 |
Set集合命令介绍
集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)
命令 | 说明 |
sadd | 添加一个或多个元素到集合中,如果集合中存在该元素则忽略 |
scard | 返回集合中的元素的个数 |
sismember | 判断集合中是否含有某元素 |
smembers | 获取集合中的所有的元素 |
srem | 删除集合中指定的元素 |
srandmember | 随机返回集合中的元素,版本2.6后在命令之后可以跟一个count。指定随机返回的元素个数 |
spop | 和srandmember类似,只是spop会将获取的元素移除而srandmember不会移除元素 |
smove | 将元素从一个集合移动到另一个集合中 |
sdiff | 返回两个集合的差集 |
sdiffstore | 和sdiff类似,不同的是会将差集结果保存起来 |
sinter | 获取两个集合的交集 |
sinterstore | 和sinter类似,不同的是将结果保存起来了 |
sunion | 获取两个集合的并集 |
sunionstore | 获取两个集合的并集并保存起来 |
Zset集合命令介绍
有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复
命令 | 说明 |
zadd | 向有序集合中添加一个或多个 分数/元素对 |
zscore | 获取有序集合中元素对应的分数 |
zrange | 获取集合中的元素,如果加上withscores则会连同分数一并返回 |
zrevrange | 和zrange类似,只是将结果倒序了 |
zcard | 返回集合中元素的个数 |
zcount | 统计集合中分数在min和max之间的元素个数 |
zrangebyscore | 可以根据score范围查找元素 |
zrank | 获取元素在集合中的排名,从小到大,最小的是0 |
zrevrank | 获取元素在集合中的排序,从大到小 |
zincrby | 给元素增加分数,如果不存在就新创建元素,并赋予对应的分数 |
zinterstore | 计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中 |
zrem | 从集合中弹出一个元素 |
zlexcount | 计算有序集合中指定字典区间内成员数量 |
zrangebylex | 获取指定区间的元素,分数必须相同 |