redis常见。。
1. redis和memcached的区别?
答:1)存储方式
Memecache把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小。
Redis有部份存在硬盘上,这样能保证数据的持久性。
2)数据支持类型
Memcache对数据类型支持相对简单
Redis有复杂的数据类型
3)使用底层模型不同
它们之间底层实现方式 以及与客户端之间通信的应用协议不一样。
Redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求
4)value大小
redis最大可以达到1GB,而memcache只有1MB
2. 如何高效的找到redis中所有以oldboy开头的key?
答:key oldboy*
3. 什么是一致性哈希?
答:对节点和数据,都做一次哈希运算,然后比较节点和数据的哈希值,数据取和节点最相近的节点做为存放节点。这样就保证当节点增加或者减少的时候,影响的数据最少。hash_ring 是python中做一致性哈希的模块
4. redis是单进程单线程的吗?
答: redis是单进程单线程
1.本身性能很高,每秒处理10万次的读写。
2代码更清晰,处理逻辑更简单
3.不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗(下面详细说)
4.不存在多进程或者多线程导致的切换而消耗CPU
5.事件处理类型是IO多路复用
6.将并行事件,串行化发生。
5. redis中数据库默认是多少个db 及作用?
答:redis默认有十六个db
6. 如果redis中的某个列表中的数据量非常大,如果实现循环显示每一个值?
答:查询取出列表的值让后使用python循环
7. redis如何实现主从复制?以及数据同步机制?
答:在Master和Slave互通之后,首先,Slave会发送sync同步指令,当Master收到指令后,将在后台启动存盘进程,同时收集所有来自Slave的修改数据集的指令信息,
当后台进程完成之后,Master将发送对应的数据库文件到对应的Slave中,以完成一次完整的同步工作。其次Slave在接受到数据库文件之后,将其存盘并加载到内存中。
最后,Master继续收集修改命令和新增的修改指令,并依次发送给Slave,其将在本次执行这些数据的修改命令,从而最终达到数据同步的实现。
8. redis中的sentinel的作用?
答: Redis Sentinel 为Redis提供了高可用的实现。通俗来说就是你可以部署一套无需人为干预即可防灾的Redis环境。RS同时为客户端提供了其他诸如监控,通知的功能。
9. 如何实现redis集群?
答:
官方cluster方案
twemproxy代理方案
哨兵模式
codis
客户端分片
10. redis中默认有多少个哈希槽?
答:有2**14个哈希槽 16384个
11. 简述redis的有哪几种持久化策略及比较?
答:rdb:快照形式是直接把内存中的数据保存到一个dump文件中,定时保存,保存策略
aof:把所有的对redis的服务器进行修改的命令都存到一个文件里,命令的集合
12. 列举redis支持的过期策略。
答:定时删除
含义:在设置key的过期时间的同时,为该key创建一个定时器,让定时器在key的过期时间来临时,对key进行删除
惰性删除
含义:key过期的时候不删除,每次从数据库获取key的时候去检查是否过期,若过期,则删除,返回null。
定期删除
含义:每隔一段时间执行一次删除(在redis.conf配置文件设置hz,1s刷新的频率)过期key操作
13. MySQL 里有 2000w 数据,redis 中只存 20w 的数据,如何保证 redis 中都是热点数据?
答:redis 内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略。redis 提供 6种数据淘汰策略:
voltile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰
volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰
volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰
allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰
no-enviction(驱逐):禁止驱逐数据
14. 写代码,基于redis的列表实现 先进先出、后进先出队列、优先级队列。
答:先进lpush keys values 先出 rpop keys
先进lpush keys values 后出 lpop keys
15. 如何基于redis实现消息队列?
答:Redis中五大数据结构之一—列表,其PUSH和POP命令遵循FIFO先进先出原则。当我们需要发布消息的时候执行LPUSH(消息从左边进入队列),
消息接收端执行RPOP获得消息(消息从右侧弹出)。对于列表,Redis提供了带有阻塞的命令(命令前加B)。因此,生产者lpush消息,
消费者brpop(从列表中弹出最右端元素,如无元素则一直阻塞到timeout)消息,并设定超时时间timeout,可以减少redis的压力。
16. 如何基于redis实现发布和订阅?
答:创建一个频道 客户端加入频道 等待频道发布订阅
17. 什么是codis?
答:Codis 是一个分布式 Redis 解决方案, 对于上层的应用来说, 连接到 Codis Proxy 和连接原生的 Redis Server 没有明显的区别 (不支持的命令列表),
上层应用可以像使用单机的 Redis 一样使用, Codis 底层会处理请求的转发, 不停机的数据迁移等工作, 所有后边的一切事情, 对于前面的客户端来说是透明的,
可以简单的认为后边连接的是一个内存无限大的 Redis 服务.
18. 什么是twemproxy?
答:Twemproxy是一种代理分片机制,由Twitter开源。Twemproxy作为代理,可接受来自多个程序的访问,按照路由规则,转发给后台的各个Redis服务器,再原路返回。
该方案很好的解决了单个Redis实例承载能力的问题。
19. redis如何实现事务。
答: 事务:作为单个逻辑工作单元执行的一系列操作,由多条语句组成的集合,要么全部成功,要么全部失败,数据库通过事务 来保证数据的一致性 特性(ACID):
原子性:原子性是指事务是一个不可分割的工作单位,事务中的操作要么都成功,要么都不成功;
一致性:事务前后数据的完整性必须保持一致;
隔离性:事务的隔离性是指多个用户并发访问数据库时,一个用户的事务不能被其它用户的事务所干扰,多个并发事 务之间数据要相互隔离;
持久性:持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不 应该对其有任何影响
>multi //开启一个事务
>set age 10 //暂存指令队列
>set age 20
>exec //开始执行(提交事务)
或>discard //清空指令队列(事务回滚)
20. redis中的watch的命令的作用?
答:Redis Watch 命令用于监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断
21. 简述redis分布式锁和redlock的实现机制。
答:在不同进程需要互斥地访问共享资源时,分布式锁是一种非常有用的技术手段。
一个Client想要获得一个锁需要以下几个操作:
得到本地时间Client使用相同的key和随机数,按照顺序在每个Master实例中尝试获得锁。在获得锁的过程中,为每一个锁操作设置一个快速失败时间(如果想要获得一个10秒的锁, 那么每一个锁操作的失败时间设为5-50ms)。
这样可以避免客户端与一个已经故障的Master通信占用太长时间,通过快速失败的方式尽快的与集群中的其他节点完成锁操作。
客户端计算出与master获得锁操作过程中消耗的时间,当且仅当Client获得锁消耗的时间小于锁的存活时间,并且在一半以上的master节点中获得锁。才认为client成功的获得了锁。
如果已经获得了锁,Client执行任务的时间窗口是锁的存活时间减去获得锁消耗的时间。
如果Client获得锁的数量不足一半以上,或获得锁的时间超时,那么认为获得锁失败。客户端需要尝试在所有的master节点中释放锁, 即使在第二步中没有成功获得该Master节点中的锁,仍要进行释放操作。
22. 请设计一个商城商品计数器的实现方案?
答:指定键的值做加加操作,返回加后的结果。
23. 了解过 Hbase、DB2、SQLServer、Access吗?
答:SQLServer 关系型数据库,微软开发的,目前主要用于教学
Access 微软把数据库引擎的图形用户界面和软件开发工具结合在一起的一个数据库管理系统
DB2 IBM公司开发的关系型数据库,是IBM一种分布式数据库解决方案
Hbase(Hadoop Database) 是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。
希望你眼眸有星辰,心中有山海,从此以梦为马,不负韶华

浙公网安备 33010602011771号