本文介绍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服务并登录客服端 redis
五种数据类型的数据结构差别因此命令也不一样,可是也有一些相通的命令,在这里简单介绍: 建立一个简单的k/v对数据库
127.0.0.1:6379> set name xn OK
在redis中默认有16个数据库,编号0-15,正常状况下,用户登录后首先看到的是0号数据库,能够手动换到其余数据库:数组
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"
该命令用于存在key删除key安全
127.0.0.1:6379> del name (integer) 1 127.0.0.1:6379> del name (integer) 0
序列化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不存在就返回nildom
检查key是否存在3d
127.0.0.1:6379> exists name (integer) 1 127.0.0.1:6379> exists name1 (integer) 0
1表示存在,o表示不存在code
以秒为单位,返回key的剩余时间对象
127.0.0.1:6379> ttl name (integer) -1 127.0.0.1:6379> ttl name1 (integer) -2
-2表示key不存在,-1表示没有设置有效时间,不会过时,咱们能够经过EXPIRE key 设置有效时间
是指有效时间,单位为秒
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是剩余的有效时间
一样是设置过时时间,只是单位为毫秒
127.0.0.1:6379> pexpire name 100 (integer) 1 127.0.0.1:6379> ttl name (integer) -2
-2就表示已经不存在了
和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
经过正则表达式查找符合条件的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
从当前数据库随机返回一个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"
返回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
修改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
清空当前库
清空全部库
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位|
用于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
用于对 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
用来统计二进制中为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
对一个或多个保存二进制位的字符串 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"
返回字符串里面第一个被设置为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 是一个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中某个字段的值得长度 |
列表是简单的字符串列表,按照插入顺序排序。你能够添加一个元素到列表的头部(左边)或者尾部(右边) 一个列表最多能够包含 232 - 1 个元素 (4294967295, 每一个列表超过40亿个元素)。 | 命令 | 说明 | |--|--| |lpush| 向列表头部添加一个或多个元素| |lrange| 获取列表中指定的元素0第一个,-1最后一个| |rpush |向列表尾部添加一个或多个元素| |llen |获取列表长度| |lset |经过index设置列表的值| |rpop |移除列表最后一个元素,并返回| |lpop |移除列表头部元素,并返回| |lindex |获取列表中对应下标的值| |ltrim |截取列表对应的元素| |blpop |lpop的阻塞版| |brpop |rpop的阻塞版| |rpoplpush |移除一个列表的最后一个元素,并将该元素添加到另外一个列表的头部| |brpoplpush | rpoplpush的阻塞版本|
集合中最大的成员数为 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 | 获取两个集合的并集并保存起来|
有序集合和集合同样也是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 | 获取指定区间的元素,分数必须相同 |