AIOps 一场颠覆传统运维的盛筵
945
2022-11-09
Redis学习笔记-数据类型和操作(动手试试)
关注爱因诗贤每天进步一点点
导读
Redis 为什么快?Redis 快的表现在当它查找一个 key 的时候能以微秒级的时间找到对应的value,并执行相应操作,Redis的快主要体现在两个方面,一方面是因为Redis是内存数据库,所有的操作是在内存中完成的,内存的的访问速度特别快,另一个方面是因为 Redis 底层设计有各种不同的数据结构,所有的 key-value 是按照不同的数据结构进行存储的,从逻辑上能降低增删改查的时间复杂度,为了搞清楚这两个问题,下面就来熟悉一下 Redis 基本数据类型和操作。
1.Redis 数据类型和操作图谱
2.Redis 基本数据类型
2.1 String(字符串)
2.1.1 增
set key value [EX seconds|PX milliseconds|KEEPTTL] [NX|XX]
Tips:参数:NX:当数据库中key不存在时才添加,存在时返回nil,XX:当数据库中key存在时覆盖,不存在返回nil,EX:key的过期时间,单位 s,PX:key的过期时间,单位 ms,KEEPTTL:若key原来有过期时间,设置了这个参数新value过期时间将继承原来的。
2.1.2 改
set key value
2.1.3 查
get key
Tips:get一个不存在的key时返回nil。
2.1.4 获取长度
strlen key
Tips:获取value字符串的长度,对不存在的key执行此操作返回0。
2.1.5 追加
append key 's'
Tips:向value末尾追加字符。
2.1.6 覆盖
strange "key1" 2 "abc"
Tips::从value第 2 位(0开始)覆盖。
2.1.6 增(不存在时)
setnx "key1" "ok"
Tips::若key存在返回0,不覆盖。
2.1.7 批量增
mset "key1" "value2" "key2" "value2"
Tips::节省网络开销。
2.1.8 批量查
mget "key1" "key2"
2.1.9 自增
incr "key1"
Tips::对value(整型)值+1,若不是整型会失败。
2.1.10 自减
decr "key1"
Tips::对value(整型)值-1,若不是整型会失败。
2.1.11 加【n】
incrby "key1" n
Tips::对value(整型)值+n,若不是整型会失败。
2.1.12 减【n】
decrby "key1" n
Tips::对value(整型)值-n,若不是整型会失败。
2.1.13 查时改
getset "key1" "value1"
Tips::设置新值返回旧值。
2.1.14 查部分长度
getrange "key1" m n
Tips::获取字符串第m至n位置(0开始)的内容。
2.1.15 位操作
setbit key offset value
Tips::设置指定位置(从0开始)的值,值为 0和1。
getbit key offset
Tips::查找某个位置(从0开始)的值。
bitpos key bit [start] [end]
Tips::查找【start】至【end】位置第一出现0(或1)的位置 。
bitcount key [start end]
Tips::查找【start】至【end】位置出现1(或1)的个数。
bitop operation destkey key [key ...]
Tips::对一个或多个key执行元操作 。
2.2 Set(集合)
2.2.1 增
sadd key member [member ...]
Tips::将一个或多个元素加入到集合中。
2.2.2 删
srem key member [member ...]
Tips::删除集合中指定的元素。
2.2.3 查
smembers key
Tips::返回集合key中所有元素。
spop key [count]
Tips::随机返回一个元素,会将返回元素从集合中移除。
srandmember key [count]
Tips::随机返回一个元素,返回元素不会从集合中移除。
sismember key member
Tips::判断元素member是否存在于集合key。
2.2.4 移动
smove source destination member
Tips::将 mermber 元素从 source集合移到 destination 集合。
2.2.5 查元素总数
scard key
Tips::返回集合key元素总数。
2.2.6 遍历元素
第1次 sscan key 0 #返回集合少量元素和一个游标值cursor 第...次 sscan key cursor #返回集合少量元素和一个游标值cursor1 第n次 sscan key cursor1 #返回集合少量元素和一个游标值0,0表示遍历完毕
2.2.7 交集
sinter key [key ...]
Tips::返回一个所有给定集合的交集,不存在的key表示空集。
sinterstore destination key [key ...]
Tips::将所有给定集合的交集保存至destination集合中。
2.2.8 并集
sunion key [key ...]
Tips::返回一个所有给定集合的并集。
2.2.9 差集
sdiff key [key ...]
Tips::返回一个所有给定集合的差集。
2.3 Sorted Set(有序集合)
2.3.1 增
zadd key [NX|XX] [CH] [INCR] score member [score member ...] #参数 # XX # 只更新已经存在的元素,不添加 # NX # 不更新已经存在的元素,弱不存在则添加 # CH # 将返回值从添加的新元素数量修改为更改位元素总数 # INCR # 当指定此选项时,zadd的行为与zincrby类似
2.3.2 删
zrem key member1 member1
Tips::删除有序集合key中的一个或者多个元素。
2.3.3 查元素总数
zcard key
Tips::获取有序集合key中的元素个数。
2.3.4 查【score】范围元素数
zcount key score1 score2
Tips::获取有序集合key中【score1】-【score2】范围的元素个数。
2.3.5 【score】加/减【n】
zincrby key +/-n member
Tips::把有序集合key中【member】元素的score值+/-n。
2.3.6 查名次
#按score小到大 zrank key member
Tips::获取有序集合key中【member】元素的score排名(从0开始,从小到大)。
#按score大到小 zrevrank key member
Tips::获取有序集合key中【member】元素的score排名(从0开始,从大到小)。
#举例 zadd pp 1 aa 3 bb 5 cc 2 dd 4 ee zrank pp dd (integer) 1 zrevrank pp dd (integer) 3
2.3.7 获取【score】
zscore key member
Tips::获取有序集合key中【member】元素的score值。
2.3.8按排名范围查
#按score小到大 zrange key start stop [WITHSCORES]
Tips::获取有序集合key中score从小到大排名第【start】至【stop】的元素(从0开始)。
#按score大到小 zrevrange key start stop [WITHSCORES]
Tips::获取有序集合key中score从大到小排名第【start】至【stop】的元素(从0开始)。
#举例 zrevrange key start stop [WITHSCORES] zadd pp 1 aa 3 bb 5 cc 2 dd 4 ee zrange pp 0 2 withscores#1) "aa"#2) "1"#3) "dd"#4) "2"#5) "bb"#6) "3" zrevrange pp 0 2 withscores#1) "cc"#2) "5"#3) "ee"#4) "4"#5) "bb"#6) "3"
2.3.9 按【score】范围查
#按score小到大 zrange key start stop [WITHSCORES]
Tips::获取有序集合key中score从小到大排名第【start】至【stop】的元素(从0开始)。
#按score大到小 zrevrange key start stop [WITHSCORES]
Tips::获取有序集合key中score从大到小排名第【start】至【stop】的元素(从0开始)。
#举例 zadd pp 1 aa 3 bb 5 cc 2 dd 4 ee 5 ff 6 gg 7 hh zrangebyscore key min max [WITHSCORES] [LIMIT offset count] #1) "bb" #2) "3" #3) "ee" #4) "4" #5) "cc" #6) "5" #7) "ff" #8) "5" #9) "gg" #10) "6" zrevrangebyscore pp 6 3 withscores #1) "gg" #2) "6" #3) "ff" #4) "5" #5) "cc" #6) "5" #7) "ee" #8) "4" #9) "bb"#10) "3"
2.3.10 按【member】范围查
#查该范围元素 zrangebylex key min max [LIMIT offset count]
Tips:获取值介于【min】至【max】间的元素,min和max参数必须包含 (或[,分别表示开闭区间。
#查该范围元素个数 zlexcount key min max
Tips:获取值介于【min】至【max】间的元素,min和max参数使用 (或[,分别表示开闭区间。
#举例 zrange pp 0 -1 withscores zrangebylex pp (a [ff#1) "aa"#2) "dd"#3) "bb"#4) "ee"#5) "cc"#6) "ff" zlexcount pp (a [ff #(integer) 6
2.3.11 移除范围元素
#按【score】从小到大排名范围移除 zremrangebyrank key start stop
Tips:移除指定排名区间【start】至【stop】元素。
#按【score】值的范围移除 zremrangebyscore key min max
Tips:移除指定score值区间【min】至【max】元素。
#按【member】范围移除 zremrangebylex key min max
Tips:移除指定【member】值区间【min】至【max】元素。
#举例 zadd pp 1 aa 3 bb 5 cc 2 dd 4 ee 5 ff 6 gg 7 hh zremrangebyrank pp 0 2 #(integer) 3 zrange pp 0 -1 withscores #1) "ee" #2) "4" #3) "cc" #4) "5" #5) "ff" #6) "5" #7) "gg" #8) "6" #9) "hh" #10) "7" zremrangebyscore pp 4 6 #(integer) 4 zrange pp 0 -1 withscores#1) "hh"#2) "7" zremrangebylex pp (aa [ii #(integer) 1 zrange pp 0 -1 withscores #(empty array)
2.4 List(列表)
2.4.1 左侧插
lpush key element [element ...]
Tips:在列表左侧插入元素。
2.4.2 左侧出
lpop key
Tips:在列表左侧移出元素。
2.4.3 右侧插
rpush key element [element ...]
Tips:在列表右侧插入元素。
2.4.4 右侧出
rpop key
Tips:在列表右侧移出元素。
2.4.4 左侧出(阻塞)
blpop key [key ...] timeout
Tips:当列表对象不存在,会阻塞客户端 timeout秒。
2.4.5 右侧出(阻塞)
brpop key [key ...] timeout
Tips:当列表对象不存在,会阻塞客户端 timeout秒。
2.4.6 索引查
#单个 lindex key index
Tips:查找索引为【index】位置元素。
#范围 lrange key start stop
Tips:查找索引为【start】至【stop】位置元素。
2.4.7 列表长度
llen key
2.4.8 改
lset key index element
Tips:修改指定索引【index】位置元素的值。
2.4.9 插
linsert key BEFORE|AFTER pivot element
Tips:在pivot(第一个)【之前(之后)】插入元素。
2.4.10 删
lrem key count element
Tips:移除等于【element】的元素,【count>0】表示最大删除数,【count<0】表示从表尾开始搜索,最大删除【|count|】个。
lrange key start stop
Tips:只保留【start】至【stop】区间的元素,其余都删除。
2.5 散列表(哈希)
2.5.1 增
hset key field value [field value ...]
Tips:将key对应的散列中的field域的值设置为value。
hmset key field value [field value ...]
Tips:将key对应的散列中的field域的值设置为value。
hsetnx key field value
Tips:将key对应的散列中的field域的值设置为value(不存在才添加,存在则不添加)。
2.5.2 查
hexists key field
Tips:判断 field 域是否存在。
hget field
Tips:获取单个 field 域的value。
hmget key field [field ...]
Tips:获取批量 field 域的value。
hkeys key
Tips:获取全部的field。
hvals key
Tips:获取全部的value。
hgetall
Tips:获取全部的field-value。
hlen key
Tips:获取key中field的个数。
hscan key cursor [MATCH pattern] [COUNT count]
Tips:用于遍历散列表中所有的field-value对(渐进式遍历)。
2.5.3 删
hdel ha field [field ...]
2.5.4 加
hincrby key field increment
Tips:field对应的value(整数)值加【increment】(可以是负数)。
hincrbyfloat key field increment
Tips:field对应的value(浮点数)值加【increment】(可以是负数)。
2.6 GEO
2.6.1 添加地理坐标
geoadd key longitude latitude member [longitude latitude member ...]
2.6.2 返回标准geohash
geohash key member [member ...]
2.6.3 返回经纬度
geopos key member [member ...]
2.6.4 计算坐标距离
geodist key member1 member2 [m|km|ft|mi]
2.6.5 查找坐标指定范围内其他坐标
georadius key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key] #举例 georadius Wuhan 115.4 40.6 8 km withcoord withdist
2.7 HyperLogLog
2.7.1 添加元素
pfadd key element [element ...]
2.7.2 近似基数
pfcount key [key ...]
Tips:返回近似0.81%误差率的基数,若不存在key返回0。
2.7.3 合并基数
pfmerge destkey sourcekey [sourcekey ...]
2.8 Stream
2.8.1 添加
xadd key ID field value [field value ...] #向 Stream 队列中添加数据
2.8.2 读
xrange key start end [COUNT count] #读取指定 ID 范围的消息数据 xrevrange key start end [COUNT count] #顺序和xrange相反
2.8.2 删
xdel key ID [ID ...] #删除 Stream 队列中一个或多个消息ID对应的数据
2.8.3 消费组
xgroup [CREATE key groupname id-or-$] [SETID key groupname id-or-$] [DESTROY key groupname] [DELCONSUMER key groupname consumername] #参数 #CREATE #创建一个新消费组 #SETID #修改某个消费组消息的last_id #DESTROY #删除指定消费组 #DELCONSUMER #删除指定消费组中某个消费者 #HELP #帮助
2.8.4 从消费组读多条消息
xreadgroup GROUP group consumer [COUNT count] [BLOCK milliseconds] [NOACK] STREAMS key [key ...] ID [ID ...] #参数 #group #消费组名称 #consumer #消费者名称 #COUNT #消费条数 #BLOCK #是否阻塞,milliseconds阻塞秒数 #STREAMS #Stream 队列名称 #ID #读取大于指定消息ID后未确认的消息 #NOACK #该消息不需要确认
2.8.5 从Stream读多条
xread [COUNT count] [BLOCK milliseconds] STREAMS key [key ...] id [id ...] #参数 #COUNT #读取多条 #BLOCK #是否阻塞,milliseconds阻塞秒数 #STREAMS #Stream 队列名称 #ID #读取大于指定消息ID后未确认的消息
2.8.6 确认消息
xack key group ID [ID ...] #参数 #group #消费组名称 #ID #读取大于指定消息ID后未确认的消息
2.8.7 读未确认消息
xpending key group [start end count] [consumer] #参数 #group #消费组名称 #start #范围开始ID #end #范围结束ID #count #读取条数 #consumer #指定的消费者
2.8.8 改未读消息所有权
xclaim key group consumer min-idle-time ID [ID ...] [IDLE ms] [TIME ms-unix-time] [RETRYCOUNT count] [force] [justid] #参数 #consumer #指定的消费者 #min-idle-time #指定消息最小空闲数 #ID #读取大于指定消息ID后未确认的消息 #IDLE #将该消息空闲时间设置为指定毫秒数 #TIME #将该消息空闲时间设置为指定UNIX时间 #RETRYCOUNT #被读取次数重置为指定次数 #force #再待处理条目列表中创建待处理消息条目 #justid #只返回成功认领的消息ID数组
2.8.9 读取消息队列、消费组、消费组信息
xinfo [CONSUMERS key groupname] [GROUPS key] [STREAM key] [HELP] #参数 #CONSUMERS #用于查看某个消费组下消费组信息 #GROUPS #用于查看某个 Stream 队列下消费组信息 #STREAM #用于查看某个Stream队列的整体组信息
2.8.10 缩减消息队列
xtrim key MAXLEN [~] count #说明 #当Stream数据量太大,可以通过此命令缩减 Stream 队列长度 #参数 #~ #模糊裁剪,优化精确裁剪一般用于此模式,效率更好 #= #精确裁剪
3.键操作
3.1 查看属性
object subcommand [arguments [arguments ...]] #说明 #从内部查看传入 key的 Redis对象 #子命令 #help #帮助命令 #refcount #获得指定key关联的值的引用数 #encoding #获得指定关联的值的内部存储使用的编码 #idlettime #返回key的空闲时间,即上次读写之后经历的秒数 #freq #返回key的对数访问频率计数器
3.2 查看类型
type key #返回key对应存储值的类型
3.3 查看过期时间
ttl key #返回key过期时间
3.4 设置过期时间
expire key seconds #设置key过期时间
3.5 删除过期时间
persist key #删除key过期时间
3.6 key重命名
rename key newkey #key重命名为newkey
3.7 更新key最后访问时间
touch key [key ...] #可支持多个,防止淘汰策略删掉了
3.8 查找符合表达式的key
#举例 keys pattern keys * keys red?s#1) redis#2) redxs#3) redzs keys [ix]s#1) redis#2) redxs keys red\[s
3.9 随机取key
randomkey
3.10 删除key
del key [key ...] 同步删除一个或多个key unlink key [key ...] 底层会判断工作量确定是否同步还是异步删除一个或多个key
3.11 序列化/反序列化
dump key restore key ttl serialized-value [REPLACE] [ABSTTL] [IDLETIME seconds] [FREQ frequency]
3.12 移动key
move key db #将key移到另一个数据库,此命令不能用于集群 migrate host port key| destination-db timeout [COPY] [REPLACE] [AUTH password] [KEYS key] #将key迁移到另一个redis实例,一般用于运维迁移数据
3.13 key排序
sort key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [ASC|DESC] [ALPHA] [STORE destination] #说明 #对列表、集合、有序集合元素进行排序 #参数 #BY #使用其他key的值作为权重进行排序,如果其他key不存在则跳过排序 #LIMIT #限定排序返回的元素 #GET #和BY相反 #ASC(DESC) #正序或者倒序 #STORE #将排序后的结果保存到指定key
4.底层数据结构
简单动态字符串双向链表压缩列表哈希表跳表整数集合
发表评论
暂时没有评论,来抢沙发吧~