이 기사는 Redis의 해시 데이터 유형을 안내하고 해시 유형 데이터의 기본 작업을 소개합니다.
이 예를 먼저 살펴보겠습니다.
이전 섹션에서 문자열 저장 유형에 대해 배웠습니다. 그러나 객체 데이터 저장에 빈번한 업데이트 요구 사항이 있는 경우 작업이 번거로워집니다. 예: user:id:100 -> {"id":100,"name":"봄 축제 갈라","fans":12355,"blogs":99,"focus:83} code>, 객체의 로컬 데이터를 업데이트해야 하는 경우 모든 데이터를 교체해야 하므로 [관련 권장사항: <a href="http://www.php.cn/course/%20list/54.html." target="_blank">Redis 동영상 튜토리얼</a>]<code>user:id:100 -> {"id":100,"name":"春晚","fans":12355,"blogs":99,"focus:83}
,如果需要更新一个对象中的局部数据,就需要替换掉所有数据,于是有了以下的需求。【相关推荐:Redis视频教程】
新的需求:对一系列存储的数据进行编组,方便管理,比如存储一个对象的信息需要的存储结构:一个存储空间保存多个键值对数据
如下图:
为了解决这个问题,我们引入新的数据类型:hash
hash
를 도입했습니다. 동시에 해시 저장 구조는 다음과 같습니다. 도 다음과 같이 최적화되었습니다hset key field value
# 查询单个字段数据 hget key field # 查询所有数据 hgetall key
hdel key field1 [field2]
hmset key field1 value1 field2 value2
hmget key field1 field2
hlen key
hexists key field3. 데이터형
해시 테이블의 모든 필드 이름 또는 필드 값을 가져옵니다
hkey key hvals key
지정된 문자 필드의 값을 설정합니다. 데이터는 지정된 범위의 값을 증가시킵니다
hincrby key field increment hincrbyfloat key field increment
4. 해시 적용 사례
4.1. 해시를 사용하여 장바구니 구현
Overview
여기에서는 장바구니와 데이터베이스 간의 지속적인 동기화에 대해 논의하지 않습니다. 로그인하지 않은 사용자의 장바구니 정보 저장은 무시하고 장바구니와 주문 관계를 무시합니다. 우리는 Redis 저장소 모델을 사용하여수량 변경: 자동 증가/자동 감소, 값 설정
상품 삭제: 삭제 필드삭제: 삭제 키
샘플 코드는 다음과 같습니다.# 001 用户购买 ID为101商品 100件,ID为102的商品 200件 hmset 001 101 100 102 200 # 002 用户购买 ID为102商品 1件,ID为104的商品 7件 hmset 002 102 1 104 7
field2는 텍스트 설명, 이미지 주소, 판매자 정보 등을 포함하여 장바구니에 표시된 제품 정보를 저장하는 데 특별히 사용됩니다. 101:info
对应的值中,字符串包含了空格,所以用双引号引用起来,达到转义的目的。
商品信息独立保存
由于 field2 可能在多条商品记录中存在,因此 field2 里的数据可保存到独立的 hash。此时,如果每添加一条购物车记录,就保存一次 hash 数据,显然是不合理的,可以通过hsetnx
이름 형식: 제품 ID:info 데이터 저장: json
샘플 코드는 다음과 같습니다.
# 001 用户 购买 ID为101的商品 2件,商品的信息为:{"name":"good name"} hmset 001 101:num 2 101:info "{\"name\":\"goods name\"}" # 002 用户 购买 ID为101的商品 1件,商品的信息为:{"name":"good name"} hmset 002 101:num 1 101:info "{\"name\":\"goods name\"}"🎜위의
101:info
에 해당하는 값에서 문자열에 공백이 포함되어 있으므로 의 목적을 달성하기 위해 큰따옴표로 묶었습니다. 탈출. 🎜🎜🎜상품 정보는 독립적으로 저장됩니다🎜🎜🎜field2는 여러 상품 레코드에 존재할 수 있으므로 field2의 데이터는 독립적인 해시에 저장될 수 있습니다. 이때 장바구니 기록이 추가될 때마다 해시 데이터를 저장하는 것은 당연히 무리입니다. hsetnx
작업을 통해 데이터를 저장할 수 있습니다. 수행. 🎜🎜명령 형식은 다음과 같습니다🎜hsetnx key field value🎜코드 예제는 다음과 같습니다🎜
# 将id为101 的商品独立存起来 hsetnx info 101 "{\"name\":\"goods name\"}"
案例:双 11 活动日,销售手机充值卡的商家对移动、联通、电信的 30 元、50 元、100 元商品推出抢购活动,每种商品的抢购上限为 100。
解决方案
实现过程
商品初始信息
# p01商家下,c30充值券1000张,c50充值券1000张,c100充值券1000张 hmset p01 c30 1000 c50 1000 c100 1000
当 c30 售出1件时,值减 1; 当 c100 售出 20 件时,值减 20,如下代码
# p01商家,商品c30售出1件 hincrby p01 c30 -1 # p01商家,商品c100售出20件 hincrby p01 c100 -20
string 存储 json 字符串:读取方便,在更新的时候会整体进行更新
hash 存对象具体的字段:更新灵活
引入 hash 数据类型之后,我们就解决了 string 存储对象,更新对象时需要整体更新的问题。
更多编程相关知识,请访问:编程入门!!
위 내용은 Redis의 해시 데이터 유형과 이를 작동하는 방법에 대해 이야기해 볼까요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!