wordpress一行多图片,西宁seo快速排名,果洛wap网站建设,音乐主题wordpress文章目录 Redis Key#xff08;键#xff09;操作命令1.redis字符串 (String)案例#xff1a;最常用#xff1a;同时设置/获取多个键值#xff1a;获取指定区间范围内的值#xff1a;数值增减#xff1a;获取字符串长度和内容追加#xff1a;分布式锁#xff1a;getse… 文章目录 Redis Key键操作命令1.redis字符串 (String)案例最常用同时设置/获取多个键值获取指定区间范围内的值数值增减获取字符串长度和内容追加分布式锁getset先get再set 应用场景 2.redis列表 (List)案例左边添加/右边添加/从左边开始遍历按照索引下标获得元素从上到下获取列表中元素个数删除N个值等于v1的元素截取指定范围的值后重新赋值给key源列表 目的列表给下标为index重新赋值已经有值插入的新值 应用场景 3.redis哈希表 (Hash)案例hset/hget/hmest/hmget/hgetall/hdel获取某个key的全部数量在key里面的某个值的keyhkeys/hvalshincrby/hincrfloathsetnx 应用场景 4.redis集合 (Set)案例添加元素遍历集合判断元素是否在集合中删除元素获取元素个数从集合中随机展现设置的数字个数元素元素不删除从集合中随机弹出一个元素并且删除在key1里已存在的某个值将key1存在的值迁移给key2集合运算交、并、差 应用场景 5.redis有序集合 (ZSet/Sorted set)案例向有序集合添加一个元素和该元素的分数获取元素从小到大获取元素从大到小按照分数范围取值获取元素分数获取元素个数删除元素获取指定分数范围内的元素个数获取元素下标顺序获取元素下标逆序 应用场景 6.redis地理空间 (GEO)7.redis基数统计 (HyperLogLog)8.redis位图 (bitmap)9.redis位域 (bitfield)10.redis流 (Stream) Redis Key键操作命令
命令含义keys*查询当前库所有的keyexists key判断某个key是否存在1true 0falsetype key查看key的类型del key删除指定的key数据 1true 0falseunlink key非阻塞删除仅仅将keys从kepspace元数据中删除真正的删除会在后续异步中操作ttl key查看还有多少秒过期-1永远不过期-2表示已过期expire key给指定的key设置过期时间move key dbindex [0-15]将当前数据的key移动到指定的数据库db当中select dbindex切换数据库[0-15] 默认为0dbsize查看当前数据库key的数量flushdb清空当前数据库flushall清除所有数据库
命令不区分大小写但是key区分大小写
1.redis字符串 (String)
String字符串
String是redis最基本的类型一个key对应一个value单值单value
String类型是二进制安全的意思是redis的string可以包含任何数据比如jpg图片或者序列化对象。
string类型是Redis最基本的数据类型一个redis中字符串value最多可以是512M
案例
最常用
set key value / get key
127.0.0.1:6379 set k1 helloworld
OK
127.0.0.1:6379 get k1
helloworldset k1 v1 get 第一次返回旧值 在get返回新值
127.0.0.1:6379 set k1 v1 get
helloworld
127.0.0.1:6379 get k1
v1
127.0.0.1:6379 同时设置/获取多个键值
1.mset key value
127.0.0.1:6379 mset k1 v1 k2 v2 k3 v3
OK2.mget key
127.0.0.1:6379 mget k1 k2 k3
1) v1
2) v2
3) v33.mset/mget/msetnx
注意msetnx 当前key整体不存在才会建立成功 即同时不存在key 设立成功 只要有一个存在 就不会创建成功
127.0.0.1:6379 mset k1 v1 k2 v2 k3 v3
OK
127.0.0.1:6379 mget k1 k2 k3
1) v1
2) v2
3) v3
127.0.0.1:6379 msetnx k1 v1 k4 v4
(integer) 0
127.0.0.1:6379 get k1
v1
127.0.0.1:6379 get k4
(nil)
127.0.0.1:6379 msetnx k5 v5 k6 v6
(integer) 1
127.0.0.1:6379 get k5
v5
127.0.0.1:6379 get k6
v6获取指定区间范围内的值
setrange/getrange
getrange类似于java的substring 只不过redis的范围是闭区间 java是左闭右开区间
127.0.0.1:6379 set k1 abcd1234
OK
127.0.0.1:6379 GETRANGE k1 0 -1
abcd1234
127.0.0.1:6379 GETRANGE k1 0 3
abcd
127.0.0.1:6379 SETRANGE k1 1 xxyy
(integer) 8
127.0.0.1:6379 get k1
axxyy234数值增减
一定是数字才能加减
命令含义INCR KEY数字递增INCRBY key increment增加指定的整数DECR key数字递减DECRBY key decrement减去指定的整数
127.0.0.1:6379 set k1 1
OK
127.0.0.1:6379 INCR k1
(integer) 2
127.0.0.1:6379 get k1
2
127.0.0.1:6379 incr k1
(integer) 3
127.0.0.1:6379 get k1
3
127.0.0.1:6379 INCRBY k1 10
(integer) 13
127.0.0.1:6379 get k1
13
127.0.0.1:6379 DECR k1
(integer) 12
127.0.0.1:6379 get k1
12
127.0.0.1:6379 DECR k1
(integer) 11
127.0.0.1:6379 get k1
11
127.0.0.1:6379 DECRBY k1 10
(integer) 1
127.0.0.1:6379 get k1
1
127.0.0.1:6379 获取字符串长度和内容追加
STRLEN key / APPEND key value
127.0.0.1:6379 set k1 abcd
OK
127.0.0.1:6379 STRLEN k1
(integer) 4
127.0.0.1:6379 APPEND k1 xxxx
(integer) 8
127.0.0.1:6379 get k1
abcdxxxx
127.0.0.1:6379 分布式锁
setnx(set if not exist) key value
setex(set with expire)键单位秒
127.0.0.1:6379 SETEX k1 10 v11
OK
127.0.0.1:6379 ttl k1
(integer) 6
127.0.0.1:6379 setnx k1 v11
(integer) 0
127.0.0.1:6379 getset先get再set
先get出来旧值 再set设置get新值
127.0.0.1:6379 GETSET k1 haha
v11
127.0.0.1:6379 get k1
haha
127.0.0.1:6379 应用场景
例如抖音无限点赞某个视频或者商品点一下增加一次
是否喜欢的文章
2.redis列表 (List)
List列表
Redis列表是简单的字符串列表按照插入顺序排序。你可以添加一个元素到列表的头部左边或者尾部右边
它的底层实际上是个双端列表最多可以包含2^32-1个元素4294967295每个列表超过40亿个元素
主要功能由push/pop等一般用在栈、队列、消息队列等场景。
left、right都可以插入添加
如果键不存在创建新的链表如果键已存在新增内容如果值全移除对应的键也就消失了。
案例
左边添加/右边添加/从左边开始遍历
lpush/rpush/lrange
lpush进来顺序出去顺序逆序
rpush进来顺序出去顺序
127.0.0.1:6379 LPUSH list1 1 2 3 4 5
(integer) 5
127.0.0.1:6379 RPUSH list2 11 22 33 44 55
(integer) 5
127.0.0.1:6379 LRANGE list1 0 -1
1) 5
2) 4
3) 3
4) 2
5) 127.0.0.1:6379 LRANGE list2 0 -1
1) 11
2) 22
3) 33
4) 44
5) 55lpop/rpop
127.0.0.1:6379 LPOP list1
5
127.0.0.1:6379 RPOP list1
1
127.0.0.1:6379 LRANGE list1 0 -1
1) 4
2) 3
3) 2
127.0.0.1:6379 按照索引下标获得元素从上到下
lindex
127.0.0.1:6379 LINDEX list2 0
11
127.0.0.1:6379 LINDEX list2 5
(nil)
127.0.0.1:6379 LINDEX list2 4
55
127.0.0.1:6379 获取列表中元素个数
127.0.0.1:6379 llen list2
(integer) 5删除N个值等于v1的元素
lrem key
127.0.0.1:6379 LPUSH list3 v1 v1 v1 v2 v2 v3 v3 v3
(integer) 8
127.0.0.1:6379 LREM list3 2 v1
(integer) 2
127.0.0.1:6379 LRANGE list3 0 -1
1) v3
2) v3
3) v3
4) v2
5) v2
6) v1
127.0.0.1:6379
截取指定范围的值后重新赋值给key
ltrim key 全闭区间类似substring
127.0.0.1:6379 LRANGE list3 0 -1
1) v3
2) v3
3) v3
4) v2
5) v2
6) v1
127.0.0.1:6379 LTRIM list3 0 3
OK
127.0.0.1:6379 LRANGE list3 0 -1
1) v3
2) v3
3) v3
4) v2
127.0.0.1:6379 源列表 目的列表
rpoplpush
移除列表最后一个元素并将该元素添加到另一个列表返回
源列表rpop
目的列表lpush
127.0.0.1:6379 LRANGE list1 0 -1
1) 4
2) 3
3) 2
127.0.0.1:6379 LRANGE list2 0 -1
1) 11
2) 22
3) 33
4) 44
5) 55
127.0.0.1:6379 RPOPLPUSH list1 list2
2
127.0.0.1:6379 LRANGE list1 0 -1
1) 4
2) 3
127.0.0.1:6379 LRANGE list2 0 -1
1) 2
2) 11
3) 22
4) 33
5) 44
6) 55
127.0.0.1:6379
给下标为index重新赋值
lset key index value
127.0.0.1:6379 LRANGE list2 0 -1
1) 2
2) 11
3) 22
4) 33
5) 44
6) 55
127.0.0.1:6379 LSET list2 0 00
OK
127.0.0.1:6379 LRANGE list2 0 -1
1) 00
2) 11
3) 22
4) 33
5) 44
6) 55
127.0.0.1:6379
已经有值插入的新值
linsert key before/after
127.0.0.1:6379 LINSERT list2 before 55 new
(integer) 7
127.0.0.1:6379 LRANGE list2 0 -1
1) 00
2) 11
3) 22
4) 33
5) 44
6) new
7) 55
127.0.0.1:6379
应用场景
公众号订阅消息
3.redis哈希表 (Hash)
Redis hash是一个String类型的field字段和value值的映射表hash特别适合用于存储对象。
Redis中每个hash可以存储2^32-1键值对40多亿
KV模式不变但是V是一个键值对。即Map String ,MapObject,Object
案例
hset/hget/hmest/hmget/hgetall/hdel
127.0.0.1:6379 HSET user:001 id 11 name z3 age 25
(integer) 3
127.0.0.1:6379 hget user:001 id
11
127.0.0.1:6379 hget user:001 name
z3!-----------------127.0.0.1:6379 hmset user:001 id 12 name L4 age 26
OK
127.0.0.1:6379 HMGET user:001 id name age
1) 12
2) L4
3) 26!-----------------127.0.0.1:6379 HGETALL user:001
1) id
2) 12
3) name
4) L4
5) age
6) 26!-----------------127.0.0.1:6379 hdel user:001 age
(integer) 1
127.0.0.1:6379 HGETALL user:001
1) id
2) 12
3) name
4) L4获取某个key的全部数量
hlen
127.0.0.1:6379 HLEN user:001
(integer) 2
127.0.0.1:6379 HGETALL user:001
1) id
2) 12
3) name
4) L4
127.0.0.1:6379 在key里面的某个值的key
hexists key简单说就是判断这个field存不存在
127.0.0.1:6379 HEXISTS user:001 name
(integer) 1
127.0.0.1:6379 HEXISTS user:001 sex
(integer) 0hkeys/hvals
hkeys获取所有的key
hvals获取所有的value
127.0.0.1:6379 HKEYS user:001
1) id
2) name
127.0.0.1:6379 HVALS user:001
1) 12
2) L4
127.0.0.1:6379 hincrby/hincrfloat
hincrby整数增加
hincrfloat浮点数增加
127.0.0.1:6379 HSET user:001 age 25 score 99.5
(integer) 2
127.0.0.1:6379 HGETALL user:001
1) id
2) 12
3) name
4) L4
5) age
6) 25
7) score
8) 99.5
127.0.0.1:6379 HINCRBY user:001 age 2
(integer) 27
127.0.0.1:6379 HGETALL user:001
1) id
2) 12
3) name
4) L4
5) age
6) 27
7) score
8) 99.5
127.0.0.1:6379 HINCRBYFLOAT user:001 score 100
199.5
127.0.0.1:6379 HGETALL user:001
1) id
2) 12
3) name
4) L4
5) age
6) 27
7) score
8) 199.5
127.0.0.1:6379 hsetnx
不存在则赋值存在了则无效。
127.0.0.1:6379 HSETNX user:001 email 128qq.com
(integer) 1
127.0.0.1:6379 HSETNX user:001 email 12qq
(integer) 0
127.0.0.1:6379 应用场景
迷你的电商系统会采用
4.redis集合 (Set)
Set集合
Redis的Set是String类型的无序集合。集合成员是唯一的这就意味着集合中不能出现重复的数据集合对象的编码可以是intset或者hashtable
Redis中Set集合是通过哈希表实现的所以添加删除查找的复杂度都是O1。
集合中最大的成员数为最多可以包含2^32-14294967295每个集合可存储40亿个成员
案例
添加元素
sadd set member
127.0.0.1:6379 SADD set1 1 1 1 2 2 2 3 4 5
(integer) 5遍历集合
smembers set
127.0.0.1:6379 SMEMBERS set1
1) 1
2) 2
3) 3
4) 4
5) 5
判断元素是否在集合中
sismember set member
127.0.0.1:6379 SISMEMBER set1 x
(integer) 0
127.0.0.1:6379 SISMEMBER set1 2
(integer) 1
127.0.0.1:6379 删除元素
srem set member
127.0.0.1:6379 SREM set1 1
(integer) 1
127.0.0.1:6379 SMEMBERS set1
1) 2
2) 3
3) 4
4) 5
127.0.0.1:6379 获取元素个数
scard set
127.0.0.1:6379 SMEMBERS set1
1) 2
2) 3
3) 4
4) 5
127.0.0.1:6379 SCARD set1
(integer) 4从集合中随机展现设置的数字个数元素元素不删除
srandmember key[x]
从集合中随机选取x个元素
127.0.0.1:6379 SRANDMEMBER set1 2
1) 2
2) 3
127.0.0.1:6379 SRANDMEMBER set1 2
1) 5
2) 4
127.0.0.1:6379 从集合中随机弹出一个元素并且删除
spop key[数字]
127.0.0.1:6379 SMEMBERS set1
1) 2
2) 3
3) 4
4) 5
127.0.0.1:6379 spop set1 2
1) 4
2) 3
127.0.0.1:6379 spop set1 1
1) 5
127.0.0.1:6379 SMEMBERS set1
1) 2
127.0.0.1:6379 在key1里已存在的某个值将key1存在的值迁移给key2
smove key1 key2
就是把key1的某个元素给key2。此时key1删除这个元素key2添加这个元素
127.0.0.1:6379 sadd set2 a b c
(integer) 3
127.0.0.1:6379 SMOVE set1 set2 2
(integer) 1
127.0.0.1:6379 SMEMBERS set1
(empty array)
127.0.0.1:6379 SMEMBERS set2
1) b
2) 2
3) c
4) a
127.0.0.1:6379 集合运算交、并、差
Tep1A-B 属于A但不属于B的集合
sdiff key[key…]
127.0.0.1:6379 SADD A a b c 1 2
(integer) 5
127.0.0.1:6379 SADD B 1 2 3 a x
(integer) 5
127.0.0.1:6379 SDIFF A B
1) b
2) c
127.0.0.1:6379 SDIFF B A
1) x
2) 3
127.0.0.1:6379 Tep2A∪B
sunion key[key…]
127.0.0.1:6379 SUNION A B
1) x
2) b
3) 1
4) 2
5) 3
6) a
7) c
127.0.0.1:6379 Tep3A∩B
sinter key[key…]
127.0.0.1:6379 SINTER A B
1) 1
2) 2
3) a
127.0.0.1:6379 sintercard x key[key…]
x集合个数 假设两个A和B
不返回结果只返回交集的个数
127.0.0.1:6379 SINTERCARD 2 A B
(integer) 3
127.0.0.1:6379 应用场景
1.微信抽奖小程序
2.朋友圈点赞查看同赞朋友
3.QQ推送你可能认识的人
…
5.redis有序集合 (ZSet/Sorted set)
zsetsorted set有序集合
Redis zset和set一样也是string类型元素的集合且不允许重复的成员。
不同的是每个元素都会关联一个double类型的对象redis正是通过分数来为集合中的成员进行从小到大的排序。
zset的成员是唯一的但分数score却可以重复。
zset是通过哈希表实现的所以添加删除查找的复杂度是O1。集合中最大成员数为2^32-1
案例
向有序集合添加一个元素和该元素的分数
127.0.0.1:6379 ZADD zset1 60 v1 70 v2 80 v3 90 v4 100 v5
(integer) 5获取元素从小到大
127.0.0.1:6379 ZRANGE zset1 0 -1
1) v1
2) v2
3) v3
4) v4
5) v5127.0.0.1:6379 ZRANGE zset1 0 -1 withscores1) v12) 603) v24) 705) v36) 807) v48) 909) v5
10) 100获取元素从大到小
127.0.0.1:6379 ZREVRANGE zset1 0 -1
1) v5
2) v4
3) v3
4) v2
5) v1
127.0.0.1:6379 ZREVRANGE zset1 0 -1 withscores1) v52) 1003) v44) 905) v36) 807) v28) 709) v1
10) 60按照分数范围取值
127.0.0.1:6379 ZRANGEBYSCORE zset1 60 90
1) v1
2) v2
3) v3
4) v4
127.0.0.1:6379 获取元素分数
127.0.0.1:6379 ZSCORE zset1 v1
60
127.0.0.1:6379 获取元素个数
127.0.0.1:6379 ZCARD zset1
(integer) 5
127.0.0.1:6379 删除元素
127.0.0.1:6379 ZREM zset1 v5
(integer) 1
127.0.0.1:6379 ZRANGE zset1 0 -1
1) v1
2) v2
3) v3
4) v4
127.0.0.1:6379 获取指定分数范围内的元素个数
127.0.0.1:6379 ZRANGE zset1 0 -1 withscores
1) v1
2) 60
3) v2
4) 70
5) v3
6) 80
7) v4
8) 90
127.0.0.1:6379 ZCOUNT zset1 60 80
(integer) 3
127.0.0.1:6379 ZCOUNT zset1 70 100
(integer) 3
127.0.0.1:6379 获取元素下标顺序
127.0.0.1:6379 ZRANGE zset1 0 -1
1) v1
2) v2
3) v3
4) v4
127.0.0.1:6379 ZRANK zset1 v2
(integer) 1获取元素下标逆序
127.0.0.1:6379 ZREVRANGE zset1 0 -1
1) v4
2) v3
3) v2
4) v1
127.0.0.1:6379 ZREVRANK zset1 v2
(integer) 2应用场景
根据商品销售堆商品进行排序显示
6.redis地理空间 (GEO)
Redis GEO主要用于存储地理位置信息并对存储的信息进行操作包括
添加地理位置的坐标
获取地理位置的坐标
计算两个位置之间的距离
根据用户给定的经纬度坐标来获取指定范围内的地理位置集合
7.redis基数统计 (HyperLogLog)
HyperLogLog是用来做基数统计的算法HyperLogLog的优点是在输入元素的数量或者体积非常大时计算基数所需的空间总是固定且是很小的。
在Redis里面每个HyperLogLog键只需要花费12KB内存就可以计算接近2^64个不同元素的基数。这和计算基数时元素越多耗费内存就越多的集合形成鲜明对比。
但是因为HyperLogLog只会根据输入元素来计算基数而不会存储输入元素本身所以HyperLogLog不能像集合那样返回输入的各个元素。
8.redis位图 (bitmap)
一个字节一个byte8位
00101001
上面由许许多多的小格子组成每一个格子里面只能放1或者0用它来判断Y/N状态简单来说就是每一个小格子就是一个个bit
由0和1状态表现的二进制位的bit数组
9.redis位域 (bitfield)
通过bitfield命令可以一次性操作多个比特位域指的是连续的多个比特位它会执行一系列操作并返回一个响应数组这个数组中的元素对应参数列表中的相应操作的执行结果。
说白了就是通过bitfield命令我们可以一次性对多个比特位域进行操作。
10.redis流 (Stream)
Redis Stream 是Redis 5.0版本新增加的数据结构。
Redis Stream主要用于消息队列MQ,Message QueueRedis本身是有一个Redis发布订阅pub/sub来实现消息队列的功能它想干掉Rabbit MQ和kafka。 但是专业的事情还是交给专业的人做但它有个简单来说发布订阅pub/sub可以分发消息但无法记录历史消息。
而Redis Stream提供了消息的持久化和主备复制功能可以让任何客户端访问任何时刻的数据并且能记住每一个客户端的访问位置还能保证消息不丢失。