目录
redis存储数据的模式
一般情况下,都是以 key value的模式进行存储的。
这种存储的结构类似于哈希表(HashMap);
但是redis不同于哈希表的地方在于:
redis的key只可以是string类型;value可以是其他数据结构。
而HashMap的key和value都可以是任意的数据结构。
对于value的类型,有字符串,哈希表,列表,集合,有序集合等数据结构的类型
而操作这些不同的数据结构,就会用到不同的命令。
常用基本命令
一、set
用法:set 【key】 【value】
在这里面,key和value都是字符串;由用户手动输入key和value的值;
当敲回车之后提示OK说明已经设置成功了;
二、keys pattern
pattern为包含特殊符号的字符串;
keys +字符串当中携带问号
例如:keys h?llo
?只能匹配一个字符;因此返回的字符可能是:hello/hallo等;就是问好只能占据一个字符;
keys +字符串当中携带*号
例如:当输入:keys h*llo的时候
返回的内容可能是:heeeeello;habcdllo也是就*可以代替若干个字母
keys + 【^+字母】
这种情况,是为了排除某个字母设置的。
keys +*
查询当前服务器上面的所有key
三、exists
判定key是否存在
用法:exists +key的名称:返回key存在的个数
假如一个key hello存在,那么 exists + hello就会返回1.
假如一个key hello,hallo存在;那么 exists +hello+hallo 就会返回2.
四、del
删除某个key.
del +key的名称:删除某一个key;删除成功返回1;
del +key1 +key2:删除key1和key2;删除成功返回2;
五、expire
expire的作用是给指定的key设定过期时间;key超出了指定的时间就会自动失效..
expire +key + seconds;设置成功返回1,设置失败返回0.
seconds为key有时效的秒数.
5.1 ttl命令
这个命令是为了判断一个key的剩余过期时间是多少;
ttl+key:返回某个key的剩余过期时间
如果返回-1说明没有设置过期时间;
如果返回-2说明已经过期;
5.2key删除策略
5.2.1惰性删除
key的过期时间到了,但是还没有删除,key还存在;当最后一次访问这个key的时候发现已经过期了就删除;
5.2.2定期删除
定期删除策略,并不一定是在一定时间内删除所有的key,而是每次抽取一部分的key,进行过期时间验证,也就是类似于一个抽查的过程;因为redis是单线程的程序,因此不太好一次遍历所有的key;否则容易造成宕机。
六、type
type+key的类型:返回当前的key的数据类型是什么;
key的数据类型
string
set key value ex +key有效的时间(设置某个key有效时间为10秒)
set key1 vlaue1 NX(某个key1不存在才设置,如果存在就返回nil)
set key2 value2 XX (某个key2存在才设置,存在则设置失败)
get key3:只支持字符串类型的value
incr:自增1,仅限数字类型
令某一个key增加1:
set key 10
incr key
get key:返回11;
incr操作的key如果不存在,那么就当作自增1来表示。
incrby key +一个具体的数量
对于某一个key的value增加10.
decr key
针对某一个数值的key执行-1操作.
incrbyfloat key +一个值
对于某一个key自增对应的一个值
append
set key hello;
append key world;==> key变成了:hello world
getrange key +start +end
getrange helloworld +0+-1
含义:截取这个字符串的从左边开始的第一个元素到从右边开始的第一个元素之间的字符串;
返回:helloworld;
getrange helloworld +1+-2
含义:截取这个字符串的从左边开始的第二个元素到从右边开始的第二个元素之间的字符串;
返回内容:elloworl
setrange key start+替换的字符串
setrange +helloworld + 1 +aaa
含义就是:从左往右的1号元素开始,也就是从字母e开始,往后替换三个字符为aaa.
==>haaaoworld
strlen key
返回的是key的长度==>包含的字符长度
hash
每一个hash类型的key,都是按照这样的结构存储的;在上图当中,key的名称是name1;
在这个key下面有好几个键值对:key-value;
hset key file1 value1
对于key设置:file1+value1
hget key file1
对于key,获取到file1的value是多少
hexists key file1
对于key,判断其中的file1属性是否存在
hdel key file1
删除的是key当中的file1
hkeys key
获取到key当中的所有hash的键;
list
lpush
lpush key 1 2 3 4==>含义是:使用头插法插入:1 2 3 4;因此执行完之后;在这个key当中元素的顺序是: 4,3,2,1
lrange
lrange key start end
这一个命令,相当于对于key做了一个截取操作,start的位置为从左往右的元素下表,end的位置为从从右往左的第一个元素下标;
rpush
rpush key 1 2 3 4
这样,相当于尾插;这个时候key当中的元素存储顺序为:1 2 3 4;
lpop
从list左侧取出元素,相当于头删;
lindex
lindex + key:返回的是下标对应的元素:如果一个list当中存在下面的元素:
1,2,3,4,5,6,7,8;
那么 lindex key 3==>返回的就是元素4;负数同理,从右往左计算索引。
llen key
返回key当中的list个数。
set
类似于JAVA当中的hashset数据结构;元素是无序的,并且不可以重复;
Set的常见操作
二.SET命令
集合的元素,代表 member
SADD命令
往集合当中添加元素,返回添加成功的元素个数。
语法: SADD key member [member,member,...]
SMEMBERS 命令
展示集合当中元素
语法 :SMEMBERS key
SISMEMBER 命令
判断一个元素在不在set当中
语法:SISMEMBER key member
SPOP命令
一般表示从末尾删除元素,但由于set集合是无序的,此处是随机删除COUNT 个元素。
语法:pop key [count]
SRANDMEMBER命令
随机获取集合当中的count个元素。
语法:srandmember key [count]
SMOVE 命令
将一个元素从源set(source)取出,并且放入目标的set集合(destination)
语法:SMOVE SOURCE DESTINATION MEMBER
SREM 命令
将集合set删除元素,一次删除多个个member
语法:srem key member [member ...]
集合之间的操作:交、并、差集
交集命令:SINTER key [key,key,...] 或者 SINTERSTORE DESTINATION key [key,key,...] 把结果放在DESTINATION当中。
并集命令:SUNION key [key ,...] 或者 SUNIONSTORE DESTINATION key [key,key,...] 把结果放在DESTINATION当中。
差集命令:SDIFF key [key ,...] 或者 SDIFFSTORE DESTINATION key [key,key,...] 把结果放在DESTINATION当中。
zset
Redis的zset数据类型,即有序集合(Sorted Set),是一种非常特别且有用的数据结构。以下是对zset数据类型的详细介绍及其常见操作的归纳:
一、zset数据类型概述
-
特性:
- zset是Redis中字符串类型元素的集合,且集合中的成员是唯一的,不允许重复。
- 每个成员都会关联一个double类型的分数(score),这个分数用于对集合中的成员进行排序。分数可以重复。
- 集合中的成员会根据分数从小到大进行排序,如果分数相同,则按照字典顺序排序。
-
底层实现:
- 在Redis的早期版本中,zset的底层数据结构可以是压缩列表(zipList)或跳表(skipList)。
- 当有序集合的元素个数小于一定数量(如128个)且每个元素的值小于一定字节数(如64字节)时,Redis会使用压缩列表作为底层数据结构。
- 当不满足上述条件时,Redis会使用跳表作为底层数据结构。
- 在Redis 7.0及更高版本中,压缩列表数据结构已经被废弃,改由listpack数据结构实现。
二、zset的常见操作
-
添加元素:
- 使用
ZADD
命令向zset中添加一个或多个元素,并指定它们的分数。 - 语法:
ZADD key score1 member1 [score2 member2 ...]
- 使用
-
获取元素:
- 使用
ZRANGE
命令获取zset中指定排名范围内的元素,可以选择是否同时返回分数。 - 语法:
ZRANGE key start stop [WITHSCORES]
- 类似地,
ZREVRANGE
命令可以获取zset中指定排名范围内的元素,但按分数从高到低排序。
- 使用
-
获取元素数量:
- 使用
ZCARD
命令获取zset中元素的数量。 - 语法:
ZCARD key
- 使用
-
获取元素排名:
- 使用
ZRANK
命令获取元素在zset中的排名(从0开始,按分数从小到大排序)。 - 语法:
ZRANK key member
- 类似地,
ZREVRANK
命令可以获取元素在zset中的排名,但按分数从高到低排序。
- 使用
-
获取元素分数:
- 使用
ZSCORE
命令获取元素的分数。 - 语法:
ZSCORE key member
- 使用
-
删除元素:
- 使用
ZREM
命令从zset中删除一个或多个元素。 - 语法:
ZREM key member [member ...]
- 使用
-
为元素分数增加增量:
- 使用
ZINCRBY
命令为元素的分数加上指定的增量。 - 语法:
ZINCRBY key increment member
- 使用
-
按分数范围获取元素:
- 使用
ZRANGEBYSCORE
命令获取zset中分数在指定范围内的元素,可以选择是否同时返回分数。 - 语法:
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
- 类似地,
ZREVRANGEBYSCORE
命令可以获取zset中分数在指定范围内的元素,但按分数从高到低排序。
- 使用
-
按分数范围删除元素:
- 使用
ZREMRANGEBYSCORE
命令删除zset中分数在指定范围内的元素。 - 语法:
ZREMRANGEBYSCORE key min max
- 使用
-
按排名范围删除元素:
- 使用
ZREMRANGEBYRANK
命令删除zset中指定排名范围内的元素。 - 语法:
ZREMRANGEBYRANK key start stop
- 使用
-
交集和并集操作:
- 使用
ZINTERSTORE
命令计算多个zset的交集,并将结果存储在新的zset中。可以指定每个zset的权重和聚合方式。 - 语法:
ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE sum|min|max]
- 使用
ZUNIONSTORE
命令计算多个zset的并集,并将结果存储在新的zset中。同样可以指定权重和聚合方式。
- 使用