老师您好!您的视频真的每一秒都是干货啊!
从4-1看过来,积累了一些问题,还希望老师可以指点解答
- 关于Redis我大概的想象是它对外有一个线程,来接受外部的一些请求事件,而这个线程通过IO复用来在内部创建新的线程对内部的数据进行操作,不知道是不是这样呢?
- 如果上面这一点理解的没有问题的话,在KEY pattern那里,老师说“键的数量过大会使服务卡顿”,这个是为什么呢?是因为默认用主线程来做的吗查询吗?既然对内通过IO复用创建了新的线程操作数据,是不是调用KEY时也会创建一个线程去负责查询(和其他线程并发),此时应该是不应该发生卡顿的呀
- 在实现分布式锁部分,通过SETNX+EXPIRE或融合二者SET都可以实现在一定时间后使key过期,如果此时一个进程成功设置key,然后设置了过期时间,但执行独占资源代码块时的时间远远超过过期时间,此时另一个线程就可以设置key,进入独占资源代码块,此时会不会发生冲突呢?
- 在异步队列部分,老师说“缺点是LPOP没有等待队列里有值就直接消费”,替换方法就是sleep,这个不是很理解,LPOP方法在没有消费的时候会返回nil而不是报错,因此不存在程序异常的问题,那么线程是会不停的调用LPOP吗?但是调用sleep也是让线程阻塞一段时间,两种方法对于线程来说都是没有做任何事也不报错,那么为什么说LPOP是有缺点的,可以用sleep替换呢?
- 在持久化部分,想请教一下老师我理解的对不对:
1.由于Copy-on-Write,主进程fork出子进程后,他们是共享一片物理地址中的内容的
2.此时子进程负责去在这片空间中拿东西拷贝,而父进程(也是主进程)会继续去处理外面来的请求
3.如果这时候父进程接到了一个写的请求,同样由于Copy-on-Write,会先创建一个副本(另外的一片物理空间中),在这个副本上进行操作(或记录要操作的步骤?)
4.这时候子进程已经拷贝完了,父进程会拿着刚才副本中的操作到刚才他们共享的那个地方去覆盖原来的数据(或按照记录的操作进行操作?)
5.整个过程中父进程要读哪里,写哪里是由Copy-on-Write维护的读请求使用的指针控制的
- 还有个小问题,想请教一下老师:**Redis用的最多的地方是在数据库前面做一个缓存吗?就像内存前面的cache一样?那么可不可以认为课程里面您讲的“写入磁盘”,其实就是写入到数据库呢?**此外,如果在服务器中用到Redis,是不是对服务器硬件(处理器,内存)的要求都很高呢?
问题比较多,还请麻烦老师您能抽空指点迷津!提前感谢您!!!
非常感谢!!!