文章目录
redis中5大数据类型命令
string命令
以下命令与string类型的vule相关
命令 | 功能 | 示例 |
---|---|---|
set | 创建一个字符串 | set name cjw |
get | 获得一个字符串 | get name |
strlen | 获得一个字符串的长度 | strlen name |
append | 在字符串后面追加字符串 | append name 123 |
incr | 自增1,整数类型的string有效 | incr num |
incrby | 自增一个自定义的整数,整数类型的string有效 | incrby num 17 |
incrbyfloat | 自增一个自定义的数字,数字类型的string有效 | incrby num 17,incrby num 17.1 |
decr | 自减1,整数类型的string有效 | decr num |
decrby | 自减一个自定义的整数,整数类型的string有效 | decrby num 11 |
getrange | 获取指定范围的字符串,闭区间,从0开始 | getrange name 0 2 |
setrange | 从某个下标开始覆盖/追加一段字符串,下标可以不再字符串长度范围内 | setrange name 6 123 |
getset | 获取并修改字符串 | getset name 1 |
mget | 批量获取字符串 | mget name age sex |
mset | 批量创建字符串 | mset name cjw age 17 sex men |
setex | 创建一个字符串,并设置存活时间,单位为秒 | setex name1 20 cjw1 |
psetex | 创建一个字符串,并设置存活时间,单位为毫秒 | psetex name2 20000 cjw2 |
setnx | 如果一个字符串不存在,就创建该字符串 | setnx num 123 |
msetnx | 批量创建字符串,其中有一个字符串存在则所有字符串都不创建 | msetnx num1 22 num2 33 |
string中的bit命令
字符串在redis中是以二进制位的方式存储的。可以对字符串进行各种二进制位操作。二进制位操作是最高效的。
下标为0是最高位
getbit命令
获取字符串某个偏移位的二进制数,0表示最高位,最高位不确定。
“a”的二进制位:0110 0001
getbit a 0
示例 “a” 从0到7,0110 0001
127.0.0.1:6379> getbit a 0
(integer) 0
127.0.0.1:6379> getbit a 1
(integer) 1
127.0.0.1:6379> getbit a 2
(integer) 1
127.0.0.1:6379> getbit a 3
(integer) 0
127.0.0.1:6379> getbit a 4
(integer) 0
127.0.0.1:6379> getbit a 5
(integer) 0
127.0.0.1:6379> getbit a 6
(integer) 0
127.0.0.1:6379> getbit a 7
(integer) 1
示例 “aa” 从0到15 0110 0001 0110 0001
127.0.0.1:6379> set aa aa
OK
127.0.0.1:6379> getbit aa 0
(integer) 0
127.0.0.1:6379> getbit aa 1
(integer) 1
127.0.0.1:6379> getbit aa 2
(integer) 1
127.0.0.1:6379> getbit aa 3
(integer) 0
127.0.0.1:6379> getbit aa 4
(integer) 0
127.0.0.1:6379> getbit aa 5
(integer) 0
127.0.0.1:6379> getbit aa 6
(integer) 0
127.0.0.1:6379> getbit aa 7
(integer) 1
127.0.0.1:6379> getbit aa 8
(integer) 0
127.0.0.1:6379> getbit aa 9
(integer) 1
127.0.0.1:6379> getbit aa 10
(integer) 1
127.0.0.1:6379> getbit aa 11
(integer) 0
127.0.0.1:6379> getbit aa 12
(integer) 0
127.0.0.1:6379> getbit aa 13
(integer) 0
127.0.0.1:6379> getbit aa 14
(integer) 0
127.0.0.1:6379> getbit aa 15
(integer) 1
setbit命令
设置某个二进制位的值
setbit a 6 1
“a”的第6位是0,把它设置为1,等价与“a”+2=“c”
127.0.0.1:6379> get a
"a"
127.0.0.1:6379> setbit a 6 1
(integer) 0
127.0.0.1:6379> get a
"c"
bitcount命令
统计字符串的二进制位中为1的个数
例如:“a”的二进制位,0110 0001,共有3个1。
127.0.0.1:6379> get a
"a"
127.0.0.1:6379> bitcount a
(integer) 3
bitop命令
可以进行二进制位进行,and(与),or(或),not(非),xor(异或)运算。
and 运算,全部为1,才为1。
“1”:0011 0001
“2”:0011 0010
“1” and “2” = 0011 0000 = “0”
127.0.0.1:6379> get a
"1"
127.0.0.1:6379> get b
"2"
127.0.0.1:6379> bitop and a a b
(integer) 1
127.0.0.1:6379> get a
"0"
or运算,有一个1,就为1。
“1”:0011 0001
“2”:0011 0010
“1” or “2” = 0011 0011 = “3”
127.0.0.1:6379> get a
"1"
127.0.0.1:6379> get b
"2"
127.0.0.1:6379> bitop or a a b
(integer) 1
127.0.0.1:6379> get a
"3"
not运算,1变0,0变1.
“1”:0011 0001
“1” not = 1100 1110 = “\xce”,这个数字不再ascall表内。
127.0.0.1:6379> get a
"1"
127.0.0.1:6379> bitop not a a
(integer) 1
127.0.0.1:6379> get a
"\xce"
127.0.0.1:6379> getbit a 0
(integer) 1
127.0.0.1:6379> getbit a 1
(integer) 1
127.0.0.1:6379> getbit a 2
(integer) 0
127.0.0.1:6379> getbit a 3
(integer) 0
127.0.0.1:6379> getbit a 4
(integer) 1
127.0.0.1:6379> getbit a 5
(integer) 1
127.0.0.1:6379> getbit a 6
(integer) 1
127.0.0.1:6379> getbit a 7
(integer) 0
xor运算,相同为0,不同为1
“1”:0011 0001
“2”:0011 0010
“1” xor “2” = 0000 0011 = “\x03”
127.0.0.1:6379> get a
"1"
127.0.0.1:6379> get b
"2"
127.0.0.1:6379> bitop xor a a b
(integer) 1
127.0.0.1:6379> get a
"\x03"
127.0.0.1:6379> getbit a 0
(integer) 0
127.0.0.1:6379> getbit a 1
(integer) 0
127.0.0.1:6379> getbit a 2
(integer) 0
127.0.0.1:6379> getbit a 3
(integer) 0
127.0.0.1:6379> getbit a 4
(integer) 0
127.0.0.1:6379> getbit a 5
(integer) 0
127.0.0.1:6379> getbit a 6
(integer) 1
127.0.0.1:6379> getbit a 7
(integer) 1
bitpos命令
从最高位开始,返回第一个为0/1的下标。
“1”:0011 0001
从最高位开始,第一个为0的下标为0
从最高位开始,第一个为1的下标为2
127.0.0.1:6379> get a
"1"
127.0.0.1:6379> bitpos a 0
(integer) 0
127.0.0.1:6379> bitpos a 1
(integer) 2
hash命令
一个hash变量,可以存储40多亿个键值对。适用用来存储对象,键名不能重复。
hash命令都是以“h”开头的。
命令 | 功能 | 示例 |
---|---|---|
hset | 为某个对象新增一条属性并赋值 | hset user name cjw |
hget | 获取属性值 | hget user name |
hmset | 批量新增属性 | hmset user name cjw age 17 |
hmget | 批量获取属性值 | hmget user name age |
hdel | 删除属性 | hdel user age |
hsetnx | 新增属性(该属性不存在) | hsetnx user name cjw123 |
hvals | 返回某对象全部的属性值 | hvals user |
hkeys | 返回某对象全部的属性 | hkeys user |
hgetall | 返回某对象全部的属性和属性值 | hgetall user |
hexists | 判断某属性是否存在 | hexists user age |
hincrby | 为整形属性增加指定整数 | hincrby user age 1 |
hincrbyfloat | 为数字属性增加指定数字 | hincrbyfloat user age 0.9 |
hlen | 返回对象属性的个数 | hlen user |
hstrlen | 返回属性值长度 | hstrlen user name |
list命令
list变量,插入有顺序,可以头插(下标为0处),也可以尾插(下标为list长度)。可以存储40多亿个字符串。
有下标,可以存储重复值。
命令 | 功能 | 示例 |
---|---|---|
lpush | 头部插入字符串 | lpush name cjw |
lrange | 返回所有字符串,-1表示最后一个下标 | lrange name 0 -1 |
rpush | 在尾部插入字符串 | rpush name ww |
llen | 返回list变量中值的个数 | llen name |
lset | 修改指定下标处的值 | lset name 0 cjw |
rpop | 尾部弹出值 | rpop name |
lpop | 头部弹出值 | lpop name |
lindex | 返回指定下标处的值 | lindex name 1 |
ltrim | 截取指定范围,闭区间 | ltrim name 1 2 |
blpop | 从头部弹出,阻塞式,指定过期时间,单位为秒,可以从多个list弹出,0表示永远不过期,优先从前面的list中弹出 | blpop name age 0 |
brpop | 从尾部弹出,同上 | brpop name age 1000 |
rpoplpush | 从一个list头部弹出,到另一个list尾部插入 | rpoplpush user1 user2 |
brpoplpush | 从一个list头部弹出,到另一个list尾部插入,阻塞式 | brpoplpush user1 user2 1000 |
应用-实现消息队列
set命令
set可以存储40多亿个字符串,无序,不可重复。以“s”开头。
命令 | 功能 | 示例 |
---|---|---|
sadd | 将一个或多个元素添加到集合中 | sadd user cjw 17 men |
scard | 返回集合中元素的个数 | scard user |
sismenber | 判断集合中是否存在该元素 | sismember user cjw |
smembers | 返回集合中全部元素 | smembers user |
srem | 从集合中删除1个或多个元素 | srem user 17 men |
srandmember | 随机的从集合中返回指定数量的元素 | srandmember user 2 |
spop | 随机的从集合中弹出指定数量的元素 | spop user 2 |
smove | 将集合的一个元素移动到另一个集合中 | smove user user2 men |
sdiff | 返回差集 | sdiff A B,sdiff B A |
sdiffstore | 与sdiff类似,不过会将差集保存起来 | sdiffstore C A B |
sinter | 返回交集 | sinter A B |
sinterstore | 与sinter类似,不过会将交集保存起来 | sinterstore C A B |
sunion | 返回并集 | sunion A B |
sunionstore | 与sunion类似,不过会将交集保存起来 | sunionstore C A B |
zset命令
与set类似,每一个元素都关联一个double(分数),按分数从小到大排序,可以是负数。元素是唯一的,但分数可以重复。命令以“z”开头。
命令 | 功能 | 示例 |
---|---|---|
zadd | 在集合中添加一个或多个分数/元素对 | zadd user 1 a 1.5 1.5 2 b |
zscore | 返回元素的分数 | zscore user 1 |
zrange | 返回指定范围的元素,闭区间 | zrange user 0 -1 |
zrevrange | 倒序(从大到小)返回指定范围的元素,闭区间 | zrevrange user 0 -1 |
zcard | 返回集合元素的数量 | zcard user |
zcount | 计数指定分数范围内元素的个数,闭区间 | zcount user 0 1 |
zrangebyscore | 返回指定分数范围内元素的个数,闭区间 | zrangebyscore user 0 1 |
zrank | 返回元素的下标,从0开始 | zrank user a |
zrevrank | 返回元素的倒序下标,从0开始 | zrevrank user a |
zincrby | 改变元素的分数,增加指定值 | zincrby user -10 0 |
zinterstore | 计算2个/多个有序集合的交集,保存到指定集合中,新集合元素的分数为原集合分数相加。 | zinterstore C 2 A B |
zrem | 删除指定元素 | zrem user 0 |
zlexcount | 返回指定范围内的元素的个数,这些元素必须分数相同 | zlexcount user - + |
zrangebylex | 返回指定范围内的元素,这些元素必须分数相同 | zrangebylex user [a [c,zrangebylex user - + |