Redis之哈希

存储Hash

String key和String Value的Map容器

每一个Hash可以存储4294967295个键值对

存储Hash常用命令:

赋值 (hset)

取值(hget,hgetall,hkeys)

删除(hdel)

增加数字(hincr,hincrby)

判断字段是否存在(hexist)

获取hash属性个数(hlen)

获取hash所有属性名称(hvals)

定义h1 以及username和password字段 值分别是java1234 123456

hget单个字段设置

127.0.0.1:6379> hset h1 username java1234

(integer) 1

127.0.0.1:6379> hset h1 password 123456

(integer) 1

127.0.0.1:6379> hget h1 username

“java1234”

127.0.0.1:6379> hget h1 password

“123456”

hmset 多个字段一起设置

127.0.0.1:6379> hmset h2 username open1111 password 23456

OK

127.0.0.1:6379> hmget h2 username

1) “open1111”

127.0.0.1:6379> hmget h2 password

1) “23456”

127.0.0.1:6379> hmget h2 username password

1) “open1111”

2) “23456”

127.0.0.1:6379> hgetall h2

1) “username”

2) “open1111”

3) “password”

4) “23456”

hdel删除属性

可以一次删除一个或者多个

127.0.0.1:6379> hdel h2 username password

(integer) 2

127.0.0.1:6379> hgetall h2

(empty list or set)

hincrby增加数字

127.0.0.1:6379> hset h1 age 20

(integer) 1

127.0.0.1:6379> hincrby h1 age 5

(integer) 25

hexists判断字段是否存在 1表示存在 0表示不存在

127.0.0.1:6379> hexists h1 age

(integer) 1

127.0.0.1:6379> hexists h1 age2

(integer) 0

hlen获取hash属性个数

127.0.0.1:6379> hlen h1

(integer) 3

127.0.0.1:6379> hlen h2

(integer) 0

hkeys获取所有属性名称

127.0.0.1:6379> hkeys h1

1) “username”

2) “password”

3) “age”

127.0.0.1:6379> hkeys h2

(empty list or set)

hvals获取所有属性值

127.0.0.1:6379> hvals h1

1) “java1234”

2) “123456”

3) “25”

127.0.0.1:6379> hvals h2

(empty list or set)

127.0.0.1:6379>

### Redis哈希冲突的解决方案 在 Redis 的设计中,为了应对哈希冲突的情况,默认情况下使用了两个哈希表。其中一个哈希表(哈希表2)在未发生大量哈希冲突时不预先分配内存空间[^2]。 #### 渐进式 rehash 方案 当哈希冲突变得频繁时,Redis 实施了一种称为 **渐进式 rehash** 的策略来处理这个问题。该方法的核心在于逐步迁移键值对到新的哈希表中,而不是一次性完成整个重哈希操作。具体来说,在每次执行命令的过程中,Redis 都会检查当前是否正在进行 rehash;如果是,则会在后台自动将一部分桶的数据迁移到新创建的哈希表上。这种方式可以有效减少因大规模数据移动带来的延迟影响。 #### Rehash 过程中的读写支持 在整个 rehash 期间,旧有的哈希表仍然可用,这意味着客户端依然能够正常地进行查询、插入以及删除等操作而不会受到干扰。对于新增加或者更新的数据项,它们会被放置于最新的哈希表里;而对于来自旧有哈希表上的请求,则通过遍历两个表格来进行定位和响应[^3]。 ```python def get_value(key, hash_table_1, hash_table_2=None): value = hash_table_1.get(key) if not value and hash_table_2 is not None: value = hash_table_2.get(key) return value def set_value(key, value, hash_table_1, hash_table_2=None): if hash_table_2 is not None: hash_table_2[key] = value else: hash_table_1[key] = value ``` 这种机制不仅提高了系统的稳定性和效率,同时也简化了应用程序层面的设计复杂度,因为开发者无需特别考虑底层存储结构的变化所带来的兼容性问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值