Redis
1.什么是NoSql,好处是什么?
在本次青训营项目中,一个常用的组件就是redis,因此这里整理一下redis的使用场景、基础定义、基本数据结构以及使用方法。一个扎实的基础是好项目的开始。
- 定义:非关系数据库,与传统sql相比方便扩展,大数据量高性能,且数据类型多样不需要艰难的事先设计数据库。
- 特点:
(1)非结构化:不具有统一的结构类型,例如Redis(键值类型)、MongoDB(文档类型)、HBase(列类型)、Neo4j(Graph类型)
(2)无关联:数据库不会帮助维护数据之间的关系
(3)非sql语句:没有严格的查询语法,比较灵活
(4)BASE:不具有完全的ACID事务特性
- 与Sql数据库之间的区别:
(1)除了上述四个特点与之不同外,SQL大部分在磁盘中,而NoSql存储在内存中,查询性能高
(2)扩展性上SQL的是垂直的,NoSql是水平的。数据天然支持分布式的扩展
(3)Sql的数据结构固定、业务对安全性、一致性要求高;NoSql数据结构不固定,对一致性、安全性要求报告,对性能要求高。
2.Redis的定义是什么?
- 定义:Redis全称Remote Dictionary Server(远程字典服务器),是一个基于内存的键值型NoSql数据库。
特征:
(1)键值型,value支持多种不同数据结构
(2)单线程执行命令,每个命令具备原子性。
(3)低延迟、速度快(基于内存、IO多路复用、c编码)
(4)支持数据持久化(定期将数据持久化到磁盘)
(5)支持主从集群(主从读写分离提高速度、从节点备份提高安全性)、分片集群(数据拆分水平扩展)
(6)支持多语言客户端
3.Redis的数据结构与操作有哪些?
- Redis中的数据结构如下,具体的命令可以在官网查看到:
其中五个基本类型及其命令最常用,三个特殊类型在一些特定应用中会使用。具体的使用会在后面来说,这里就不废话了。
- Redis命令中Key的层级结构需要单独说一下:redis中由于没有table的概念,因此使用key的层级结构区分不同类型的key。
例如我们的项目名称叫 heima,有user和product两种不同类型的数据,我们可以这样定义key(如果Value是一个Java对象,例如一个User对象,则可以将对象序列化为JSON字符串后存储):
| KEY | VALUE |
|---|---|
| cache:user:1 | {"id":1, "name": "Jack", "age": 21} |
| cacge:product:1 | {"id":1, "name": "小米11", "price": 4999} |
一旦我们向redis采用这样的方式存储,那么在可视化界面中,redis会以层级结构来进行存储,形成类似于这样的结构,更加方便Redis获取数据
- 还有需要单独说的一点是Redis中的String与Hash类型存储的差别:
Hash类型的value是一个无序字典,类似于Java中的HashMap结构。String结构是将对象序列化为JSON字符串后存储,当需要修改对象某个字段时很不方便:
Hash结构可以将对象中的每个字段独立存储,可以针对单个字段做CRUD:
综上所述的基本概念了解以后,就可以先进行简单代码的实战操作了。