zoukankan      html  css  js  c++  java
  • ***Redis hash是一个string类型的field和value的映射表.它的添加、删除操作都是O(1)(平均)。hash特别适合用于存储对象

    http://redis.readthedocs.org/en/latest/hash/hset.html

    HSET

    HSET key field value   (存一个对象的时候key存)

    将哈希表 key 中的域 field 的值设为 value 。

    如果 key 不存在,一个新的哈希表被创建并进行 HSET 操作。

    如果域 field 已经存在于哈希表中,旧值将被覆盖。

    可用版本:
    >= 2.0.0
    时间复杂度:
    O(1)
    返回值:
    如果 field 是哈希表中的一个新建域,并且值设置成功,返回 1 。
    如果哈希表中域 field 已经存在且旧值已被新值覆盖,返回 0 。
    redis> HSET website google "www.g.cn"       # 设置一个新域
    (integer) 1
    
    redis> HSET website google "www.google.com" # 覆盖一个旧域
    (integer) 0

     ------------------------------------------------------------------------------------

    http://langgufu.iteye.com/blog/1434408

    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都取出来了。

  • 相关阅读:
    Software Solutions CACHE COHERENCE AND THE MESI PROTOCOL
    CACHE COHERENCE AND THE MESI PROTOCOL
    Multiprocessor Operating System Design Considerations SYMMETRIC MULTIPROCESSORS
    Organization SYMMETRIC MULTIPROCESSORS
    PARALLEL PROCESSING
    1分钟内发送差评邮件
    Secure Digital
    SYMMETRIC MULTIPROCESSORS
    A Taxonomy of Parallel Processor Architectures
    parallelism
  • 原文地址:https://www.cnblogs.com/kenshinobiy/p/4316420.html
Copyright © 2011-2022 走看看