Redis常见面试题
时间:2022-07-28
本文章向大家介绍Redis常见面试题,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
说说你用过的Redis的数据类型
String:最基本的数据类型,二进制安全 (可以包含任何对象:序列化对象,JPG)
/*
* 保存字符串对象的结构
*/
struct asshdr {
// buf 中已占用空间的长度
int len;
// buf 中剩余可用空间的长度
int free;
// 数据空间
char buf[];
};
Hash:String元素组成的字典,适合用于存储对象
hmset lilei name "LiLei" age 26 title "Senior"
hget lilei age
hset lilei title "Pricipal"
List:列表,按照String元素插入顺序排序
lpush mylist aa
lpush mylist bb
lpush mylist cc
lrange mylist 0 10
后进先出的特定,轻松实现栈的功能
Set:String元素组成的无序集合,通过哈希表实现,不允许重复
sadd myset 111
sadd myset 222
sadd myset 333
sadd myset 222
smembers myset
sadd myset abd
所有的关注人存为Set
Sorted Set:有序集合
通过分数来为集合中的成员进行从小到大的排序,分数可以相同,成员值必须唯一
zadd myzset 3 abc
zadd myzset 1 abd
zadd myzset 2 abb
zrangebyscore myzet 0 10
用于计数的HyperLogLog
用于支持存储地理位置信息的Geo
底层数据类型基础
- 简单动态字符串
- 链表
- 字典
- 跳跃表
- 整数结集合
- 压缩列表
- 对象
从海量Key里查询出某一固定前缀的Key
留意细节:
- 摸清数据规模,即问清楚边界
- 利用 KEYS pattern:查询所有符合给定模式pattern的key
keys k1*
- KEYS指令一次性返回所有匹配的key
- 键的数量过大会使服务 卡顿
- SCAN cursor [MATCH pattern] [COUNT count]
- 基于游标的迭代器,需要基于上一次的游标延续之前的迭代过程
- 以0作为游标开始一次新的迭代,直到命令返回游标0完成一次遍历
- 不保证每次执行都返回某个给定数量的元素,支持模糊查询
- 一次返回的数量不可控,只能是大概率符合count参数
scan 0 match k1* count 10
如何通过Redis实现分布式锁
分布式锁需要解决的问题:
- 互斥性
- 安全性
- 死锁
- 容错
SETNX key value:如果key不存在,则创建并赋值
- 时间复杂度:O(1)
- 返回值:设置成功,返回1;设置失败,返回0
get locknx
setnx locknx test
setnx locknx task
get locknx
原子性,实现分布式锁
- 【jfinal修仙系列】扩展ShiroCacheManager 支持Redis缓存
- 【springboot】 springboot 整合mybatis-plus
- jfinal-swagger让你的应用接口更加简单
- 【springboot】 spring session 分布式会话共享
- 基于jfinal Template的Shiro 标签
- 基于Spring Cloud 少量配置完成单点登录开发
- Spring 必知概念(一)
- 如何在EHAB(EntLib)中定义”细粒度”异常策略?
- MVC、MVP以及Model2[下篇]
- Dora.Interception: 一个为.NET Core度身定制的AOP框架
- 为了支持AOP的编程模式,我为.NET Core写了一个轻量级的Interception框架[开源]
- 关于Expression Tree和IL Emit的所谓的"性能差别"
- 采用一个自创的"验证框架"实现对数据实体的验证[扩展篇]
- 采用一个自创的"验证框架"实现对数据实体的验证[改进篇]
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法