很多人接触redis的原因是因为它快,一般说到redis为什么快,一般都会说redis是基于内存的数据库,操作内存和操作磁盘的时间相差很大,还有是redis使用了单线程,减少了多线程频繁切换带来的损耗
本文从我对redis的理解,列出redis快的原因,如果文中有错误,麻烦指出
基于内存
redis是基于内存的存储,众所周知,访问内存比访问磁盘快得多,虽然redis有持久化的机制,最终的数据都会以某种形式落盘,用于防止服务器宕机造成数据丢失,但使用redis过程中的读写都是对内存进行操作的,访问速度很快
数据结构
redis的数据结构同样也提高了数据库查询的效率,主要有两个方面
- 存储方式是键值形式(key-value),底层是哈希表,哈希表的时间复杂度是O(1),有哈希表就一定有哈希冲突,redis对于哈希冲突的解决方案是链地址法(不清楚的话百度一下),这样在数据多的时候访问性能也会下降,但redis使用了一些优化方式来解决这个问题,在下一篇文章redis数据结构中介绍
- 第一点说到存储方式是键值(key-value),其中value有五种数据类型,分别是字符串、列表、集合、有序集合、哈希表,每一种数据类型低层都对应着多种实现和优化,在下一篇文章redis数据结构中介绍
上面提到关于数据结构的两点也是redis快的原因之一
单线程
单线程和多线程各有好处,针对redis的使用场景使用多线程的预期效果和实际效果如下