Redis是非关系数据库,基于内存的数据库,常用于作为缓存数据库。本次文章将讲述该数据库的几种基本类型并掌握其基本类型对应的命令(基于redis-cli)
目录
1.数据类型:分为 字符串,哈希,列表,集合,有序集合 还有最新的流数据类型 (流数据类型后面有专门讲解本章不做多描述)
1.字符串类型(String)
什么是字符串,字符串就是一个键名对应一个键值,比如说一个人的身高对应一个具体的值,并不存在一个人的身高有多个值的情况(命令的大小写都不影响但是尽量大写)
1.创建与获取
set key value --创建字符串
get key -- 获取字符串
2.字符串的修改
incr key -- 返回自加1后的值(注意:只有key对应的value是数字的时候才能进行自加,否则会报错)
decr key-- 返回自减少1后的值(注意:只有key对应的value是数字的时候才能进行自加,否则会报错)
INCRBY KEY NUMBER --指定增加某个数
DECRBY KEY NUMBER --指定减少某个数
INCRFLOAT KEY NUMBER --增加float型的数
(注意:如果increase了并不存在的键名则系统会自动创建一个对应的字符串并且初始值是0)
2.哈希类型(Hash)
哈希类型是一个对象的集合,可以包含对象很多的属性,比如一辆车 有名字 有价格 有速度等等属性,而Car就是哈希的key 而像名字 价格 速度等等这些是key对应的filed(域),即某辆汽车哪个方面(领域),values就是对应的值 比如名字叫“丰田”,价格1200000,速度200
1.创建哈希
HSET KEY FILED VALUES --单个创建
HMSET KEY FILED1 VALUES1 FILED2 VALUES2... -- 多个创建
2.获取哈希某个属性的值
HGET KEY FILED --单个获取
HMGET KEY FILED1 FILED2 ...--多个获取
HGETALL KEY -获取目标key下所有的filed与对应的值
注意这里的 "\xe4\xb8\xb0\xe7\x94\xb0"是unicode编码,想要转为中文需要用到对应解码之后
才能变成中文
3.检测是否存在
HEXIST KEY FILED --检测想要的key对象有没有某个方面比如CAR想要看有没有价格方面信息等等
HSETNX KEY FILED VALUE-- hsetnx(hset if not exist)如果不存在某个方面的情况下,设置某个方面与其值,比如我设置CAR price 10 可以知道 CAR 已经存在对应的price,并且返回值是(integer)0意味着创建失败
4.哈希键的修改
1.HINCRBY FILED VALUES +/-NUMBER--修改某个方面的值比如price ,并且通过值得正负实现是增还是减
2.HDEL key FILED/ FILED2 /FILED3 ...--删除某个方面
5.其它
HKEYS KEY --获取某个键对应的所有方面(域),比如CAR 能获取到其price name 等等
HVALS KEY --与hkeys不同的是,hvals key获取的是某个键对应所有方面的值
HLEN KEY -- 计算并返回某个键名对应有多少个域filed
3.列表类型(list)
当你在听音乐时,你创建了一个播放列表来记录你要播放的歌曲。这个播放列表可以类比为 Redis 的列表类型。开始时,你的播放列表是空的,因为你还没有选择任何歌曲。当你找到一首喜欢的歌曲后,你将它添加到播放列表中,此时列表变为 ["Song A"]。然后,你又找到了其他几首喜欢的歌曲,你可以依次将它们添加到列表中,如 ["Song A", "Song B", "Song C"]。你也可以从左插入Song D 变成["Song D","Song A", "Song B", "Song C"]
1.列表的创建与删除
LPUSH key --即是left push 从左插入,并返回当前列表内元素的个数
RPUSH key --对应的是right push 从右边插入,并返回当前列表内元素的个数
LPOP key --输出列表最左边的值,再将其删除
RPOP key --输出列表最右边的值,再将其删除
LREM key count value --从列表中删除指定数量的匹配元素。
注意LREM key count value中
如果count>0 则意味着从左到右开始删除count 个值为 value的元素
如果count<0 则意味着从右到左开始删除count 个值为 value的元素
2.获取列表以及相关信息
LRANGE KEY 0 -1 --表示从第0个开始,-1(表示全部)输出(从左到右输出)
LRANGE KEY 0 2 --表示从第0个开始,到第2个输出
LINDEX KEY index --获取列表中指定索引位置的元素。
LLEN KEY --获取列表的长度(元素个数)
3.列表的修改
LINSERT key BEFORE|AFTER pivot value --将值插入到列表中某个元素之前或之后
LTRIM key start stop --于修剪(裁剪)列表中的元素范围,使其只保留指定范围内的元素,而删除其他的元素。
4.集合类型(set)
无序、唯一且不重复的数据结构,它可以存储多个不同的元素。具体应用可以比如一个班级的学号,key-》class1 members-》学号
集合的性质
无序性:集合中的元素没有任何特定的顺序,每次获取元素时,元素的顺序都可能发生变化。
唯一性:集合中的元素是唯一的,不会存在重复的元素。
动态性:集合可以随时添加和删除元素。
快速判断成员是否存在:集合类型对于判断某个元素是否存在非常高效,时间复杂度为 O(1),这使得集合在需要快速检查元素是否存在的场景下十分有用。
1.集合的创建删除与查询
SADD KEY MEMBER / MEMBER1 / MEMBER2...--创建集合
SREM KEY MEMBER / MEMBER1 / MEMBER2... --删除集合key中的成员
SMEMBERS KEY --查看集合内key所有的成员
SISMEMBER KEY MEMBER --集合中是否存在
注意集合的无序性,若要使其有序则需要用有序集合类型
2.集合的运算
SDIFF KEY1 KEY2 --集合相减,
举例有两个社团key1 和key2那么当需求社团成员只报了key1社团没有报社团key2时候就可以用集合相减
SINTER KEY1 KEY2--集合取交集
还是如上的例子,当我需要即报名了key1社团和key2社团的成员时候就可以用SINTER KEY1 KEY2 来计算
SUNION KEY1 KEY2--集合取并集
还是例子,当我需求社团key1 和社团key2的成员一起参加活动,统计成员时候就可以用到 SUNION KEY1KEY2
3.其他
SCARD KEY -- 统计key内成员的个数
SDIFFSTORE DESTINATION KEY1 KEY2 ,,,--将两个集合之间取差并将内容保存到一个新的集合destination处,同理可以将SDIFF修改为SINTER SUNION...
SRANDMEMBER KEY COUNT--随机抽取集合内数量为count个成员
有序集合类型(zset)
在集合的基础上加上score分数(必须是数字),根据分数可以进行排位,比如一个班级里面考完一次试,统计时候需要将数据从高到低排位,此时就需要用到有序集合
1.有序集合的创建与查询
ZADD KEY SCORE MEMBER/ SCORE MEMBER 2 ...--创建有序集合
ZSCORE MEMBER --查询某个成员的分数
ZRANGE KEY START END [withscores]--从低到高进行排名 当加上with scores后缀时候不止有对应的成员排名,还会展示成员的分数
ZREVRABFE KEY START END [withscores]--reverse zrange 即对zrange命令的反转就是从高到低进行排名
ZCARD KEY --统计zset内成员的个数
ZCOUNT KEY MIN MAX --统计集合key成员中分数段为[min,max]的成员个数
ZRANK KEY MEMBER --查询某个成员在集合内排第几名
2.有序集合的修改
ZINCRBY KEY INCRESEMENT MEMBER-- 对集合key内成员的score进行操作可以通过最后INCRESEMENT 的+ - 进行增加或者减少
ZREM KEY MEMBER1 / MEMBER2...--删除集合key中的成员member1