一.Redis
redis 全称:remote dictionary server
存储系统:
RDBMS关系型数据库:MYSQL / SQLSERVER
NOSQL非关系型数据库:REDIS/MEMCACHED/MongoDB/HBase
NEWSQL:NewSQL是对所有新型可扩展、高性能数据库的简称NewSQL能够结合传统关系型数据库和NoSQL的优势,且容易横向扩展。
1.1.redis与memcached的区别
如果简单地比较Redis与Memcached的区别,大多数都会得到以下观点:
1.Redis不仅仅支持简单的k/v(key、value)类型的数据,同时还提供list,set,hash等数据结构的存储。
2.Redis支持数据的备份,即master-slave模式的数据备份,redis通过SENTINEL哨兵来进行主从的切换,redis在3.0 开始支持redis cluster (集群),但是可能并不完善
3.Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。在Redis中,并不是所有的数据都一直存储在内存中的。这是和Memcached相比一个最大的区别。
另外:redis单线程,memcached多线程(可以使用多核cpu)
Redis组件:
- redis-server redis的服务端
- redis-cli redis的客户端
command line interface - redis-benchmark(压力测试工具)
- redis-check-dump & redis-check-aof(检查redi持久化工具)
corrupted RDB/AOF file utilities
1.2.redis 持久化
Redis只会缓存所有的key的信息,如果Redis发现内存的使用量超过了某一个阀值,将触发swap的操作,Redis根据“swappability = age*log(size_in_memory)”计算出哪些key对应的value需要swap到磁盘。然后再将这些key对应的value持久化到磁盘中,同时在内存中清除。这种特性使得Redis可以保持超过其机器本身内存大小的数据。当然,机器本身的内存必须要能够保持所有的key,毕竟这些数据是不会进行swap操作的。
同时由于Redis将内存中的数据swap到磁盘中的时候,提供服务的主线程和进行swap操作的子线程会共享这部分内存,所以如果更新需要swap的数据,Redis将阻塞这个操作,直到子线程完成swap操作后才可以进行修改。
Redis 并发相关介绍:
1 Million small key → string value pairs use ~100MB of memory
Single threaded – but cpu should not to be the bottleneck
Average linux system can deliver even 500K request persecond(50w并发)
如果较好的硬件经过测试支持百万的并发是完全没有问题的
1.3.Redis持久化的两种方式(Redis Persistence)
参考官网:
https://redis.io/topics/persistence
- Snapshotting快照RDB
The RDB persistence performs point-in-time snapshots of your dataset at specified intervals.
RDB持久性以指定的时间间隔执行数据集的时间点快照
- AOF(append only file )
the AOF persistence logs every write operation received by the server
AOF持久性记录了服务器接收到的每个写入操作
If you wish, you can disable persistence at all, if you want your data to just exist as long as the server is running.
如果你只是希望服务器正在运行,你的数据就存在,你可以根本不使用持久化。
The general indication is that you should use both persistence methods if you want a degree of data safety comparable to what PostgreSQL can provide you.
一般的迹象是如果你想要一定程度的数据安全性与PostgreSQL可以提供的相比,你应该使用两种持久化方法。
If you care a lot about your data, but still can live with a few minutes of data loss in case of disasters, you can simply use RDB alone.
如果你非常关心你的数据,但是如果发生灾难,还可以忍受几分钟的数据丢失,你可以简单地使用RDB。
在redis服务器启动用于恢复数据时,会优先使用aof