Redis系列(二)

一、基本数据类型
   Redis支持六种数据类型:string(字符串)、hash(哈希),list(列表),set(集合),zset(sorted set:有序集合),stream(5.0版本+)
   不常见的类型:bitmap ,HyperLogLog(2.8.9版本+),Geo(3.2版本+)。

二、常见类型命令操作
   1、string类型可以使用get、set、del、incr、decr等操作
     数据结构是采用(Simple Dynamic String)SDS,而非C的字符串类型。
     结构:  typedef char *sds;
        struct sdshdr {
            // buf 已占用长度
            int len;
            // buf 剩余可用长度
            int free;
            // 实际保存字符串数据的地方
            char buf[];
        };    
     其存储数据结构决定计算长度的算法复杂度为O(1) ,另外在因为存在free的空间可以使得在字符串追加是减少内存重新分配的次数,二进制安全(不会产生内存溢出)。
     分配策略,及触发时间,首次创建时free=0,当字符串变更时重新分配内存。
     # 如果新字符串的总长度小于 SDS_MAX_PREALLOC (命令查看:)
     # 那么为字符串分配 2 倍于所需长度的空间
     # 否则就分配所需长度加上 SDS_MAX_PREALLOC 数量的空间
    Java 操作方式:redisTemplate.opsForValue()**  @see org.springframework.data.redis.core.ValueOperations
  2、hash类型可以使用hmget、hmset、hgetall、hkeys等操作
     其数据结构:字典结构,字典结构底层是通过简单,高效的哈希表实现。
     结构:/*
              * 字典
              * 每个字典使用两个哈希表,用于实现渐进式 rehash
              */
      typedef struct dict {
          // 特定于类型的处理函数
          dictType *type;
          // 类型处理函数的私有数据
          void *privdata;
          // 哈希表(2 个 ht[0]  ht[1])
          dictht ht[2];
          // 记录 rehash 进度的标志,值为 -1 表示 rehash 未进行
          int rehashidx;
          // 当前正在运作的安全迭代器数量
          int iterators;
      } dict;
    /*
     * 哈希表
     */
    typedef struct dictht {
        // 哈希表节点指针数组(俗称桶,bucket)
        dictEntry **table;
        // 指针数组的大小
       unsigned long size;
       // 指针数组的长度掩码,用于计算索引值
       unsigned long sizemask;
       // 哈希表现有的节点数量
      unsigned long used;
   } dictht;
        /*
         * 哈希表节点
         */
       typedef struct dictEntry {
         // 键
         void *key;
         // 值
          union {
            void *val;
            uint64_t u64;
            int64_t s64;
         } v;
         // 链往后继节点
        struct dictEntry *next;
      } dictEntry;
         Redis 目前使用两种不同的哈希算法:
            A:MurmurHash2 32 bit 算法:这种算法的分布率和速度都非常好, 具体信息请参考 MurmurHash 的主页: [http://code.google.com/p/smhasher/] 。
            B: 基于 djb 算法实现的一个大小写无关散列算法:具体信息请参考 [http://www.cse.yorku.ca/~oz/hash.html] 。
          使用哪种算法取决于具体应用所处理的数据:
               命令表以及 Lua 脚本缓存都用到了算法 B。
               算法A 的应用则更加广泛:数据库、集群、哈希键、阻塞操作等功能都用到了这个算法。
          Java操作:redisTemplate.opsForHash()
    3、list类型可以使用rpush、lpush、rpop、lpop等
       底层结构:压缩链表或者双端链表
       Java操作: redisTemplate.opsForList()
    4、集合类型可以使用sadd、srem、scard、spop、smove登录
       底层数据结构:字典
       Java操作: redisTemplate.opsForSet()
    5、有序集合可以使用zadd、zrem等
       底层数据结构:跳跃表
       Java操作: redisTemplate.opsForZSet()        
 三、java中redis常见连接工具
  redisson,
  jedis是redis官方推荐的
  springboot的redisTemplate
  等等
 四、参考链接
    [https://redisbook.readthedocs.io/]
    [http://redisinaction.com/]
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,133评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,682评论 3 390
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,784评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,508评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,603评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,607评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,604评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,359评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,805评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,121评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,280评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,959评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,588评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,206评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,442评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,193评论 2 367
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,144评论 2 352