redis学习笔记--redis实现原理相关

Posted JordanInShenzhen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis学习笔记--redis实现原理相关相关的知识,希望对你有一定的参考价值。

redis为什么是单线程的?它完全是单线程吗?

首先,redis为什么是单线程的,首先肯定是为性能考虑,redis在数据的存取过程中,性能是非常高的,但是如果采用多线程策略,系统的性能反而会耗在线程切换上;如果觉得无法发挥出机器的多核的优势,可以考虑在一台机器上多开几个Redis实例解决。

其次,单线程代码更清晰,处理逻辑更简单,不用考虑各种锁的问题,不存在加锁和释放锁的操作,没有因为可能出现死锁而导致的性能问题。

但是,在redis6.0以后,它开始支持多线程了,为什么?因为redis主要的性能瓶颈不在于读写速度,而在于内存和网络,内存好说,直接加内存条即可,但是网络IO怎么办?这个加内存条可是不顶用的,所以redis6.0引入了多线程的概念,redis6.0在网络IO处理方面引入了多线程,如网络数据的读写和协议解析等,但是!执行命令的核心模块(内存读取)还是单线程的。

Redis持久化有几种方式?

redis提供了两种持久化的方式,分别是RDB(Redis DataBase)和AOF(Append Only File)。

RDB,简而言之,就是在不同的时间点,将redis存储的数据生成快照并存储到磁盘等介质上;

AOF,则是换了一个角度来实现持久化,那就是将redis执行过的所有写指令记录下来,在下次redis重新启动时,只要把这些写指令从前到后再重复执行一遍,就可以实现数据恢复了。

其实RDB和AOF两种方式也可以同时使用,在这种情况下,如果redis重启的话,则会优先采用AOF方式来进行数据恢复,这是因为AOF方式的数据恢复完整度更高。

Redis和 memecache 有什么区别?

1. redis支持更丰富的数据结构和数据操作,而memcache仅支持简单的key-value数据结构

2. redis内存使用率比较高,Redis采用hash结构来做key-value存储,由于其组合式的压缩,其内存利用率会高于memecache。

3. redis是单线程,mencache是多线程的

4. Redis支持磁盘持久化,memecache不支持。

Redis可以将一些很久没用到的value通过swap方法交换到磁盘。

5. redis支持分布式,memcache不支持

Redis支持的 java 客户端都有哪些?

Redisson、Jedis、lettuce 等等,官方推荐使用 Redisson,代码开发过程中一般会继承spring-boot,spring-boot提供了便捷的redis访问工具:redisTemplate

目前用的最多的客户端是Jedis 和 Redisson,两者都是Java中对Redis操作的封装。Jedis 只是简单的封装了 Redis 的API库,可以看作是Redis客户端,它的方法和Redis 的命令很类似。Redisson 不仅封装了 redis ,还封装了对更多数据结构的支持,以及锁等功能,相比于Jedis 更加大。但Jedis相比于Redisson 更原生一些,更灵活。

redis实现原理相关就介绍这些,后面如果有想到哪些redis原理相关的知识点,会逐步的补充进来,下篇文章准备说下redis在大型互联网项目中会遇到的问题,如缓存击穿、缓存雪崩、缓存穿透等等,以及redis分布式锁的相关实现

Redis为什么这么快?

1. 基于内存的实现

2. 合理的数据类型设计

3. 针对每个数据类型,设计合理的数据存储结构

4. 合理的线程模型,在网络IO使用多线程,在数据存取的核心操作上,使用单线程,避免了线程上下文切换

5. 虚拟内存机制。暂时把不经常访问的数据(冷数据)从内存交换到磁盘中,从而腾出宝贵的内存空间用于其它需要访问的数据(热数据)。通过VM功能可以实现冷热数据分离,使热数据仍在内存中、冷数据保存到磁盘。这样就可以避免因为内存不足而造成访问速度下降的问题。

以上是关于redis学习笔记--redis实现原理相关的主要内容,如果未能解决你的问题,请参考以下文章

学习笔记Redis中有序集合zset的实现原理——跳表

聊聊Redis那些事(下篇)

Redis学习笔记8:Redis发布订阅(pub/sub)

Redis学习笔记8:Redis发布订阅(pub/sub)

Redis学习笔记8:Redis发布订阅(pub/sub)

Redis学习笔记-key相关命令