1. Rdeis是什么
Redis是完全开源免费的,遵守BSD协议,是一个高性能的key - value数据库Redis与其他key - value缓存产品有以下三个特点:
Redis支持数据持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。Redis不仅仅支持简单的key - value类型的数据,同时还提供list, set, zset, hash等数据结构的存储Redis支持数据的备份,即master - slave模式的数据备份
2. 为什么要使用Redis
在我们日常的开发中,无不都是使用数据库来进行数据的存储,由于一般的系统任务中通常不会存在高并发的情况,所以这样看起来并没有什么问题,可是一旦涉及大数据的需求,比如一些商品抢购的情景,或者是主页访问量瞬间较大的时候,单一使用数据库来保存数据的系统会因为面向磁盘,磁盘读/写速度比较慢的问题而存在严重的性能弊端,一瞬间成千.上万的请求到来,需要系统在极短的时间内完成成千上万次的读/写操作,这个时候往往不是数据库能够承受的,极其容易造成数据库系统瘫痪,最终导致服务宕机的严重生产问题
我们在碰到需要执行耗时特别久,且结果不频繁变动的SQL,就特别适合将运行结果放入缓存。这样,后面的请求就去缓存中读取,使得请求能够迅速响应redis的速度:单机读可达10000次/s写可达5000/s
mysql经过了这么多年优化才1000次/S,500次/S
3. redis优势?
redis是操作内存,操作速度自然比mysql的磁盘操作要快太多了
redis单线程+多路I/O复用模型
3.1 单线程
单线程的模式解决了数据存储的顽疾:数据并发安全,任何运行多线程同时访问数据库都会存在这个问题,所以才有了mysql的mvcc和锁,Memcached 的cas乐观锁,来保证数据不会出现并发导致的数据问题,但是redis使用单线程就不存在这个问题: 1,单线程足够简单,无论在redis的实现还是作为调用方,都不需要为数据并发提心吊胆,不需要加锁。2.不会出现不必要的线程调度, 你知道多线程,频繁切换上下文,也会带来很多性能消耗
什么是切换上下文?
线程每次执行需要把数据从主内存读到工作内存,然而当线程被调度到阻塞的时候,这些工作内存的数据需要被快照到线程.上下文中,其实就是一个记录各个线程状态的存储结构,等到线程被唤醒的时候,再从上下文中读取,称之为上下文切换;减少上下文切换操作,也是使用单线程的奥妙
3.2. 多路1/O复用模型
这里“多路”指的是多个网络连接,“复用”指的是复用同一个线程
我们使用单线程的方式是无法发挥多核CPU性能,不过我们可以通过在单机开多个Redis实例来完善