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 ...
随机推荐
- STM32F103 Feature
- 04_Mybatis输入\出映射
1. 输入映射 通过paramterType指定输入参数的类型,类型可以是简单类型.hashmap.pojo的包装类. 1.1 传递pojo的包装对象 1.需求 完成用户信息的综合查询,需要传 ...
- POJ - 3294~Relevant Phrases of Annihilation SPOJ - PHRASES~Substrings POJ - 1226~POJ - 3450 ~ POJ - 3080 (后缀数组求解多个串的公共字串问题)
多个字符串的相关问题 这类问题的一个常用做法是,先将所有的字符串连接起来, 然后求后缀数组 和 height 数组,再利用 height 数组进行求解. 这中间可能需要二分答案. POJ - 3294 ...
- 开发环境、测试环境、生产环境、UAT环境、仿真环境详解
版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/WYX15011474269/article ...
- C# 串口编程 对端口的访问被拒绝
感谢Sunny秋刀鱼.https://www.cnblogs.com/527289276qq/p/5595798.html 在页面或者窗口Unloaded事件中关闭串口即可.
- spring:bean的细节之三种创建Bean对象的方式
<!--创建Bean的三种方式--><!--第一种方式,使用默认构造函数创建 在spring的配置文件中使用bean标签,配以id和class属性之后,且没有属性和标签时. 采用的就 ...
- Android开发 使用SparseArray代替HashMap[转载]
源作者:Android小Y链接:https://www.jianshu.com/p/1828f14d7955来源:简书 前言 Android开发中,一个好的应用,除了要有吸引人的功能和交互之外,在性能 ...
- lvs + keepalived + nginx + tomcat高可用负载反向代理服务器配置(一) 简介
一. 为什么这样构架 1. 系统高可用性 2. 系统可扩展性 3. 负载均衡能力 LVS+keepalived能很好的实现以上的要求,keepalived提供健康检查,故障转移,提高系统的可用性!采用 ...
- CentOS源码安装Wireshark
(2019年2月19日注:这篇文章原先发在自己github那边的博客,时间是2016年8月25日) Wireshark为网络管理员常用的一个网络管理工具,通过使用这个软件,我们可以对本机网卡上的经过的 ...
- Cesium官方教程13--Cesium和Webpack
原文地址:https://cesiumjs.org/tutorials/cesium-and-webpack/ Cesium 和 Webpack Webpack是非常强大非常流行的JavaScript ...