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 ...
随机推荐
- Astyle 快速入门,常用指令
--style=java -n -p -c !E astyle是一个命令行工具,命令语法很简单: astyle [options] < original > Beauti ...
- C3P0连接池参数配置
<!--acquireIncrement:链接用完了自动增量3个. --> <property name="acquireIncrement">3</ ...
- BZOJ1096 [ZJOI2007]仓库建设——斜率优化
方程: $\Large f(i)=min(f(j)+\sum\limits_{k=j+1}^{i}(x_i-x_k)*p_k)+c_i$ 显然这样的方程复杂度为$O(n^3)$极限爆炸,所以我们要换一 ...
- 【颓废篇】easyx--2048
整天待在机房是不是,一直保持学术的态度就比较的难啊~ 所以本蒟蒻就在学术之余学了些奇技淫巧,然后就写了一些奇奇怪怪的程序啊,比如让我们小组dalao们都颓得不亦乐乎的2048~~ 当然,2048的实现 ...
- Django问题
Django问题 'WSGIRequest' object has no attribute 'user' django python 关注 2 关注 收藏 0 收藏,413 浏览 当我的djan ...
- [转]C#多线程学习 之 线程池[ThreadPool]
在多线程的程序中,经常会出现两种情况: 一种情况: 应用程序中,线程把大部分的时间花费在等待状态,等待某个事件发生,然后才能给予响应 这一般使用ThreadPo ...
- [转].NET4.0新特性集合贴
vs2010正式版4月12日发布了,前几天我也下了一个,但这几天都没有时间好好试用一下,今天针对C#语言的新特性使用了一下,感觉还不错,有几个新特性和大家分享一下,希望我没有太火星…… 一.新关键词— ...
- LoadRunner参数化详解【转】
距离上次使用loadrunner 已经有一年多的时间了.初做测试时在项目中用过,后面项目中用不到,自己把重点放在了工具之外的东西上,认为性能测试不仅仅是会用工具,最近又想有一把好的利器毕竟可以帮助自己 ...
- 「题解」:[组合数学]:Perm 排列计数
题干: Description称一个1,2,…,N的排列P1,P2…,Pn是Magic的,当且仅当2<=i<=N时,Pi>Pi/2. 计算1,2,…N的排列中有多少是Magic的,答 ...
- Django项目在linux上运行
目录 前言 上传 解压 制作启动脚本 这是一篇关于如何在linux下,以后台进程的方式运行服务,命令改改基本上就通用了. 前言 我们在windows本地开发完Django项目后,需要把项目部署到lin ...