• Redis hash 类型及操作


    原文:http://blog.sina.com.cn/s/blog_5f044a4d0102v01k.html

    Redis hash是一个string类型的field和value的映射表.它的添加、删除操作都是 O(1) (平均)。
    hash特别适合用于存储对象。相较于将对象的每个字段存成单个 string类型。将一个对象存
    储在 hash 类型中会占用更少的内存,并且可以更方便的存取整个对象。省内存的原因是新
    建一个hash对象时开始是用 zipmap(又称为small hash)来存储的。这个zipmap其实并不
    是hash table,但是zipmap 相比正常的hash实现可以节省不少 hash本身需要的一些元数据
    存储开销。尽管zipmap的添加,删除,查找都是 O(n),但是由于一般对象的 field数量都不 
    太多。所以使用 zipmap 也是很快的,也就是说添加删除平均还是 O(1)。如果 field 或者 value
    的大小超出一定限制后, Redis会在内部自动将zipmap替换成正常的hash实现.  这个限制可
    以在配置文件中指定
    hash-max-zipmap-entries 64 #配置字段最多64个
    hash-max-zipmap-value 512 #配置value 最大为512字节
    1 hset
    设置hash field为指定值,如果 key 不存在,则先创建。
    redis 127.0.0.1:6379> hset myhash field1 Hello
    (integer) 1
    redis 127.0.0.1:6379>
    2 hsetnx
    设置hash field为指定值,如果 key 不存在,则先创建。如果 field已经存在,返回0,nx是
    not exist的意思。
    redis 127.0.0.1:6379> hsetnx myhash field "Hello"
    (integer) 1
    redis 127.0.0.1:6379> hsetnx myhash field "Hello"
    (integer) 0
    redis 127.0.0.1:6379>
    第一次执行是成功的,但第二次执行相同的命令失败,原因是field已经存在了。
    3 hmset
    同时设置hash的多个field。
    redis 127.0.0.1:6379> hmset myhash field1 Hello field2 World
    OK
    redis 127.0.0.1:6379>
    4 hget
    获取指定的hash field。
    redis 127.0.0.1:6379> hget myhash field1
    "Hello"
    redis 127.0.0.1:6379> hget myhash field2
    "World"
    redis 127.0.0.1:6379> hget myhash field3
    (nil)
    redis 127.0.0.1:6379> 
    由于数据库没有field3,所以取到的是一个空值nil
    5 hmget
    获取全部指定的hash filed。
    redis 127.0.0.1:6379> hmget myhash field1 field2 field3
    1) "Hello"
    2) "World"
    3) (nil)
    redis 127.0.0.1:6379>
    由于数据库没有field3,所以取到的是一个空值nil
    6 hincrby
    指定的hash filed  加上给定值。
    redis 127.0.0.1:6379> hset myhash field3 20
    (integer) 1
    redis 127.0.0.1:6379> hget myhash field3
    "20"
    redis 127.0.0.1:6379> hincrby myhash field3 -8
    (integer) 12
    redis 127.0.0.1:6379> hget myhash field3
    "12"
    redis 127.0.0.1:6379>
    在本例中我们将field3 的值从20 降到了12,即做了一个减8 的操作。
    7 hexists
    测试指定field是否存在。
    redis 127.0.0.1:6379> hexists myhash field1
    (integer) 1
    redis 127.0.0.1:6379> hexists myhash field9
    (integer) 0
    redis 127.0.0.1:6379>
    通过上例可以说明field1存在,但field9是不存在的。
    8 hlen
    返回指定hash的field数量。
    redis 127.0.0.1:6379> hlen myhash
    (integer) 4
    redis 127.0.0.1:6379>
    通过上例可以看到myhash中有4 个field。
    9 hdel
    删除指定hash的field。
    redis 127.0.0.1:6379> hlen myhash
    (integer) 4
    redis 127.0.0.1:6379> hdel myhash field1
    (integer) 1
    redis 127.0.0.1:6379> hlen myhash
    (integer) 3
    redis 127.0.0.1:6379>
    10 hkeys
    返回hash的所有field。
    redis 127.0.0.1:6379> hkeys myhash
    1) "field2"
    2) "field"
    3) "field3"
    redis 127.0.0.1:6379>
    说明这个hash中有3 个field
    11 hvals
    返回hash的所有value。
    redis 127.0.0.1:6379> hvals myhash
    1) "World"
    2) "Hello"
    3) "12"
    redis 127.0.0.1:6379>
    说明这个hash中有3 个field
    12 hgetall
    获取某个hash中全部的 filed及value。
    redis 127.0.0.1:6379> hgetall myhash
    1) "field2"
    2) "World"
    3) "field"
    4) "Hello"
    5) "field3"
    6) "12"
    redis 127.0.0.1:6379>
    可见,一下子将myhash 中所有的field及对应的value 都取出来了。

  • 相关阅读:
    Python3安装turtle提示错误:Command "python setup.py egg_info" failed with error code 1
    慕学生鲜xadmin登录不成功解决办法
    mysql删除后ID不连续解决办法
    Mac 安装gevent
    ubuntu 下 docker的简单使用
    python 字典的一些简单操作
    列表推导式
    Serializer字段和选项
    添加包解决一些导包问题
    css 文本换行,文本空白符处理相关 属性:white-space word-wrap word-break
  • 原文地址:https://www.cnblogs.com/oxspirt/p/4939272.html
Copyright © 2020-2023  润新知