5种类型:字符串类型、散列类型、列表类型、集合类型、有序集合类型
字符串操作
设置键-值
set bar 1
获取所有的键
keys *
判断键是否存在
exists bar
删除键
del key
获取键值的数据类型
type key
获取字符串的长度
strlen key
设置字符串区域的值
redis> SET key1 "Hello World"
OK
redis> SETRANGE key1 6 "Redis"
(integer) 11
redis> GET key1
"Hello Redis"
redis>
//如果key不存在的话
redis> SETRANGE key2 6 "Redis"
(integer) 11
redis> GET key2
"\u0000\u0000\u0000\u0000\u0000\u0000Redis"
redis>
获取区域字符串的值
getrange key start stop
递增数字,让数字自增1
incr key
增加指定的整数
//在key的值上增加2
incrby key 2
增加指定的浮点数
incrbyfloat key increment
在数字类型的键上加上count令其唯一
incr postId : count
减少
decr key
decrby key 2
向键的末尾增加值
set key hello
append key "world"
获取字符串长度
strlen key
同时获取多个键值
mget key1 key2···
同事设置多个键值
mset key value key2 value2···
获取字符串类型指定二进制位的值
//这个位置是从左往右开始数的
getbit ff 3
设置指定位置二进制的值
setbit ff 3 1
获取字符串类型中二进制是1的个数
bitcount ff 0 1
//这个后面的0,1代表从左往右数的字节数组
逻辑运算
bittop or res ff1 ff2
//其中的or,还可以是and,xor,not,返回值存在res中
散列类型
对应C#中的dictionary
赋值/更新
hset car price 600
//赋值成功返回1,更新成功返回0
取值
hget car name
同时设置多个字段的值
hmset key field1 value1 field2 value2
同时获取多个字段的值
hmget key field1 field2
hgetall key
判断字段是否存在
hexists key field
当字段不存在时赋值
//存在时不进行任何操作
hsetnx key filed value
增加数字
hincrby key field 60
//如果键不存在则自动创建切设置默认field为0,然后自动增加60
删除字段
hdel key field
获取字段名
hkeys key
获取字段值
hvals key
获取字段的数量
hlen key
列表类型
向列表两端增加元素
//向列表左边增加
lpush key value1 [value2]
//向列表右边增加
rpush key value1 [value2]
从列表两端弹出元素
//弹出左边的元素
lpop key
//弹出右边的元素
rpop key
获取列表中元素的个数
//llen的时间复杂度为O(1)
llen key
获得列表片段
lrange key start stop // 索引是从0开始的,返回值包含stop位的元素,支持负索引
删除列表中指定的值
lrem key count value
//count>0时,从左边开始删除count个值为value的元素
//count<0时,从右边开始删除
//count=0时,全删
获取指定索引的元素值
lindex key index
只保留指定片段
ltrim key start end //start和end都保留
向列表中插入元素
linsert key before | after pivot value
//从左到右查到pivot的值,并根据before还是after决定怎么插入
将元素从一个列表转到另一个列表,这是一个原子性操作
rpoplpush source destination
随机返回keys中的一个
randomkey
设置某个键的过期时间
expire key 20 //设置20s的过期时间
expire //秒为单位
pexpire key milliseconds 粒度更小的时间控制
expireat key timestamp //最后一个是linux时间戳
pexpireat key milliseconds-timestamp
pexpireat 已某个时间点为过期时间 【微妙】
查看key的生存时间
ttl key
pttl key // 返回以毫秒为单位的过期时间
expireat 已某个时间点为过期时间 【毫秒】
问题:
set ff:22:tt jklsjklf 这种字符类型的定义是个什么鬼?冒号是干什么的?
集合命令
添加/删除元素
sadd key member1 [member2] // 返回成功加入元素的数量
srem key member1 [member2]
返回集合中的所有元素
smembers key
判断是否在元素中
sismember key member
集合间的运算
sdiff key1 [key2] // A-B
sinter key1 [key2] // A交B
sunion key1 [key2] // A+B
sdiffstore destination key1 [key2]
sinterstore destination key1 [key2]
sunionstore destination key1 [key2]
统计集合元素个数
scard key
随机获取count个数据
srandmember key [count]
随机从集合中弹出一个元素
spopkey
有序集合
增加元素
zadd key score member [score member ]
zadd tt +inf spike
//+inf代表正无穷,-inf代表负无穷
删除元素
zrem key member [member]
按照分数排名从小到大的删除
zremrangbyrank key start stop // 按照分数从小到大的顺序来删除
按照分数范围删除
zremrangbyscore key min max
获得元素的分数
zscore key member
获取元素的排名
zrank key member
zrevrank key member
获取指定分数内元素的个数
zcount key min max
获取在某个范围内的元素列表
//start和stop是元素的索引位
zrange key start stop [withscores] //加上withscores时,返回值会带上分数
zrevrange key start stop [withscores] // 从大到小排列
获取分数在某个范围内的元素列表
zrangebyscore key min max [withscores] [limit offset count]
zrangebyscore key (80 +inf //不包含80,到正无穷
zrangebyscore key 60 +inf limit 1 3 //获取分数高于60的,且从第二个人开始的3个人
增加某个元素的分数
zincrby key increment member
zincrby key -4 jerry // 给jerry减少4分
计算有序集合的交集
zinterstore destination numkeys key1 [key2] [weights weight [weigth..]] [aggregate sum|min|max]
zinterstore res 2 key1 key2 weights 2 3 sum
// 存储结果放在res中,共2个键,权重分别乘以2,3,取交集中的大数
计算有序集合中的并集
zunionstore 同zinterstore的用法一样
事务
multi
exec
watch
//如果watch检测了一个设置了生存时间的键,这个键到期自动删除,这种情况不会被watch认为该键被改变
unwatch
生存时间
取消生存时间
persist key // 重新赋值也会清除键的生存时间
sort排序命令
sort key // key 可以是列表类型,集合类型,有序集合类型
//对有序集合类型排序时,会忽略分数,仅仅对元素自身的值进行排序,默认把所有数据转换成双精度浮点数来比较
sort key alpha //加上参数alpha,按照字典顺序排列非数字元素
sort key [limit offset count] 返回指定范围内的结果
sort by这个还是看视频吧,文档讲不清
任务队列
brpop // 当列表中没有元素时,brpop命令会一直阻塞住连接,直到有新元素加入
rpop
blpop
lpop
发布订阅模式
发布
publish channel2.2 hi //返回订阅者的数量
订阅
subscribe channel2.2
//进入客户端后,只能使用下面的四个命令:subscribe / unsubscribe / psubscribe / punsubscribe
按规则订阅
psubscribe channel.?*
按规则退订
punsubscribe [pattern[pattern]]
管道
管道,这种方式减少客户端与Redis的通信次数来实现降低往返时延累计值的目的
命令监控
monitor
任何命令都会在这个redis-cli中打印出来,不过这个非常影响性能,一个客户端使用monitor会降低redis近一半的负载能力
这个命令只适合用来调试和纠错