Redis数据类型之链表

Redis数据类型之链表


链表的实现

redis的列表的底层实现就是一个双链表,源码在src下的adlist.h和adlist.c

链表的结点数据结构

    /*
     * 双端链表节点
     */
    typedef struct listNode {

        // 前置节点
        struct listNode *prev;

        // 后置节点
        struct listNode *next;

        // 节点的值
        void *value;

    } listNode;

链表数据结构

/*
 * 双端链表结构
 */
typedef struct list {

    // 表头节点
    listNode *head;

    // 表尾节点
    listNode *tail;

    // 节点值复制函数
    void *(*dup)(void *ptr);

    // 节点值释放函数
    void (*free)(void *ptr);

    // 节点值对比函数
    int (*match)(void *ptr, void *key);

    // 链表所包含的节点数量
    unsigned long len;

} list;

链表的redis的具体功能

  1. 列表键
  2. 发布与订阅
  3. 慢查询
  4. 监视器

部分函数的时间复杂度

// 返回给定链表所包含的节点数量
// T = O(1)
#define listLength(l) ((l)->len)
// 返回给定链表的表头节点
// T = O(1)
#define listFirst(l) ((l)->head)
// 返回给定链表的表尾节点
// T = O(1)
#define listLast(l) ((l)->tail)
// 返回给定节点的前置节点
// T = O(1)
#define listPrevNode(n) ((n)->prev)
// 返回给定节点的后置节点
// T = O(1)
#define listNextNode(n) ((n)->next)
// 返回给定节点的值
// T = O(1)
#define listNodeValue(n) ((n)->value)

// 将链表 l 的值复制函数设置为 m
// T = O(1)
#define listSetDupMethod(l,m) ((l)->dup = (m))
// 将链表 l 的值释放函数设置为 m
// T = O(1)
#define listSetFreeMethod(l,m) ((l)->free = (m))
// 将链表的对比函数设置为 m
// T = O(1)
#define listSetMatchMethod(l,m) ((l)->match = (m))

// 返回给定链表的值复制函数
// T = O(1)
#define listGetDupMethod(l) ((l)->dup)
// 返回给定链表的值释放函数
// T = O(1)
#define listGetFree(l) ((l)->free)
// 返回给定链表的值对比函数
// T = O(1)
#define listGetMatchMethod(l) ((l)->match)
/*
 * 创建一个新的链表
 *
 * 创建成功返回链表,失败返回 NULL 。
 *
 * T = O(1)
 */
list *listCreate(void)
{
    struct list *list;

    // 分配内存
    if ((list = zmalloc(sizeof(*list))) == NULL)
        return NULL;

    // 初始化属性
    list->head = list->tail = NULL;
    list->len = 0;
    list->dup = NULL;
    list->free = NULL;
    list->match = NULL;

    return list;
}

注意,这里的分配 malloc函数,是自己实现的zmalloc

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-15 21:51:44

Redis数据类型之链表的相关文章

Redis数据类型之-- 链表(List)

1. List 介绍: List是一个链表结构,主要功能是push.pop.获取一个范围的所有值等等,操作中key理解为链表的名字. Redis的list类型其实就是一个每个子元素都是string类型的双向链表. 我们可以通过push.pop操作从链表的头部或者尾部添加删除元素,这样list既可以作为栈,又可以作为队列. 方法: 1. lpush  在key对应list的头部添加字符串元素 lpush mylist "world" lpush mylist "hello&qu

Redis数据类型之字典

Redis数据类型之字典 标签(空格分隔): redis redis的字典 字典又称符号表(symbol table),关联数组(associative array),或者映射(map).是用于保存键值对的一种抽象数据结构. 字典的key是唯一的,对键值对的操作基本都是基于key来操作的.redis中的数据库底层是使用字典来实现的,对于数据库的增删改查都是基于字典来实现的.redis的哈希键也是基于字典来实现的. 具体的实现是在src下的dict.h和dict.c文件 字典的数据结构 哈希表结点

redis数据类型及使用场景

Redis数据类型  String: Strings 数据结构是简单的key-value类型,value其实不仅是String,也可以是数字. 常用命令:  set,get,decr,incr,mget 等. 应用场景:String是最常用的一种数据类型,普通的key/ value 存储都可以归为此类.即可以完全实现目前 Memcached 的功能,并且效率更高.还可以享受Redis的定时持久化,操作日志及 Replication等功能.除了提供与 Memcached 一样的get.set.in

redis使用基础(二) ——Redis数据类型

redis使用基础(二) --Redis数据类型 (转载请附上本文链接--linhxx)  一.概述 Redis是一种Key-Value类型的数据库,属于非关系型数据库,NoSQL的一种.Redis共有5种数据类型:字符串(string).散列(hash).列表(list).集合(set).有序集合(zset). 1.通配符 Redis支持部分通配符,包括?.*.[].\x,和正则表达式一致,?表示匹配0或1个,*匹配任意个,[]匹配框内的任意一个内容,\x转义,例如\?表示匹配?. 2.获取键

redis数据类型及常用命令

一.redis数据类型 Redis的五大数据类型 1.string(字符串) String(字符串) string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value. string类型是二进制安全的.意思是redis的string可以包含任何数据.比如jpg图片或者序列化的对象 . string类型是Redis最基本的数据类型,一个redis中字符串value最多可以是512M 2.hash(哈希,类似java里的Map) Hash(哈希) R

redis数据类型的使用和介绍

redis数据类型的使用 list  列表 最多可以存2的32次方减1 个 元素组成列表 用来存储多个有序的字符串. 在redis中,可以对列表俩端插入(push)和(pop)弹出,还可以获得制定范围的元素列表,获取指定索引下表的元素等 元素可以重复 命令操作 操作类型 操作 添加 : rpush    lpush   linsert 查 : lrange    lindex  llen 删除  : lpop    rpop  lrem  ltrim 修改 :   lset 阻塞操作  :  b

redis介绍、redis安装、redis持久化、redis数据类型

一:redis介绍 Redis和Memcached类似,也属于k-v数据存储Redis官网redis.io, 当前最新稳定版4.0.1支持更多value类型,除了和string外,还支持hash.lists(链表).sets(集合)和sorted sets(有序集合)redis使用了两种文件格式:全量数据(RDB)和增量请求(aof).全量数据格式是把内存中的数据写入磁盘,便于下次读取文件进行加载.增量请求文件则是把内存中的数据序列化为操作请求,用于读取文件进行replay得到数据,这种类似于m

二:Redis数据类型

一.?nosql(非关系性数据库): mongoDB hbase redis nulch hive pig mahout zookeeper 二:redis 数据类型 1.存储string: 常用命令: 设置/取值: set key value get key getset key value del key 数值增减: incr key decr key 扩展命令: incrby key increment decrby key decrement append key value 2.存储h

03 . redis 数据类型介绍

Redis  数据类型 1 . 5种类型: String :字符类型 Hash:   字典类型 List:   列表 Set:    集合 Sorted set:有序集合 2 . 键的通用操作命令: KEYS *          查看KEY支持通配符 DEL  删除给定的一个或多个key EXISTS          检查是否存在 RENAME      变更KEY名 SORT      键值排序,有非数字时报错 TYPE      返回键所存储值的类型 DUMP RESTORE   序例化