遇一山,过一山,处处有风景;只要勇敢向前,一路尽是繁花盛开。 | (点击查看→)【测试干货】python/java自动化、持续集成、性能、测开、简历、笔试面试等

redis系列(01):redis简介

 

本系列汇总,请查看这里https://www.cnblogs.com/uncleyong/p/10950727.html

出现背景

关系型数据库的不足:数据是存储在磁盘上的,磁盘的 I/O 读写瓶颈会直接影响性能

所以,我们可以用速度更快的内存来存储常用但数据量不算大、且结构简单的数据

这样可以较大程度缓解关系型数据库带来的磁盘 I/O 读写瓶颈

 

什么是非关系型数据库

非关系型数据库也称为NoSQL,NoSQL的全称是Not only SQL

没有表结构,用简单的键值方式来存储数据

相比于关系型数据库,由于其存储结构相对简单,在适用于缓存数据库的场景中,可以获得比较高的效率

Key作为数据检索的唯一标识,value作为数据存储的对象,每一个Value都有一个Key与之关联

 

种类:下图可以看到,redis排第一,其它会接触到的就是Memcached、etcd

 

redis介绍

官网:https://redis.io/docs/about/

Redis是一个开源的内存数据库,功能很强大

主要特点是:

1.支持多种数据结构

 

  

  常用的5种:strings, hashes, lists, sets, sorted sets

  说明:

在redis中,key永远都是string类型,value可以是上面列举的类型

命令不区分大小写,但key和value区分大小写

命令可以通过tab补全,补全的命令都是大写

  

2.线程机制

  4.0之前使用单线程,避免了上下文切换

  4.0以及之后开始慢慢支持多线程,直到redis6/7之后才稳定;多线程可以分摊Redis同步读写I/O的压力,以及充分利用多核CPU资源

3.可持久化

  可以把数据从内存永久存储到磁盘,这样可以防止断电等异常情况下数据丢失等问题

  支持RDB(快照)与 AOF(append-only file,完整记录修改数据的命令)

4.支持 Lua 脚本

  当需要保证原子性的时候需要使用 lua 脚本

  lua 脚本能够保证操作的原子性,即所有的操作当作一个操作,要么全部失败要么全部成功

5.支持分布式锁

  可以保证在分布式部署的应用集群中,同一个方法在同一时间只能被一台机器上的一个线程执行

6.支持事务

7.支持发布/订阅

  功能不如专业的mq强大

8.支持主从复制

9.支持sentinel:自动故障转移

10.提供了多种语言的API(java、python...)

 

相对Memcached的优势

1.Memcached只是提供了数据缓存服务,一旦服务器宕机,之前在内存中缓存的数据也将全部消失,因此可以看出Memcached没有提供任何形式的数据持久化功能,而Redis则提供了这样的功能。

2.Memcached只支持单一的数据结构 Key-Value 形式,而Redis提供了更为丰富的数据存储结构,如Hash和Set等

 

和关系型数据库的比较

1.相比于关系型数据库,由于其存储结构相对简单,因此Redis并不能对复杂的逻辑关系提供很好的支持,然而在适用于Redis的场景中,我们却可以由此而获得效率上的显著提升

2.在同一连接中可以选择打开不同的数据库,然而不同的是,Redis中的数据库是通过数字来进行命名的,缺省情况下打开的数据库为0。如果程序在运行过程中打算切换数据库,可以使用Redis的select命令来打开其他数据库,如select 1,如果此后还想再切换回缺省数据库,只需执行select 0即可

3.在数据存储方面,Redis遵循了现有NoSQL数据库的主流思想,即Key作为数据检索的唯一标识,我们可以将其简单的理解为关系型数据库中索引的键,而Value则作为数据存储的主要对象,其中每一个Value都有一个Key与之关联,这就好比索引中物理数据在数据表中存储的位置。在Redis中,Value将被视为二进制字节流用于存储任何格式的数据,如Json、XML和序列化对象的字节流等,因此我们也可以将其想象为关系型数据库中的BLOB类型字段。由此可见,在进行数据查询时,我们只能基于Key作为我们查询的条件,当然我们也可以应用Redis中提供的一些技巧将Value作为其他数据的Key

 

posted @ 2023-12-04 20:08  全栈测试笔记  阅读(167)  评论(0编辑  收藏  举报
浏览器标题切换
浏览器标题切换end