Redis概述
-
redis是一个开源的key-value存储系统
-
和Memcached类似,它支持存储的value类型相对较多redis支持的数据类型:字符串(String)、列表(list)、集合(set)、哈希结构(hash)、有序集合(zset),在redis6新版本中,添加了对Bitmaps、Geospatial、HyperLogLog类型的支持
-
这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的
-
在此基础上,Redis支持各种不同方式的排序
-
与memcached一样,为了保证效率,数据都是缓存在内存中的
-
区别是Redis或周期性的把更新的数据写入到磁盘中,或者把修改操作记录追加到记录文件中
-
redis还有master-slave(主从)同步
基本知识点redis默认端口号6379的由来:有个 Alessia Merz的意大利舞女、女演员,Merz字符在九宫格的键盘上,分别对应的数字就是6379.
redis默认提供了16个库,下标由0~15进行编号,默认使用0号库,可以通过select index 切换库
NoSql:
NoSql(Not Only SQL)意思是不仅仅是sql,泛指非关系型数据库。
NoSql不依赖业务逻辑方式存储,而是以简单的key - value 模式存储,因此大大增加了数据库的扩展能力,有一下特点
- 不遵循SQL标准
- 不支持ACID
- 远超过SQL的性能
使用场景
- 对数据的高并发的读写
- 海量数据的读写
- 对数据的高可扩展性
不适用场景
- 需要事务支持
- 基于Sql的结构化查询存储,复杂的关系
redis单线程+多路IO复用:
多路复用指使用一个线程来检查多个文件描述符(Socket)的就绪状态,比如调用select和poll函数,传入多个文件描述符,如果有一个文件描述符就位,则返回,否则阻塞直到超时。得到就绪状态后进行真正的操作可以在同一个线程里执行,也可以启用线程执行(比如使用线程池)就是说多路IO复用起到一个监视的效果,就绪后,Redis直接执行,不需要等待
例如火车站买票场景:
黄牛买票,是单线程,而多路复用体现在a、b、c三个人,他们只需要将需求告诉黄牛,在等待的同时,可以自己做其他事情。多路IO复用有select,poll,epoll这些模式。select监测数量能力有限,只能监测1024个。poll监测数量没有限制,但是需要一个一个核查。配epoll监测数量没有限制,也不需要一个一个核查,直接看是否有一个正确的标识。