美文网首页
Redis 是命中效率高, 还是不命中效率高

Redis 是命中效率高, 还是不命中效率高

作者: Yellowtail | 来源:发表于2019-10-16 20:54 被阅读0次

概述

最近在思考一个问题,我们想判断redis 里存不存在一个预期值,有两种实现思路

  1. 判断型
    exists(key) 或者 null != redis.get(key)
  2. 预期型
    "expectedValue".eqauls(redis.get(key))

第一种,就是说 redis 里可能不存在这个值
第二种,redis里这个key 肯定对应一个 value,只不过可能不是我们预期的值

那么到底哪个效率高呢,
搜索了一番资料,整理发在这里

redis get 原理

oschina
CSDN大佬解析源码

redis 内存结构如下

typedef struct  redisDb 
{
    dict *dict;                 /* The keyspace for this DB */
    dict *expires;              /* Timeout of keys with a timeout set */
    dict *blocking_keys;    /* Keys with clients waiting for data (BLPOP) */
    dict *io_keys;              /* Keys with clients waiting for VM I/O */
    dict *watched_keys;         /* WATCHED keys for MULTI/EXEC CAS */
    int id;
} redisDb;

redisDb 中 ,dict 成员是与实际存储数据相关的. dict 的定义如下:

typedef struct dict 
{
    dictType *type;
    void *privdata;
    dictht ht[2];
    int rehashidx; /* rehashing not in progress if rehashidx == -1 */
    int iterators; /* number of iterators currently running */
} dict;

typedef struct dictht 
{
    dictEntry **table;
    unsigned long size;
    unsigned long sizemask;
    unsigned long used;
} dictht;

typedef struct dictEntry
{
    void *key;
    void *val;
    struct dictEntry *next;
} dictEntry;

借用大佬画的图


image

我们看到 ht[0] ,可以理解成 javaHashMap 的数组
这个“数组” 存的是一个一个的 dictEntry, 类似于 javaHashMapEntry,
dictEntry 存的是 key 指针(指向key)和 value 指针(指向value),还有链表的next节点

其实分析下来结构和 javaHashMap 高度类似

结论

Java 里, HashMapget 逻辑是这样的:
传入key
算出keyhashcode
hashcode 和 数组长度做一个运算,得到 索引
取索引处的链表(java8里有可能是红黑树), 遍历比较得到 value

对于 redis , 结合 脚本之家 这篇文章,
可以发现get原理和 HashMapget 类似

所以:
命中不命中 单次查询效率是一致的

当然了,对于redis整体的影响,我就不清楚了,还没有研究

相关文章

  • Redis 是命中效率高, 还是不命中效率高

    概述 最近在思考一个问题,我们想判断redis 里存不存在一个预期值,有两种实现思路 判断型exists(key)...

  • 基于redis的分布式限流方案

    为什么要选用redis: redis效率高,易扩展redis对语言无关,可以更好的接入不同语言开发的系统(异构)r...

  • 问题整理

    1、代理的效率高,还是KVO的效率高? 代理的效率高,因为代理不会动态的生成类 2、怎么拿到一个对象的类对象,怎么...

  • redis队列操作

    redis队列操作redis-MQ redis的队列效率高,而且简单易用。下面我说一个最近项目中的需求,来介绍re...

  • 单任务效率高还是多任务效率高?

    在工作中经常会面临很多项工作任务,那么是单一做一件任务结束后再开始其他的任务还是同时进行几项任务的效率高呢? 单任...

  • 企业家谈管理

    第 一,董明珠开会效率高。 为什么董明珠开例会效率高?因为她有五有、五不、四框架。五有是开会要有准备,有主题...

  • 关于SQL优化的小知识

    负向查询不命中索引 不命中 命中 前置模糊查询不命中索引 不命中 命中 建议可以考虑使用 Lucene 等全文索引...

  • 827 - 今日总结

    4月24日 周三 ✅学习总结 1、睡足觉 效率高。 评论:安安心心把觉睡足,白天效率高了比什么都划算。这里的效率高...

  • Java执行效率

    一、swich和ifelse哪个执行效率高? 解答: swich的效率高 原理: swich是将所有的可能性生成一...

  • 效率高

    虽然今天到上海虹桥之后打车有点不顺 但接下去一整天的效率极高 最近每天2杯咖啡支撑 又是一个只能睡4小时的日子 赶...

网友评论

      本文标题:Redis 是命中效率高, 还是不命中效率高

      本文链接:https://www.haomeiwen.com/subject/sgqpmctx.html