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 ...
随机推荐
- hive 总结三(压缩)
本文参考:黑泽君相关博客 本文是我总结日常工作中遇到的坑,结合黑泽君相关博客,选取.补充了部分内容. 开启 map 输出阶段压缩可以减少 job 中 map 和 Reduce task 间数据传输量. ...
- PAT甲级——A1104 Sum of Number Segments【20】
Consider a positive integer N written in standard notation with k+1 digits ai as ak⋯a1a0 ...
- Python编码decode和encode
常见编码介绍: GB2312编码:适用于汉字处理.汉字通信等系统之间的信息交换;GBK编码:是汉字编码标准之一,是在 GB2312-80 标准基础上的内码扩展规范,使用了双字节编码ASCII编码:是对 ...
- VS2017+QT5.12环境配置与动态链接库的生成
最近需要重新编译一个DLL动态链接库,由于源码中包含了QT代码,所以现在需要配置VS+QT环境. 本人系统环境:Win10 64位 一.安装 Visual Studio 2017软件下载安装教程:ht ...
- keepalived的常见的健康检查方式
TCP_CHECK tcp端口检测 HTTP_GET http接口检测 MISC_CHECK 自定义脚本检测 tcp端口检测 TCP_CHECK { connect_port 80 connect_t ...
- BOM相关知识点
1.BOM概念:Browser Object Model 浏览器对象模型作用:提供了使用JS操作浏览器的接口 2.BOM包含了许多对象信息,包括如下这些:(1)screen 屏幕信息(2)locati ...
- 第三方下载控件 用起来还是不错的偶!Aria
本文主要介绍开源项目Aria的使用. 先在项目里的build 中配置compile 'com.arialyy.aria:Aria:3.1.1' //下载 开始下载 Aria.download(this ...
- python中使用xlrd、xlwt操作excel
python 对 excel基本的操作如下: # -*- coding: utf-8 -*- import xlrd import xlwt from datetime import date,dat ...
- Python-数据类型内置方法(2)
目录 元组(tuple) 内置方法: 字典(dict) 内置方法: 优先掌握: 需要掌握 集合(set) 优先掌握 深浅拷贝 拷贝(赋值) 浅拷贝 深拷贝 总结 存值个数 有序 or 无序 可变 or ...
- pytorch基础(1)
基本数据类型和tensor import torch import numpy as np #array 和 tensor的转换 array = np.array([,]) tensorArray = ...