一、Redis入门
1.1 初识Redis
1.1.1 认识NoSql(SQL与NoSQL的对比)
![](https://i-blog.csdnimg.cn/blog_migrate/c0584003c082453642eb147abe60a69c.png)
![](https://i-blog.csdnimg.cn/blog_migrate/9808799acc21e2735c45a09d855f5a21.png)
![](https://i-blog.csdnimg.cn/blog_migrate/c53e9b41c33484ddd9a24642f414e55d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/5448e3fdf69a9b4fd4f70806b5a1f46f.png)
ACID确保了数据库事务的可靠性和一致性。而在Java中,base(即"Basically Available, Soft state, Eventually consistent")是一种松散的事务处理模型,它放宽了ACID的一致性要求,允许在分布式系统中的不同节点之间存在一定的延迟和数据不一致的情况。这样可以获得更高的可用性和性能,但牺牲了一致性的强度。
![](https://i-blog.csdnimg.cn/blog_migrate/13f6c2344e85a07be6783c6c80e62cd5.png)
1.1.2 认识Redis
Redis诞生于2009年全称是Remote Dictionary Server,远程词典服务器,是一个基于内存的键值型NoSQL数据库。
![](https://i-blog.csdnimg.cn/blog_migrate/bc842109670a1afeaa54a95d7ced7128.png)
特征:
- 键值(key-value)型,value支持多种不同数据结构,功能丰富
- 单线程,每个命令具备原子性
- 低延迟,速度快(基于内存、IO多路复用、良好的编码)。
- 支持数据持久化
- 支持主从集群、分片集群
- 支持多语言客户端
主从集群(Master-Slave Cluster)是一种数据库集群架构,其中有一个主节点(Master)和多个从节点(Slaves)。主节点负责处理写操作(数据的插入、更新、删除),从节点负责处理读操作(查询数据)。主节点将写操作的结果同步到从节点上,从节点与主节点保持一致,以提供高可用性和读取的负载平衡。
分片集群(Sharded Cluster)是一种数据库集群架构,用于处理大规模数据的存储和查询。在分片集群中,数据被分成多个片(Shard),每个片分布在不同的节点上。每个节点可以容纳多个片。同时,分片集群还包括一个路由层(Router),负责将查询请求路由到相应的片上,以实现查询的并行和负载均衡。
通过使用主从集群和分片集群,可以提高数据库的可扩展性、高可用性和性能。主从集群可以减轻主节点的压力,提高读取的吞吐量;而分片集群可以使大规模数据分布在多个节点上,支持并行查询,提高查询性能。
1.2 Redis常见命令
1.2.1 Redis数据结构
![](https://i-blog.csdnimg.cn/blog_migrate/19fe810f081559b738c33f379d901568.png)
1.2.2 Redis通用命令
通用指令是部分数据类型的,都可以使用的指令,常见的有:
- KEYS:查看符合模板的所有key
- DEL:删除一个指定的key
- EXISTS:判断key是否存在
- EXPIRE:给一个key设置有效期,有效期到期时该key会被自动删除
- TTL:查看一个KEY的剩余有效期(time to live)
1.2.3 String类型
String类型,也就是字符串类型,是Redis中最简单的存储类型。
其value是字符串,不过根据字符串的格式不同,又可以分为3类:
- string:普通字符串
- int:整数类型,可以做自增、自减操作
- float:浮点类型,可以做自增、自减操作
不管是哪种格式,底层都是字节数组形式存储,只不过是编码方式不同。字符串类型的最大空间不能超过512m.
KEY |
VALUE |
msg |
hello world |
num |
10 |
score |
92.5 |
String的常见命令有:
SET:添加或者修改已经存在的一个String类型的键值对
GET:根据key获取String类型的value
MSET:批量添加多个String类型的键值对(Multi)
MGET:根据多个key获取多个String类型的value
INCR:让一个整型的key自增1
INCRBY:让一个整型的key自增并指定步长,例如:incrby num 2 让num值自增2
INCRBYFLOAT:让一个