redis常见的面试题
redis和memched有什么区别,为什么单线程的redis比多线程的memched效率高
string:ky类型
hash:字典redis的哈希结构可以使你像在数据库中更新一个属性一样只修改某一项属性值
list:实现消息队列
set:利用唯一性
zset:可以进行排序,可以实现数据的持久化
数据持久化:
redis通过RDB(Redis DataBase)与AOF(Append Only File)持久化,可以将内存中的数据保存到硬盘中,然后重启之后在读取数据
RDB:
是在达到指定的时间或者 操作次数之后,自动将内存中的数据写入到磁盘中(数据恢复时一致性和完整性较差,因为也许最后一次备份前就宕机了,适合数据量较大的时候数据恢复使用)
AOF:
是日志形式,当数据写入内存中的时候,在日志文件下记录了所有写操作,(数据量较大时候,数据的恢复缓慢)
注意:如果不需要持久化的功能,可以关闭,如果想达到持久化的效果,建议两者都使用(RDB、AOF)
memched不支持数据的持久性的存储
redis中的主从复制是如何实现的,redis的集群模式是如何实现的,redis的key是如何寻址的
主从复制:
a:从服务器连接主服务器,发送SYN命令(写缓存命令)
b:主服务器接收到SYNC命令之后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有命令;BGSAVE命令用于在后台异步保存当前数据库的数据到磁盘
c:主服务器BGSAVE执行完成之后,向所有从服务器发送快照文件,并在发送期间继续记录被执行的写命令
d:从服务器接收到快照文件后丢弃所有的旧数据,加载进入到所有的快照
e:主服务器快照发送完毕之后开始向从服务器发送缓冲区中的命令
f:从服务器完成对快照的载入,开始接受命令请求,并执行来自主服务器缓冲区的写命令
集群模式:
redis集群中内置了16384个哈希槽,当需要在redis集群中放置一个kv键值对的时候,redis先对key使用crc16算法算出一个结果,然后把这个结果对16384求余数,这样每个key都会对应一个编号在0-16384之间的哈希槽,redis会根据节点数量大致均等的将哈希槽映射到不同的节点
寻址:
redis采取链表的方式来存储多个哈希碰撞的键。也就是说,当根据key的哈希值找到该列表后,如果列表的长度大于1,那么我们需要遍历这个链表来找到我们所查找的key,当然,一般情况下链表的长度都是1,所以时间复杂度可以看作是1。我们知道如果哈希表数量达到了一个很大的量级的时候,那么冲突的链的元素数量就会很大,这个时候查询的效率就会变的很慢,因为取值的时候redis会遍历链表。而随着数据量的缩减,也会产生一定的内存浪费。redis在设计的时候充分考虑了字段的增加和缩减,为了优化数据量增加时候的查询效率和缩减时候的内存利用率。redis进行了一系列的操作,而这个操作过程也就被称为了rehash
redis中的分布式锁
什么是分布式锁:
分布式锁是控制分布式系统和不同系统之间共同访问共享资源的一种锁的实现,如果不同的系统或者同一个系统不同主机之间共享了某个资源的时候,往往需要互斥来防止干扰来保持一致性
实现思想:
1、获取锁的时候,使用setnx加锁,并使用expire命令锁添加一个超时时间,超过这个时间就自动释放锁,锁的value值是一个随机生成的UUID,通过此在释放锁的时候进行判读
2、获取锁的时候还设置一个获取的超时时间,若超过这个时间就放弃获取锁
3、释放锁的时候,通过UUID判断是不是该锁,如果只这个锁,就执行delete进行锁的释放
redis常见的面试题的更多相关文章
- Redis简介和常见的面试题
redis介绍及特点 Redis是由意大利人Salvatore Sanfilippo开发的一款内存内存高速缓存数据库. Reids全称为:Remote Dictionary Server(远程数据服务 ...
- 【面试必备】常见Java面试题大综合
一.Java基础 1.Arrays.sort实现原理和Collections.sort实现原理答:Collections.sort方法底层会调用Arrays.sort方法,底层实现都是TimeSort ...
- PHPer常见的面试题总结
1.平时喜欢哪些php书籍及博客?CSDN.虎嗅.猎云 2.js闭包是什么? 3.for与foreach哪个更快? 4.php鸟哥是谁?能不能讲一下php执行原理? 5.php加速器有哪些?apc.z ...
- 转载文章 208 个最常见 Java 面试题全解析
最近正值春招,一直在给公司招聘 Java 程序员,我从 2015 年做 TeamLeader 开始就习惯性地收集平时遇到的 Java 技术问题或周围朋友见过的面试题,经过不断筛选,终于凝练成一套实用的 ...
- java零基础之---常见java面试题
看到别人分享的面试题,感觉蛮全面的,分享出来,慢慢研究答案. 一.Java 基础 1.JDK 和 JRE 有什么区别? 2.== 和 equals 的区别是什么? 3.两个对象的 hashCode() ...
- 部分常见ORACLE面试题以及SQL注意事项
部分常见ORACLE面试题以及SQL注意事项 一.表的创建: 一个通过单列外键联系起父表和子表的简单例子如下: CREATE TABLE parent(id INT NOT NULL, PRIMARY ...
- redis常见命令使用
这篇经验主要介绍了Redis常见用的一些操作命令.这篇例子是在windows上操作的.linux类似.写的一些基础,大神就别看了. 工具/原料 redis windows 方法/步骤 1 可以 ...
- Redis常见七种使用场景(PHP实战)
edis 是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API. 本篇文章,主要介绍利用Redis常见应用场景下PHP实战. ...
- redis常见错误处理
--1]当内存不足引起 redis出错 先尝试下列语句,指定redis使用内存 redis-server.exe redis.windows.conf --maxheap 200mredis-ser ...
随机推荐
- ICPC 2018 徐州赛区网络赛
ACM-ICPC 2018 徐州赛区网络赛 去年博客记录过这场比赛经历:该死的水题 一年过去了,不被水题卡了,但难题也没多做几道.水平微微有点长进. D. Easy Math 题意: ...
- js基础应用-打字机,震动窗口
js基础应用一,窗口震动 html+js代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8 ...
- <每日一题>题目5:生成器表达式面试题
题目: def demo(): for i in range(4): yield i g = demo() g1 = (i for i in g ) g2 = (i for i in g1) prin ...
- 【LGP4714】「数学」约数个数和
题目 众所周知,除数个数函数\(\sigma_0=I^2\),\(I\)就是狄利克雷卷积里的\(1\)函数 于是熟悉狄利克雷卷积的话很快就能看出我们要求的就是\(I\times I^{k}\),即\( ...
- java笔试之完全数计算
完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数. 它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身. 例如:28,它有约数1.2.4.7.14. ...
- 解决Eclipse建立Maven Web项目后找不到src/main/java资源文件夹的办法
问题如题,明细见下图: 解决方法: 在项目上右键选择properties,然后点击java build path,在Librarys下,编辑JRE System Library,选择workspace ...
- Java开发系列-时间转换
获取当前时间戳 // 获取当前的时间戳 long time = new Date().getTime(); 将字符串时间戳转成格式的时间字符串 Long timestrap = Long.parseL ...
- linux centos&Ubuntu&RedHat更换软件源
linux三大版本更换软件源 前排提示,有的源可能已经失效,如果发现请留言或自行寻找其他源. 1.centos mv /etc/yum.repos.d/CentOS-Base.repo [--path ...
- 2016.8.17上午纪中初中部NOIP普及组比赛
2016.8.17上午纪中初中部NOIP普及组比赛 链接:https://jzoj.net/junior/#contest/home/1335 本来觉得自己能考高分,但只得160分,并列第九.至少又挤 ...
- ssm框架,出现xxx不能加载,或者bean不能加载时的解决方案之一
有可能是你在项目的mapper.xml文件中添加了本项目没有的实体类, 你把日志中找不到的最后一个实体类全项目搜索下,改成本项目可以引用的即可