目录
目录
一、认识Redis
Redis特征:
二、Redis数据结构介绍
三、Redis的命令
1.Redis通用命令
2.关于String类型的命令
3.关于Hash类型的命令
4.关于List类型的常用命令
5.关于Set类型的常用命令
6.关于SortSet类型的常用命令
四、Redis中的层级关系的key
五、Redis的使用场景
一、认识Redis
Redis诞生于2009年,全称是Remote Dictonary Server,即远程词典服务器,是一个基于内存的键值型NoSQL数据库。
Redis特征:
①.键值型,value支持多种不同数据结构,功能丰富。
②.单线程,每个命令具备原子性。
③.低延迟,速度快(基于内存、IO多路复用、良好的编码)
④.支持数据持久化。
⑤.支持主从集群、分片集群。
⑥.支持多语言客户端(Java、C++等)
Redis是一个开源,内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。
内存的特点:易失性,断电就没了;速度快,内存的io读取速度比硬盘快;成本昂贵,因此,通常内存空间不大。
二、Redis数据结构介绍
Redis是一种键值型数据库,key一般是字符串类型,而value可以是多种类型,类型多样。
其中前五种是基本类型,后三种是特殊类型。
Redis为了方便我们学习,将操作不同数据类型的命令进行了分组,在官网(https://redis.io/commands)中可以查看到不同的命令:
三、Redis的命令
1.Redis通用命令
通用命令是部分数据类型都可以使用的指令,常见的有:
- KEYS: 查看所有的key,不建议在生成环境中使用,因为效率低。
- DEL: 删除一个指定的key。
- EXISTS: 判断key是否存在。
- EXPIRE: 给一个key设置有效期,有效期到了,key就会被自动删除。
- TTL: 查看一个key的剩余有效期。
通过help [command]可以查看一个命令的具体用法,例如:
2.关于String类型的命令
String类型,也就是字符串类型,是Redis中最简单的存储类型。
其value是字符串,不过根据字符串的格式不同,又可以分为3类:
关于String的常用命令如下:
3.关于Hash类型的命令
Hash类型,也叫散列,其value是一个无序字典,类似于Java中的HashMap结构。
String结构是将对象序列化为JSON字符串后存储,当需要修改对象某个字段时很不方便:
KEY | VALUE |
project:user:pojo | {name:"Jack",age:21} |
project:project:pojo | {name:"手机",age:1} |
Hash结构可以将对象中的每个字段独立存储,可以针对单个字段做CRUD:
Hash结构常用命令:
4.关于List类型的常用命令
Redis中的List类型与Java中的LinkedList类似,可以看做是一个双向链表结构。既可以支持正向检索和也可以支持反向检索。
特征也与LinkedList类似:
●有序
●元素可以重复
●插入和删除快
●查询速度一般
常用来存储一个有序数据,例如:朋友圈点赞列表,评论列表等。
List类型的常用命令:
5.关于Set类型的常用命令
Redis的Set结构与Java中的HashSet类似,可以看做是一个value为nul的HashMap。因为也是一个hash表,因此具备与Hashset类似的特征:
无序
元素不可重复
查找快
支持交集、并集、差集等功能
set类型常用命令:
6.关于SortSet类型的常用命令
Redis的Sortedset是一个可排序的set集合,与Java中的TreeSet有些类似,但底层数据结构却差别很大。SortedSet中的每一个元素都带有一个score属性,可以基于score属性对元素排序,底层的实现是一个跳表(SkipList)加 hash表。Sortedset具备下列特性:
可排序
元素不重复
查询速度快
因为Sortedset的可排序特性,经常被用来实现排行榜这样的功能,
SortSet常用命令:
四、Redis中的层级关系的key
Redis没有类似MySQL中的Table的概念,我们该如何区分不同类型的key呢?
例如,需要存储用户、商品信息到redis,有一个用户id是1,有一个商品id恰好也是1,在Redis的同一个库下,如何区分这种不同类型的key呢?
接下来,我们看一下key的结构。
Redis的key允许有多个单词形成层级结构,多个单词之间用' : '隔开,格式如下:
项目名:业务名:类型: id
这个格式并非固定,也可以根据自己的需求来删除或添加词条。
例如我们的项目名称叫project,有user和product两种不同类型的数据,我们可以这样定义key:
◆ user相关的key: project:user:1
◆product相关的key: project:product:1
如果Value是一个Java对象,例如一个User对象,则可以将对象序列化为JSON字符串后存储。
设置完以后,相当于目录结构一样:
五、Redis的使用场景
1,在大型的秒杀库存扣减,app首页流量高峰,很容易将传统的关系型数据库(mysql,oracle等)给压垮
2,还有很多没必要持久化的数据,比如说短信验证码,点赞数等
3,分布式锁
4,分布式缓存(session共享)
5、当系统有性能瓶颈的时候,比如说表里面有2000万条数据,并且这个表访问量还非常大。增加redis缓存就是一个非常适合的场景。(redis的引入是为了减轻数据库的压力,防止大批量的大数据量查询将mysql压垮)