redis笔记| 青训营

63 阅读3分钟

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中的数据结构如下,具体的命令可以在官网查看到:

image.png

其中五个基本类型及其命令最常用,三个特殊类型在一些特定应用中会使用。具体的使用会在后面来说,这里就不废话了。

  • Redis命令中Key的层级结构需要单独说一下:redis中由于没有table的概念,因此使用key的层级结构区分不同类型的key。

例如我们的项目名称叫 heima,有user和product两种不同类型的数据,我们可以这样定义key(如果Value是一个Java对象,例如一个User对象,则可以将对象序列化为JSON字符串后存储):

KEYVALUE
cache:user:1{"id":1, "name": "Jack", "age": 21}
cacge:product:1{"id":1, "name": "小米11", "price": 4999}

一旦我们向redis采用这样的方式存储,那么在可视化界面中,redis会以层级结构来进行存储,形成类似于这样的结构,更加方便Redis获取数据

image.png

  • 还有需要单独说的一点是Redis中的String与Hash类型存储的差别:

Hash类型的value是一个无序字典,类似于Java中的HashMap结构。String结构是将对象序列化为JSON字符串后存储,当需要修改对象某个字段时很不方便:

image.png

Hash结构可以将对象中的每个字段独立存储,可以针对单个字段做CRUD:

image.png 综上所述的基本概念了解以后,就可以先进行简单代码的实战操作了。