知识点

相关文章

更多

最近更新

更多

Redis 哈希(Hash)详解

2019-04-17 23:39|来源: 网路

Redis 哈希(Hash)

Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。

Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。

实例

redis 127.0.0.1:6379> HMSET w3ckey name "redis tutorial" description "redis basic commands for caching" likes 20 visitors 23000
OK
redis 127.0.0.1:6379> HGETALL w3ckey

1) "name"
2) "redis tutorial"
3) "description"
4) "redis basic commands for caching"
5) "likes"
6) "20"
7) "visitors"
8) "23000"


在以上实例中,我们设置了 redis 的一些描述信息(name, description, likes, visitors) 到哈希表的 w3ckey 中。


Redis hash 命令

下表列出了 redis hash 基本的相关命令:

序号 命令及描述
1 HDEL key field2 [field2]
删除一个或多个哈希表字段
2 HEXISTS key field
查看哈希表 key 中,指定的字段是否存在。
3 HGET key field
获取存储在哈希表中指定字段的值
4 HGETALL key
获取在哈希表中指定 key 的所有字段和值
5 HINCRBY key field increment
为哈希表 key 中的指定字段的整数值加上增量 increment 。
6 HINCRBYFLOAT key field increment
为哈希表 key 中的指定字段的浮点数值加上增量 increment 。
7 HKEYS key
获取所有哈希表中的字段
8 HLEN key
获取哈希表中字段的数量
9 HMGET key field1 [field2]
获取所有给定字段的值
10 HMSET key field1 value1 [field2 value2 ]
同时将多个 field-value (域-值)对设置到哈希表 key 中。
11 HSET key field value
将哈希表 key 中的字段 field 的值设为 value 。
12 HSETNX key field value
只有在字段 field 不存在时,设置哈希表字段的值。
13 HVALS key
获取哈希表中所有值
14 HSCAN key cursor [MATCH pattern] [COUNT count]
迭代哈希表中的键值对。

更多命令请参考:https://redis.io/commands

redis知识点

redis快速入门

reids常用命令

redis数据结构

java_API_客户端

Jedis

Tlcache

redis_持久化

AOF

RDB

发布订阅(pub/sub)

redis_事件

redis事务

redis通讯协议

RESP(Redis Serialization Protocol)

redis高可用

redis哨兵

监控(Monitoring) 提醒(Notification) 自动故障迁移(Automatic failover)

redis主从复制

  • 复制模式

    1. 主从复制
    2. 从从复制
  • 复制过程

    • slave向master发送sync命令;
    • master开启子进程执行bgsave写入rdb文件;
    • master发送缓存和RDB文件给slave;
    • master发送数据发送给slave完成复制;

redis集群(Redis_Cluster)

相关问答

更多
  • 你误解了HSET在Redis中的作用 。 它不是用于保存整个Perl数据结构。 它用于在Redis提供的哈希数据结构内的特定键下保存单个值。 这与普通的键/值存储操作不同,因为您可以在其上使用其他Redis哈希相关操作。 您想要做的就是保存一个完整的Perl数据结构供以后使用,而无需在Redis中对其中的数据进行操作。 您可以使用常规的SET操作,但需要为此序列化 Perl数据结构。 本质上,这意味着将Perl程序用于将这些值存储的内存转换为其他程序可以理解的字符数据。 在Perl中序列化和反序列化数据的常 ...
  • Redis哈希很适合存储更复杂的数据,就像您在问题中提出的那样。 我正在使用它们 - 存储需要缓存的多个属性的对象(具体来说,是电子商务网站上特定产品的库存数据)。 当然,我可以使用一个连接的字符串,但这会增加我客户端代码的不必要的复杂性,并且更新一个单独的字段是不可能的。 你可能是对的 - 教程可能只是从Hash引入之前。 它们被明确地设计用于存储对象表示: http : //oldblog.antirez.com/post/redis-weekly-update-1.html 我想,当一个简单的Stri ...
  • (这是基于Holger Just的评论纠正我的修正。) 有一个专为您的需求而设计的库叫做concurrent-ruby 。 请访问https://github.com/ruby-concurrency/concurrent-ruby查看。 它有一个Hash类( http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/Hash.html )和一个Map类( http://ruby-concurrency.github.io/concurrent ...
  • 它可能,但不是HASH对象,而是有序集。 只要排序集中的所有元素具有相同的分数,您就可以进行字典前缀匹配。 假设您执行以下操作(原始redis命令,但同样适用于python客户端): ZADD foo 0 john:newyork: ZADD foo 0 john:chicago: ZADD foo 0 kate:chicago: .... 然后,您可以使用ZRANGEBYLEX进行查询: ZRANGEBYLEX foo [john: (j ...
  • 如果您指的是散列内的值或条目。 那是不可能的。 hset hash /article/200 1 hset hash /article/200?something 2 hset hash somethingelse 3 检索此哈希中的条目是不可能的。 您需要在应用程序逻辑中处理它们,或者您必须为此编写lua脚本。 如果你想要哈希,即,检索键,那么它是可能的。 hset /article/200 value1 1 hset /article/200?something value2 2 hset somet ...
  • 确保你使用正确的max-memorypolicy(你可能不想要allkeys-lru,因为redis会使访问次数最少的密钥到期,无论它们是否过期)。 您还应该确保redis有足够的内存来存储您不希望过期或被redis驱逐的密钥。 (redis maxmemory config与系统内存相比) 如果您使用不驱逐策略,请确保redis永远不会耗尽内存。 Make sure that you are using the right max-memorypolicy (you probably dont want ...
  • 这是一个已知的问题: 链接 你可以做以下事情: redis 127.0.0.1:6379> sadd b 5 3 4 redis 127.0.0.1:6379> zadd a 10 1 15 2 5 3 0 4 20 5 redis 127.0.0.1:6379> zinterstore结果2 ab redis 127.0.0.1:6379> zrange结果0 -1 1)“4” 2)“3” 3)“5” this is a know issue: link you could do the followin ...
  • 你需要使用HKEYS命令。 见下面的例子: redis> HSET myhash field1 "Hello" (integer) 1 redis> HSET myhash field2 "World" (integer) 1 redis> HKEYS myhash 1) "field1" 2) "field2" 数组回复:哈希中的字段列表,或者当密钥不存在时的空列表。 you need to use HKEYS command. see example below: redis> HSET myhash ...
  • 如果您希望更改(或添加)散列中的单个值,则可以使用HSET命令。 这不会从redis“获取”哈希值(将其返回给您),它只会修改它。 在您的情况下,命令将是HSET YourHashName d 10 。 关于redis.io的HSET文档 如果您发现一次更改多个值,请使用HMSET 。 此命令比多个HSET调用更有效地执行相同的操作,因为它在网络上不那么繁琐。 关于redis.io的HMSET文档 请记住,在散列中添加或更改数据时,您不需要首先读取/获取散列(或任何单个散列键值)。 此外,如果在设置其数据时 ...
  • 访问给定哈希对象的随机项(或第一个或最后一个)没有技巧。 如果您需要迭代哈希对象,您有几种可能性: 第一个是用你可以切片的另一个数据结构(如列表或zset)来补充哈希。 如果只在哈希中添加项目(并迭代删除它们),则列表就足够了。 如果您可以添加/删除/更新项目(并迭代删除它们),则需要zset(将时间戳作为分数)。 zset的两个列表都可以被切片(lrange,zrange,zrangebyscore),因此很容易通过chunk迭代它们,并保持两个数据结构同步。 第二个是用另一个支持pop类似操作的数据结构 ...