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
__EOF__
关于博主:擅长性能、全链路、自动化、企业级自动化持续集成(DevTestOps)、测开等
面试必备:项目实战(性能、自动化)、简历笔试,https://www.cnblogs.com/uncleyong/p/15777706.html
测试提升:从测试小白到高级测试修炼之路,https://www.cnblogs.com/uncleyong/p/10530261.html
欢迎分享:如果您觉得文章对您有帮助,欢迎转载、分享,也可以点击文章右下角【推荐】一下!