此篇仅为个人初期学习笔记,如有错误请xdm指正
在了解了Redis之后,必然会去探索如何使用它,每种语言都会有自己的语法规范,下面要我们一起学习Redis的数据结构与通用语法及其指令
Redis是key-value数据库,键一般是String类型,但是值可以是多种类型
通用指令是全部数据类型都可以使用的指令,常见的有:
通过**help [command]**可以查看一个命令的具体用法,举例如下:
String类型,也即字符串类型,是Redis中最简单的存储类型。
其Value是字符串,有三类:
不管是哪种类型,底层使用的都是字符数组来存储,只是不同的类型使用不同的编码方式。字符串类型的最大空间不得超过512mb.
常见指令:
特殊场景
Redis没有MySQL的Table概念,那如何存储同名不同意的key呢?
Redis是通过一种key的结构来解决这个问题的
key的结构(多个单词形成层级结构,不同层用冒号隔开):
项目名:业务名:类型:id
这个格式不是固定的,可以根据业务需求进行增删
例如,我们的项目名叫做xbxbc,有user和product俩种不同类型的数据,可以这样定义key:
如果value是对象类型,可以将它转成json字符串然后再存储
Hash类型,也叫做散列,其值的存储是无序的,类似于Java中的HahMap结构
String类型,将对象转成JSON对象然后存储,需要修改某个字段时,非常麻烦
Hash类型完美解决了这个问题,它将对象每个属性拆分存储,可以针对特定字段进行CRUD
类比Java中的LinkedList类型,Redis中的List类似可以看作一个双向链表。支持正向和反向索引。
特性:
常用来存储一个有序数据,例如:朋友圈点赞列表,评论列表等。
分析:以下问题只需要抓住一个关键点,那就是数据进去和出去的方向是否一致,因为只有俩个方向
类比Java的HashSet,可以把Set看作是一个value为null的HashMap。因为也是hash表,也具备HashSet类似的特征:
将下列数据用Redis的Set集合来存储:
•张三的好友有:李四、王五、赵六
•李四的好友有:王五、麻子、二狗
利用Set的命令实现下列功能:
计算张三的好友有几人
计算张三和李四有哪些共同好友
查询哪些人是张三的好友却不是李四的好友
查询张三和李四的好友总共有哪些人
判断李四是否是张三的好友
判断张三是否是李四的好友
将李四从张三的好友列表中移除
# 创建set集合存储数据
SADD zs lisi wanwu zhaoliu
SADD ls wanwu mazi ergou
#计算张三的好友有几人
SCARD zs
#计算张三和李四有哪些共同好友
SINTER zs ls
#查询哪些人是张三的好友却不是李四的好友
SDIFF zs ls
#查询张三和李四的好友总共有哪些人
SUNION zs ls
#判断李四是否是张三的好友
SISMEMBER ls zs
#判断张三是否是李四的好友
SISMEMBER za ls
#将李四从张三的好友列表中移除
SREM zs ls
Redis的SortedSet是一个可排序的set集合,于Java中的TreeSet有些类型,但底层数据结构却差别较大。SortedSet中的每一个元素都带有一个score属性,可以基于score属性对元素进行排序,底层的实现是一个跳表(SkipList)加hash表。
SortedSet具备的特性:
因为SortedSet的可排序功能,经常被用来实现排行榜这样的功能
**注意:**所有的排名默认都是升序,如果要降序就在命令的Z后面添加REX即可
将班级的下列学生得分存入Redis的SortedSet中:
Jack 85, Lucy 89, Rose 82, Tom 95, Jerry 78, Amy 92, Miles 76
•并实现下列功能:
•删除Tom同学
•获取Amy同学的分数
•获取Rose同学的排名
•查询80分以下有几个学生
•给Amy同学加2分
•查出成绩前3名的同学
•查出成绩80分以下的所有同学
#将班级的学生得分存入Redis的SortedSet中
ZADD scores 85 Jack 89 Lucy 82 Rose 95 Tom 78 Jerry 92 Amy 76 Miles
删除Tom同学
ZREM scores Tom
#获取Amy同学的分数
ZSCORE scores Amy
#获取Rose同学的排名
ZRANK scores Rose
#查询80分以下有几个学生
ZCOUNT scoures 0 80
#给Amy同学加2分
ZINCRBY scores 2 Amy
#查出成绩前3名的同学
ZRANGE scores 0 2
#查出成绩80分以下的所有同学
ZRANGEBYSCORE scores 0 80