在测试环境中,可以使用 keys 命令,模糊查询到需要的 key,但这个操作只适合在测试环境中使用,不适合在生产环境中使用,原因是 Redis 是单线程运行的,当 Redis 中的数据量很大时,由于此操作会遍历所有数据,并将结果一次性全部返回,执行时间会比较长,从而导致后续操作等待,直接影响系统的正常运行。集群环境下使用 jedis 的代码实现。
Redis支持的各种数据类型包括string,list ,set ,sorted set 和hash .Redis本质上一个key-value db,所以我们首先来看看他的key。首先key也是字符串类型,但是key中不能包括边界字符。
通过 Redis 可以在 O的时间内找到键值对,只需要计算 key 的哈希值就可以定位位置,但从下图可以看出,在 4 号位置出现了冲突,两个 key 映射到了同一个位置,这就产生了哈希冲突,会导致哈希表的操作变慢。
因为 get 和 set 操作不是原子操作,你先要做操作 get,然后在操作 set,这个过程中就会导致当第一台服务在执行 get 时,发现 key 不存在,然后进行 set,这个时候 set 可能还没有完成,第二台服务执行了 get,发现 key 不存在,然后进行 set,这个时候就会导致多个服务同时执行,这就不是原子操作了。
在我们日常的开发中,无不都是使用数据库来进行数据的存储,由于一般的系统任务中通常不会存在高并发的情况,所以这样看起来并没有什么问题,可是一旦涉及大数据量的需求,比如一些商品抢购的情景,或者是主页访问量瞬间较大的时候,单一使用数据库来保存数据的系统会因为面向磁盘,磁盘读/写速度比较慢的问题而存在严重的性能弊端,一瞬间成千上万的请求到来,需要系统在极短的时间内完成成千上万次的读/写操作,这个时候往往不是数据库能够承受的,极其容易造成数据库系统瘫痪,最终导致服务宕机的严重生产问题。
又到了金三银四跳槽季,好多同学已经开始行动了。今天我来助力一把,送出这套 Redis 面试题,助力大家通关。图片来自 PexelsRedis 为什么响应快①数据保存在内存中Redis 数据保存在内存中,读写操作只要访问内存,不需要磁盘 IO。