Redis 5种数据类型
基于redis5
1:字符串类型
它可以存储任何类型的字符串,包括json字符串,二进制数据,允许最大容量为512MB
1:赋值和取值
set name 123rrr
get name
2:增加指定的整数(可以指定+多少)
INCR count 自动+1
INCRBY count 2 指定加多少
3:减少指定整数(自动-1:指定加多少)
decr count decrby count 2
4:增加浮点数
incrbyfloat count2 0.1
5:向尾部追加值(如果键不存在,就直接设置成追加的值)
append name ss
6:获取字符串长度(中文占3个)
strlen name
127.0.0.1:6379> set name 北京西站
OK
127.0.0.1:6379> strlen name
(integer) 12
7:同时获取多个键
mget count2 name1 name
8:同时设置多个键值对
mset wanfei 123 wanlong 444
2:散列类型(hash)
散列类型(hash)的键值也是一种字典结构,其存储了字段(field)和字段值的映射,但字段值只能是字符串,不支持其他数据类型,一个散列类型键可以包含至多232−1个字段。
1:设置键
hset post:1 title redis入门
hset post:1 created_by 1
2:获取某个字段(获取文章1 的标题)
hget post:1 title
3:获取键的所有字段和值
hgetall post:1
获取所有的键不需要值
hkeys post:1
获取所有的值
hvals post:1
4:获取多个字段的值
hmget post:1 title created_by
5:设置多个字段值
hmset post:1 deleted_at 222 updated_at 333
6:判断键的字段是否存在(不存在返回0)
hexists post:1 title
7:增加字段值数字
hincrby post:1 click 1
8:删除字段
hdel post:1 title click
3:列表类型
列表类型(list)可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素,或者获得列表的某一个片段。列表类型内部是使用双向链表(doublelinkedlist)实现的
借助列表类型,Redis还可以作为队列使用,4.4节会详细介绍。与散列类型键最多能容纳的字段数量相同,一个列表类型键最多能容纳232−1个元素。
1:向列表的左边添加值(添加完会返回列表中现在的个数) (列表中元素是可以重复的)
lpush posts post:1
2:向列表的右边添加值
rpush posts posts:2
3:向列表中添加多个
lpush posts posts:1 post:2 post:3
4:弹出列表中的值(弹出之后列表中就没有这个值了)
左侧的第一个 lpop posts
右侧的第一个 rpop posts
5:获取列表中元素的个数
llen posts
6:获取列表中指定位置到指定位置的元素(获取了不会删除这些)
lrange posts 0 2 redis的下标也是从0开始 一共获取了3个
没有从右边开始截取的命令,但是可以用负数
lrange posts -3 -1
从倒数第3个截取到倒数第一个
lrange posts 0 -1 可以列出所有的键
7:删除元素
lrem posts -2 post:7 从右边找 删除两个元素为post:7的
lrem posts 2 post:1 从左边找 删除两个元素为post:1的
(1)当count>0时LREM命令会从列表左边开始删除前count个值为value的元素。
(2)当count<0时LREM命令会从列表右边开始删除前count个值为value的元素。
(3)当count=0是LREM命令会删除所有值为value的元素
8:获取指定下标的元素
lindex posts 3 左边的第4个下标0
lindex post -3 右边第3个
9:设置下标的元素的值
lset posts 0 post:0 左边第一个
10:只保留某些元素
ltrim posts 0 5 只保留这6个元素,其他全部删除
11:插到指定元素的前面后面
linsert posts after post:5 post:6 从左开始查找post:5元素然后将post:6插到它后头
linsert posts brefore post:5 post:6 从左开始查找post:5元素然后将post:6插到它前面
12:将列表元素移动到宁一个列表中(posts右边第一个移动到postTemp中的左边)
rpoplpush posts postsTemp
4:集合类型 (set)
集合类型的常用操作是向集合中加入或删除元素、判断某个元素是否存在等,由于集合类型在Redis内部是使用值为空的散列表(hashtable)实现的,集合的值不能重复
1:添加
sadd posts post:1
2:删除值
srem posts post:1 post:2
3:获取所有值
smembers posts
4:比较两个集合,找不不一样的值 :场景 找出标签是 JAVA,Golang,Sql 这三个标签的文章
sdiff post:java post:net (post:java 有的post:net 没有的)
sdiff post:java post:net post:php (post:java 有的post:net 没有的,再拿这些不同的值和post:php比较 如果post:php 有就删除,剩下的就是只有post:java有的他们都没有的)
5:计算多个集合的交集
sinter post:java post:net (post:java有的post:net也有的)
sinter post:java post:net post:php (3个都有的)
6:计算几个集合所有的元素不重复
sunion post:java post:net post:php
7:集合的个数
scard post:java
8:将集合运算的结果存到集合中(会返回计算的结果个数)
sdiffstore destination post:java post:net (不同) (存到destination中)
sinterstore destination post:java post:net (交集)
sunionstore destinaction post:java post:net (并集)
9:随机从集合中取出元素(不会删除) (后面是每次随机取出多少个) 如果是-100 而且元素个数还没有100个就会出现重复的
srandmember post:java 1
10:随机弹出某个元素
spop post:java
5:有序集合zset
1 有序集合类型(sortedset)的特点从它的名字中就可以猜到, 2 它与介绍的集合类型的区别就是有序二字。 3 在集合类型的基础上有序集合类型为集合中的每个元素都关联了一个分数, 4 这使得我们不仅可以完成插入、删除和判断元素是否存在等集合类型支持的操作, 5 还能够获得分数最高(或最低)的合可以(通过更改这个元素的分数)。 6 有序集合要比列表类型更耗费内存。 7 有序集合类型算得上是Redis的5种数据类型中最高级的类型了, 8 在学习时可以与列表类型和集合类型对照理解
1:增加修改元素(添加多个,分数-值)
ZADD result 89 Tom 67 Peter 100 David
ZADD result 80 Tom 修改Tom的分数
zadd result +inf ymh 添加一个无限大的值,如果多个的话就按添加的顺序,后加的大
zadd result -inf wlphp 添加一个无限小的值,如果多个的话,先加的小
2:获取元素的分数
zscore result wlphp
3:按顺序找元素
zrange result 0 2 从小到大 第0个到第2个
zrevrange result 0 2 从大到小 最后一个到倒数第3个
zrange result 0 -1 从小到大排列所有的
zrange result 0 -1 withscores 会将分数值一起输出
如果两个元素的分数相同,Redis会按照字典顺序(即0<9<A<Z<a<z这样的顺序) 中文依旧,转成UTF8 编码之后还是这种顺序
4:获取指定分数之间的元素
zrangebyscore result 50 80 (50分到80分的)
zrangebyscore result 50 (80 在分数前加个( 就表示不包含这个值,意思就是大于等于50 小于80分的
zrangebyscore result 50 +inf 50分到无穷大分数,意思就是大于50分的
zrangebyscore result -inf 50 50分到无穷小分数,意思就是小于50分的
zrangebyscore result -inf +inf 无穷小到无穷大, 所有的
5:分页功能(牛皮🐂)
跟mysql 无太大差别 limit offset count 下标,取多少个
zrangebyscore result -inf +inf limit 0 2
zrevrangebyscore result 100 -inf limit 0 2 低于100分的头两人
zrevrangebyscore是把分数按大到小排序的
6:分数++ 比如张安琪很老实给他加个两分,突然狂皮再减去两分
zincrby result 2 zhanganqi
zincrby result -2 zhanganqi
如果指定的元素不存在,Redis在执行命令前会先建立它并将它的分数赋为0再执行操作
7:获取有序集合的元素个数
zcard result
8:获取指定分数范围内元素的个数
zcount result 10 20
9:删除元素
zrem result wlphp ymh
zremrangebyrank result 0 1 按照排名范围删除元素
zremrangebyscore result 10 50 按照分数范围删除元素
10:获取元素排名
zrank result ymh (从小到大)
zrevrank result ymh (从大到小)
11:获取两个有序集合的交集
aggregate min 就会比较两个集合的值去最小的值,max就取最大的值
zinterstore des 2 result1 result aggregate max
zinterstore des 2 result1 result aggregate max weights 0.1 0.5 计算两个结果的交接 都取最大的值 第一个集合的结果*0.1 第二个*0.5,如果权重一个是0.1 一个是1 的话就会都*1
计算有序集合的交集,并将结果保存起来 语法:ZINTERSTORE destination numkeys [WEIGHTS weight weight...] [AGGREGATE SUM | MIN | MAX] destination :代表计算结果保存的地方 Numkeys: 代表你要计算几个集合的交集 WEIGHTS :代表权重,它可以设置每个元素的权重,也就是在每个元素参与计算时,元素的分数会乘以你指定的一个权重。 [AGGREGATE SUM | MIN | MAX]:代表元素如果有交集,是计算它的和、最大值还是最小值。
!!!