Redis学习笔记-数据类型和操作(动手试试)

网友投稿 945 2022-11-09

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

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.底层数据结构

简单动态字符串双向链表压缩列表哈希表跳表整数集合

上一篇:软件测试培训之软件性能的关注点
下一篇:软件测试培训之压测中为什么TPS上不去的原因
相关文章

 发表评论

暂时没有评论,来抢沙发吧~