刘顺琦 redis 常见面试题

https://www.runoob.com/redis/redis-data-types.html

HSCAN key cursor [MATCH pattern] [COUNT count]

hscan pms:1 0 match stock:* count 100

当SCAN命令的游标参数被设置为 0 时, 服务器将开始一次新的迭代

Hgetall 以列表形式返回哈希表的字段及字段值

查看有多少键:keys *

基本类型:

List、set、hash、zset、string

ZADD KEY_NAME SCORE1 VALUE1… SCOREN VALUEN

ZADD myzset 1 “one”

Redis用crc16进行hash

没有用一致性hash(对2^32次mod、数据点倾斜则用虚拟节点,虚拟节点到实际节点映射即可)

Redis的瓶颈最有可能是机器内存的大小或者网络带宽

Redis为什么这么快

1.完全基于内存

2.数据结构简单,对数据的操作简单,redis中的ds是专门设计过的

3.单线程,避免不必要的上下文切换和竞争条件

4.Redis 是单线程+多路IO复用技术

5.非阻塞I/O多路复用机制

单个线程高效的处理多个连接请求,利用select、poll、epoll可以监察多个流的I/O事件的能力。Select轮询max1024、poll

zset底层:

一、ziplist(双向链表,节省内存空间。查找是O(n))使用条件:1、保存的元素数量小于128个 2、保存的所有元素的长度小于64字节

保存有序的元素列表。用两个紧挨在一起的压缩列表节点来保存,第一个保存元素成员,第二个保存元素的分值。zlbytes,表示整个list的总长度,zltail最后一个元素在ziplist的偏移。zllen表示元素个数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JzIypkm6-1627034378428)(H:\javawork\1230\Java_bfund\grammar regulation\image-20210103164611717.png)]

二、skiplist,包括一个dict(key->score)对象和skiplist(score->key的映射)对象。dict存key/value(key元素value分值)。

img

/*
 * 有序集合
 */
typedef struct zset {

    // 字典,键为成员,值为分值
    // 用于支持 O(1) 复杂度的按成员取分值操作
    dict *dict;

    // 跳跃表,按分值排序成员
    // 用于支持平均复杂度为 O(log N) 的按分值定位成员操作
    // 以及范围操作
    zskiplist *zsl;

} zset;
/*
 * 跳跃表
 */
typedef struct zskiplist {

    // 表头节点和表尾节点
    struct zskiplistNode *header, *tail;

    // 表中节点的数量
    unsigned long length;

    // 表中层数最大的节点的层数
    int level;

} zskiplist;

skiplist跳表中节点格式,每个节点保存数据的robj,分值score字段,backward便于回溯,zskiplistlevel的数组保存跳跃列表每层的节点数

/*
 * 跳跃表节点
 */
typedef struct zskiplistNode {

    // 成员对象
    robj *obj;

    // 分值
    double score;

    // 后退指针
    struct zskiplistNode *backward;

    // 层
    struct zskiplistLevel {

        // 前进指针
        struct zskiplistNode *forward;

        // 跨度,到达该层下一个节点实际(level[0])跨越了多少个节点
        unsigned int span;

    } level[];

} zskiplistNode;

zadd底层操作

1、如果是ziplist,存在则先删除后添加,不存在需要考虑总长度是否会大于64字节,数量是否小于128个。否则会转化成skiplist。

2、如果是skiplist,存在则先删除再添加,存在则直接添加,并且需要再dict那更新。

查找,类似二分(空间换时间),时间复杂度O(logn),分层,从最高层往下降去查找。L0层会有所有元素的有序排列。节点的level是随机的,level越底层,比重越高。

zadd key score1 member1 score2 member2

,并且需要再dict那更新。

查找,类似二分(空间换时间),时间复杂度O(logn),分层,从最高层往下降去查找。L0层会有所有元素的有序排列。节点的level是随机的,level越底层,比重越高。

zadd key score1 member1 score2 member2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的兼职网,源码+论文答辩+毕业论文+视频演示 随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,蜗牛兼职网当然也不能排除在外。蜗牛兼职网是以实际运用为开发背景,运用软件工程原理和开发方法,采用springboot框架构建的一个管理系统。整个开发过程首先对软件系统进行需求分析,得出系统的主要功能。接着对系统进行总体设计和详细设计。总体设计主要包括系统功能设计、系统总体结构设计、系统数据结构设计和系统安全设计等;详细设计主要包括系统数据库访问的实现,主要功能模块的具体实现,模块实现关键代码等。最后对系统进行功能测试,并对测试结果进行分析总结,得出系统中存在的不足及需要改进的地方,为以后的系统维护提供了方便,同时也为今后开发类似系统提供了借鉴和帮助。这种个性化的网上蜗牛兼职网特别注重交互协调与管理的相互配合,激发了管理人员的创造性与主动性,对蜗牛兼职网而言非常有利。 本蜗牛兼职网采用的数据库是MySQL,使用springboot框架开发。在设计过程中,充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。 功能要求:可以管理首页、个人中心、用户管理、企业管理、兼职信息管理、职位申请管理、留言板管理、系统管理等功能模块。 关键词:蜗牛兼职网,springboot框架 MySQL数据库 Java技术
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值