前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis常见面试题

Redis常见面试题

作者头像
宇宙之一粟
发布2020-10-26 10:48:32
2640
发布2020-10-26 10:48:32
举报
文章被收录于专栏:宇宙之_一粟

说说你用过的Redis的数据类型

String:最基本的数据类型,二进制安全 (可以包含任何对象:序列化对象,JPG)

代码语言:javascript
复制
/*
* 保存字符串对象的结构
*/
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元素插入顺序排序

代码语言:javascript
复制
lpush mylist aa
lpush mylist bb
lpush mylist cc
lrange mylist 0 10

后进先出的特定,轻松实现栈的功能

Set:String元素组成的无序集合,通过哈希表实现,不允许重复

代码语言:javascript
复制
sadd myset 111
sadd myset 222
sadd myset 333
sadd myset 222

smembers myset
sadd myset abd

所有的关注人存为Set

Sorted Set:有序集合

通过分数来为集合中的成员进行从小到大的排序,分数可以相同,成员值必须唯一

代码语言:javascript
复制
zadd myzset 3 abc
zadd myzset 1 abd
zadd myzset 2 abb

zrangebyscore myzet 0 10

用于计数的HyperLogLog

用于支持存储地理位置信息的Geo

底层数据类型基础

  1. 简单动态字符串
  2. 链表
  3. 字典
  4. 跳跃表
  5. 整数结集合
  6. 压缩列表
  7. 对象

从海量Key里查询出某一固定前缀的Key

留意细节:

  • 摸清数据规模,即问清楚边界
  1. 利用 KEYS pattern:查询所有符合给定模式pattern的key
代码语言:javascript
复制
keys k1*
  • KEYS指令一次性返回所有匹配的key
  • 键的数量过大会使服务 卡顿
  1. SCAN cursor [MATCH pattern] [COUNT count]
  • 基于游标的迭代器,需要基于上一次的游标延续之前的迭代过程
  • 以0作为游标开始一次新的迭代,直到命令返回游标0完成一次遍历
  • 不保证每次执行都返回某个给定数量的元素,支持模糊查询
  • 一次返回的数量不可控,只能是大概率符合count参数
代码语言:javascript
复制
scan 0 match k1* count 10

如何通过Redis实现分布式锁

分布式锁需要解决的问题:

  • 互斥性
  • 安全性
  • 死锁
  • 容错

SETNX key value:如果key不存在,则创建并赋值

  • 时间复杂度:O(1)
  • 返回值:设置成功,返回1;设置失败,返回0
代码语言:javascript
复制
get locknx

setnx locknx test

setnx locknx task

get locknx

原子性,实现分布式锁

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 说说你用过的Redis的数据类型
    • String:最基本的数据类型,二进制安全 (可以包含任何对象:序列化对象,JPG)
      • Hash:String元素组成的字典,适合用于存储对象
        • List:列表,按照String元素插入顺序排序
          • Set:String元素组成的无序集合,通过哈希表实现,不允许重复
            • Sorted Set:有序集合
              • 用于计数的HyperLogLog
                • 用于支持存储地理位置信息的Geo
                • 底层数据类型基础
                • 从海量Key里查询出某一固定前缀的Key
                • 如何通过Redis实现分布式锁
                相关产品与服务
                云数据库 Redis
                腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档