linux redis hash哈希 增删改查

hash:特殊的《键-域值》对

string类型的是 key-value 一一对应,而hash表的value由两部分构成:filed(域)、value(值)
在这里插入图片描述

命令

命令说明返回值示例截图
hset创建一个key、多个域值对在这里插入图片描述hmset student1 name zhx age 24 sex male在这里插入图片描述
hkeys查询一个key、所有域名在这里插入图片描述hkeys student在这里插入图片描述
hget查询一个key、一个域的值在这里插入图片描述hget student name在这里插入图片描述
hsetnx为不存在的 field 赋值,如果该 field 已存在,则操作无效,如果 key 不存在,则创建并执行在这里插入图片描述hsetnx student height 1801
hexists查看一个key、一个域 是否存在在这里插入图片描述hexists student name1
hgetall取一个key 、所有域和值在这里插入图片描述hgetall student1
hvals取一个key、所有value在这里插入图片描述hvals student1
hlen取一个key,filed的个数在这里插入图片描述hlen student1
hincrby字段加上指定增量值在这里插入图片描述hincrby student age 101
hincrbyfloat为哈希表中的字段加上指定的浮点数增量值在这里插入图片描述hincrbyfloat student age 10.51
hscan从一个key中、遍历 域值在这里插入图片描述在这里插入图片描述hscan student 0 match “*”1
hdel删除一个key、一个或多个域值对在这里插入图片描述hdel student name age1

As per Redis 4.0.0, HMSET is considered deprecated. Please use HSET in new code.
根据Redis 4.0.0,HMSET被视为已弃用。请在新代码中使用HSET。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
哈希表是一种常用的数据结构,可以用于快速查找和插入数据。以下是哈希表的增删改查的 C 语言实现: 1. 哈希表的初始化 ```c #define TABLE_SIZE 1000 // 哈希表的大小 typedef struct HashNode { char* key; int value; struct HashNode* next; } HashNode; typedef struct HashTable { HashNode** table; } HashTable; HashTable* createHashTable() { HashTable* ht = (HashTable*)malloc(sizeof(HashTable)); ht->table = (HashNode**)calloc(TABLE_SIZE, sizeof(HashNode*)); return ht; } ``` 2. 哈希函数 哈希函数将字符串转换为哈希表中的索引。一种简单的哈希函数是将每个字符的 ASCII 码相加,并取余哈希表的大小。 ```c int hash(char* key) { int sum = 0; while (*key != '\0') { sum += *key; key++; } return sum % TABLE_SIZE; } ``` 3. 插入元素 插入元素时,先计算哈希,然后在哈希表中查找对应的链表。如果链表中已经存在相同的键,更新即可;如果不存在相同的键,则在链表头插入新的节点。 ```c void put(HashTable* ht, char* key, int value) { int index = hash(key); HashNode* node = ht->table[index]; while (node != NULL) { if (strcmp(node->key, key) == 0) { node->value = value; return; } node = node->next; } HashNode* new_node = (HashNode*)malloc(sizeof(HashNode)); new_node->key = key; new_node->value = value; new_node->next = ht->table[index]; ht->table[index] = new_node; } ``` 4. 查找元素 查找元素时,先计算哈希,然后在哈希表中查找对应的链表。如果链表中存在相同的键,返回对应的;如果不存在相同的键,返回 NULL。 ```c int* get(HashTable* ht, char* key) { int index = hash(key); HashNode* node = ht->table[index]; while (node != NULL) { if (strcmp(node->key, key) == 0) { return &node->value; } node = node->next; } return NULL; } ``` 5. 删除元素 删除元素时,先计算哈希,然后在哈希表中查找对应的链表。如果链表中存在相同的键,删除对应的节点;如果不存在相同的键,什么也不做。 ```c void remove(HashTable* ht, char* key) { int index = hash(key); HashNode* node = ht->table[index]; HashNode* prev = NULL; while (node != NULL) { if (strcmp(node->key, key) == 0) { if (prev == NULL) { ht->table[index] = node->next; } else { prev->next = node->next; } free(node); return; } prev = node; node = node->next; } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值