什么網(wǎng)站做網(wǎng)頁好/站長之家ip地址查詢
這節(jié)記錄下Redis的Hash操作。主要是opsForHash方式和boundHashOps方式。
boundHashOps
和opsForHash
都是Spring Data Redis中用于操作Redis哈希數(shù)據(jù)結(jié)構(gòu)的方法,但它們在使用方式和場景上存在一些區(qū)別。
boundHashOps
-
使用方式:
boundHashOps
方法通過RedisTemplate的boundHashOps(String key)
方法獲取一個(gè)BoundHashOperations
實(shí)例。這個(gè)實(shí)例與特定的哈希鍵(key)綁定,使得后續(xù)的操作都是針對這個(gè)特定的哈希鍵進(jìn)行的。- 這種方式使得操作更加直觀和方便,因?yàn)橐坏┙壎斯fI,就可以通過BoundHashOperations實(shí)例提供的方法直接對這個(gè)哈希鍵下的數(shù)據(jù)進(jìn)行操作,而無需在每次操作中都指定哈希鍵。
-
適用場景:
- 當(dāng)需要對某個(gè)特定的哈希鍵進(jìn)行頻繁的操作時(shí),使用
boundHashOps
可以簡化代碼,提高開發(fā)效率。
- 當(dāng)需要對某個(gè)特定的哈希鍵進(jìn)行頻繁的操作時(shí),使用
opsForHash
-
使用方式:
opsForHash
方法通過RedisTemplate的opsForHash()
方法獲取一個(gè)HashOperations
實(shí)例。這個(gè)實(shí)例不是與特定的哈希鍵綁定的,而是可以直接用于操作Redis中的所有哈希數(shù)據(jù)結(jié)構(gòu)。- 在進(jìn)行哈希操作時(shí),需要顯式地指定哈希鍵和字段名。
-
適用場景:
- 當(dāng)需要在多個(gè)哈希鍵之間進(jìn)行操作,或者操作的哈希鍵不是固定的時(shí),使用
opsForHash
可能更加靈活。
- 當(dāng)需要在多個(gè)哈希鍵之間進(jìn)行操作,或者操作的哈希鍵不是固定的時(shí),使用
區(qū)別總結(jié)
boundHashOps | opsForHash | |
---|---|---|
使用方式 | 通過RedisTemplate的boundHashOps(String key)方法獲取與特定哈希鍵綁定的BoundHashOperations實(shí)例 | 通過RedisTemplate的opsForHash()方法獲取可以直接操作所有哈希數(shù)據(jù)結(jié)構(gòu)的HashOperations實(shí)例 |
操作對象 | 特定哈希鍵下的數(shù)據(jù) | Redis中的所有哈希數(shù)據(jù)結(jié)構(gòu) |
操作便捷性 | 對特定哈希鍵的操作更加直觀和方便,無需每次操作都指定哈希鍵 | 需要在每次操作中顯式指定哈希鍵和字段名,但在操作多個(gè)哈希鍵時(shí)更加靈活 |
適用場景 | 對某個(gè)特定的哈希鍵進(jìn)行頻繁操作時(shí)更加適用 | 在多個(gè)哈希鍵之間進(jìn)行操作,或者操作的哈希鍵不是固定時(shí)更加適用 |
在實(shí)際開發(fā)中,可以根據(jù)具體的需求和場景選擇合適的方法來操作Redis中的哈希數(shù)據(jù)結(jié)構(gòu)。
@PostMapping("/hash")public void save(){List<Student> list = studentService.list();//通過boundHashOps進(jìn)行hash方式數(shù)據(jù)處理,保存數(shù)據(jù)BoundHashOperations<String,String,String> boundHashOperations = stringRedisTemplate.boundHashOps("studentList");for(Student s:list){boundHashOperations.put(String.valueOf(s.getId()),JSONUtil.toJsonStr(s));}//通過opsForHash進(jìn)行hash方式數(shù)據(jù)處理,保存數(shù)據(jù)HashOperations operations = stringRedisTemplate.opsForHash();for(Student student:list){operations.put("studentList",String.valueOf(student.getId()),JSONUtil.toJsonStr(student));}}
@DeleteMapping("/hash")public void delete(){List<Student> li = studentService.list();//通過boundHashOps進(jìn)行hash方式數(shù)據(jù)處理,刪除指定key數(shù)據(jù)下的某個(gè)數(shù)據(jù)BoundHashOperations<String,String,String> boundHashOperations = stringRedisTemplate.boundHashOps("studentList");boundHashOperations.delete("10");//通過opsForHash進(jìn)行hash方式數(shù)據(jù)處理,刪除指定key數(shù)據(jù)下的某個(gè)數(shù)據(jù)stringRedisTemplate.opsForHash().delete("studentList","10");//刪除整個(gè)key數(shù)據(jù)stringRedisTemplate.delete("studentList");}
}
通過上面的2種方式我們可以看到,其實(shí)方法差不多,只是一個(gè)每次操作都要帶上哈希鍵名,一個(gè)不需要。