有关Redis
相关问题:
1.Redis了解过吗?怎么用的?(2021.3月底网易面经)
2.项目中哪些地方用到了Redis?
存放session。Sessionid作为key,用户信息作为value。因为部署多个实例,需要一份公共的session。
序列号
主页的热门商品,最近成交记录放在缓存里面。热点数据,提高响应速度。
使用jedis作为java连接客户端
查询数据,然后放在缓存中。
3.Jedis简介AND使用:
那jedis就是集成了redis的一些命令操作,封装了redis的java客户端。提供了连接池管理。一般不直接使用jedis,而是在其上在封装一层,作为业务的使用。如果用spring的话,可以看看spring 封装的 redis Spring Data Redis
简单使用:
4.Redis为什么被设计成单线程?
答案一:
在回答这几个问题之前先问几个问题
1 多线程的本质是什么?
多线程的本质其实还是单线程,因为在任一个时间点其实只有一个线程在抛,
只不过CPU切换线程速度太快,让我们感觉是多个线程在一起跑,其实所有的指令还是一个接着一个的跑的。
2 多线程一定比单线程快么?
答案肯定是否定的了
线程快,是因为其降低了不必要的耗时,耗时其实主要集中在两大块 磁盘IO 线程切换
磁盘IO耗时远远大于线程切换耗时
多线程有助于降低磁盘IO耗时
单线程没有线程切换耗时
日常开发涉及磁盘IO因此使用多线程,磁盘IO的耗时危害已经将线程切换的危害忽略了,因此会觉得多线程快.
Redis中没有磁盘IO,使用单线程没有CPU切换耗时,也不用考虑同步锁问题,因此速度更快
答案二:
(1)官方给的解释是因为Redis是基于内存的操作,CPU不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存的大小或者网络带宽。既然单线程容易实现,而且CPU不会成为瓶颈,那就顺理成章地采用单线程的方案了。
(2)Redis有丰富的数据类型,在单线程的情况下,就不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗。
(3)采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多线程导致的切换而消耗 CPU。
5.Redis是单线程,为什么单线程模型的 Redis 性能不减?
(1) 单线程不代表一定就慢,单线程有一个最大好处就是节省线程切换的开销,更不用考虑并发读写带来的复杂操作场景,这就大大节省了线程间切换的时间了。
(2) 单线程模型避免了多线程的频繁上下文切换,这也避免了多线程可能产生的竞争问题。
(3) Reids 是基于内存的读写操作,内存肯定比传统磁盘IO数据库快。
(4) Reids 核心是基于非阻塞的IO多路复用机制。
项目中关于Redis的问题:
redis的hashmap和java的有什么区别
redis的zset数据结构是什么
为什么用redis做会话跟踪
怎么用redis做会话跟踪的
如果没有部署到同一个域名下,怎么做会话跟踪(用单点登录)
会话跟踪意义是什么,具体是怎么做的。怎么失效的,怎么拿到数据的
流水号生成器怎么保证唯一订单号的?是严格的递增还是趋势递增?
redis的订单流水号用完了怎么办?(动态增加位数)
redis挂了,流水号怎么办?
怎么做的订单号
如果部署多个redis,怎么保证生成的序列号唯一
redis怎么实现分布式的cookie
i. cookie和session的区别
ii. 服务端如何识别用户的(tomcat的那一套)
redis预减缓存,减成负数怎么办