zoukankan      html  css  js  c++  java
  • 《Redis核心原理与实战》学习笔记4——字典使用与内部实现原理

    一、简介

    字典类型 (Hash) 又被成为散列类型或者是哈希表类型,它是将一个键值 (key) 和一个特殊的“哈希表”关联起来,这个“哈希表”表包含两列数据:字段和值。
    存储结构如下图所示:

    二、基础使用

    1、插入单个元素

    语法:hset key field value

    127.0.0.1:6379> hset myhash key1 value1
    (integer) 1
    127.0.0.1:6379> hset myhash key1 value2
    (integer) 0
    
    127.0.0.1:6379> hget myhash key1
    "value2"
    

    hset将哈希表key中的域key1的值设为value1。如果key不存在,一个新的哈希表被创建,返回1,如果域key1已经存在,旧值将被value2覆盖,返回0。

    语法:hsetnx key field value

    127.0.0.1:6379> hsetnx myhash key2 value3
    (integer) 1
    127.0.0.1:6379> hset myhash key2 value4
    (integer) 0
    
    127.0.0.1:6379> hget myhash key2
    "value3"
    

    hsetnx将哈希表key中的域key2的值设为value3。如果key2不存在,一个新的哈希表被创建,返回1,如果域key2已经存在,旧值不会被value4覆盖,返回0。

    2、查询单个元素

    语法:hget key field

    127.0.0.1:6379> hget myhash key1
    "value2"
    

    3、删除单个或多个元素

    hdel myhash field [field …]

    127.0.0.1:6379> hdel myhash key1 key2
    (integer) 1
    

    4、某个整数值累加计算

    语法:hincrby key field increment

    127.0.0.1:6379> hset myhash key3 25
    (integer) 1
    127.0.0.1:6379> hincrby myhash key3 26
    (integer) 51
    127.0.0.1:6379> hget myhash key3
    "51"
    

    三、数据结构与内部实现

    1、字典类型是由数组和链表组成。

    2、字典类型的存储流程是先将键值进行 Hash 计算,得到存储键值对应的数组索引,再根据数组索引进行数据存储。

    3、为了保证应用的高性能运行,字典进行扩容或者缩容是会采取渐进式rehash的机制。它的执行流程是同时保留两个哈希表,把旧表中的元素一点一点的移动到新表中,查询的时候会先查询两个哈希表,当所有元素都移动到新的哈希表之后,就会删除旧的哈希表。

    四、应用场景

    1、商品购物车,购物车非常适合用哈希字典表示,使用人员唯一编号作为字典的key,value值可以存储商品的id和数量等信息;

    2、存储用户的属性信息,使用人员唯一编号作为字典的key,value 值为属性字段和对应的值;

    3、存储文章详情页信息,使用文章唯一编号作为字典的key,value值为标题、内容、创建时间和对应的值等。

  • 相关阅读:
    Hibernate3 第一天
    Struts2第四天
    Struts2第二天
    Struts2第一天
    【剑指offer】数字在排序数组中出现的次数,C++实现
    【剑指offer】两个链表的第一个公共结点,C++实现
    【剑指offer】数组中的逆序对。C++实现
    [Python]定时任务框架 APScheduler
    [pandas] SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame
    alicode35-找出二叉搜索树的第2大的数
  • 原文地址:https://www.cnblogs.com/luckyliulin/p/13568246.html
Copyright © 2011-2022 走看看