Rumah >pangkalan data >Redis >Mari kita bincangkan tentang jenis data hash dalam redis dan cara mengendalikannya?

Mari kita bincangkan tentang jenis data hash dalam redis dan cara mengendalikannya?

青灯夜游
青灯夜游ke hadapan
2021-12-31 10:16:252596semak imbas

Artikel ini akan memperkenalkan anda kepada jenis data cincang dalam redis dan memperkenalkan operasi asas data jenis cincang saya harap ia akan membantu anda.

Mari kita bincangkan tentang jenis data hash dalam redis dan cara mengendalikannya?

1. Gambaran keseluruhan data jenis cincang

Mari kita lihat contoh ini dahulu

Dalam bahagian sebelumnya kita Mari belajar tentang jenis storan rentetan bersama-sama. Walau bagaimanapun, jika penyimpanan data objek mempunyai keperluan kemas kini yang kerap, operasi akan menjadi rumit. Contohnya: user:id:100 -> {"id":100,"name":"春晚","fans":12355,"blogs":99,"focus:83}, jika anda perlu mengemas kini data setempat dalam objek, anda perlu menggantikan semua data, jadi anda mempunyai keperluan berikut. [Cadangan berkaitan: Tutorial video Redis]

Keperluan baharu: Kumpulkan satu siri data yang disimpan untuk memudahkan pengurusan, seperti menyimpan maklumat tentang objekDiperlukan struktur storan: Satu ruang storan menyimpan berbilang data pasangan nilai kunci

seperti yang ditunjukkan di bawah:

Mari kita bincangkan tentang jenis data hash dalam redis dan cara mengendalikannya?

Untuk menyelesaikan masalah ini, kami memperkenalkan Jenis data baharu: hash. Pada masa yang sama, struktur storan cincang juga telah dioptimumkan seperti berikut

  • Jika bilangan medan adalah kecil, struktur storan dioptimumkan kepada struktur seperti tatasusunan
  • Jika bilangan medan adalah besar, struktur storan menggunakan struktur HashMap

2. Operasi asas data jenis cincang

  • Ubah suai/tambah data
hset key field value
  • Pertanyakan satu medan/pertanyaan semua medan
# 查询单个字段数据
hget key field
# 查询所有数据
hgetall key
  • Padam operasi
hdel key field1 [field2]
  • Ubah suai /add multiple data
hmset key field1 value1 field2 value2
  • Mengembalikan nilai satu atau lebih medan yang diberikan dalam jadual cincang
hmget key field1 field2
  • Mendapat nombor daripada medan dalam jadual cincang
hlen key
  • Dapatkan sama ada medan yang dinyatakan wujud dalam jadual cincang
hexists key field

3 data

  • Dapatkan semua nama medan dalam jadual cincang atau nilai Medan
hkey key
hvals key
  • Tetapkan data berangka medan aksara yang ditentukan dan tingkatkan nilai julat yang ditentukan
hincrby key field increment
hincrbyfloat key field increment

Langkah berjaga-jaga operasi data jenis cincang

  • Nilai di bawah jenis cincang hanya boleh menyimpan rentetan, jenis data lain tidak dibenarkan dan tiada objek bersarang. Jika data tidak diperolehi, hasil yang sepadan ialah (tiada); 🎜>

    Jenis cincang sangat hampir dengan bentuk penyimpanan data objek, dan boleh menambah dan memadam atribut objek secara fleksibel Walau bagaimanapun, niat asal reka bentuk cincang bukanlah untuk menyimpan sejumlah besar objek untuk menyalahgunakannya, apatah lagi menggunakan cincangan sebagai senarai objek; menjadi kesesakan akses data.
  • 4. Kes aplikasi cincang
  • 4.1 Menggunakan cincang untuk melaksanakan troli beli-belah

  • Ikhtisar
  • Di sini kami tidak membincangkan penyegerakan berterusan antara troli beli-belah dan pangkalan data, mahupun perhubungan antara troli beli-belah dan pesanan, dan mengabaikan penyimpanan maklumat troli beli-belah untuk pengguna yang tidak log masuk. Kami hanya menggunakan model storan redis untuk

    menambah, menyemak imbas, menukar kuantiti, memadam, mengosongkan

pelan pelaksanaan

Menggunakan pelanggan ID sebagai kunci, setiap pengguna mencipta struktur storan cincang yang sepadan dengan maklumat troli beli-belah

Menyimpan nombor produk sebagai medan dan kuantiti pembelian sebagai nilai

Tambah produk: tambah Medan baharu dan nilai

Semak imbas produk: traverse hash

Tukar kuantiti: auto-kenaikan/auto-penurunan, nilai tetapkan

Padam produk: padam medan
  • Kosongkan : Kekunci Padam
  • Kod sampel adalah seperti berikut:
  • Pecutan maklumat produk
  • Pada masa ini ia hanya menyimpan kuantiti dalam redis , tidak memainkan peranan pecutan, kerana maklumat produk masih perlu ditanya dalam pangkalan data. Penyelesaian berikut boleh digunakan:
  • Rekod maklumat produk dalam setiap troli beli-belah disimpan sebagai dua medan

bidang1 digunakan khas untuk menjimatkan kuantiti

# 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

Format penamaan: id produk: nombor Simpan data: Nilai

medan2 digunakan khas untuk menyimpan maklumat produk yang dipaparkan dalam troli beli-belah, termasuk penerangan teks, alamat imej, maklumat pedagang, dll.

Format penamaan : id produk:maklumat Simpan data: json

    Kod sampel adalah seperti berikut:
Dalam nilai yang sepadan dengan

di atas, rentetan mengandungi ruang, jadi ia disebut dengan petikan berganda untuk melarikan diri tujuan.

  • Maklumat produk disimpan secara berasingan

Memandangkan medan2 mungkin wujud dalam berbilang rekod produk, data dalam medan2 boleh disimpan dalam cincang bebas. Pada masa ini, adalah tidak munasabah untuk menyimpan data cincang setiap kali rekod troli beli-belah ditambahkan. Anda boleh menyimpan data melalui operasi

Jika data wujud, operasi simpan tidak akan dilakukan.

Format arahan adalah seperti berikut
# 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:infoContoh kod adalah seperti berikut

# 将id为101 的商品独立存起来
hsetnx info 101 "{\"name\":\"goods name\"}"

4.1. 用hash实现抢购

案例:双 11 活动日,销售手机充值卡的商家对移动、联通、电信的 30 元、50 元、100 元商品推出抢购活动,每种商品的抢购上限为 100。

解决方案

  • 以商家 id 作为 key
  • 将参与抢购的商品作为 field
  • 将参与抢购的商品数量作为对应的 value
  • 抢购时使用降值的方式控制产品数量
  • 实际业务中还有超卖等实际问题,这里不做讨论

实现过程

商品初始信息

# 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

5. string 存对象对比 hash 存对象

  • string 存储 json 字符串:读取方便,在更新的时候会整体进行更新

  • hash 存对象具体的字段:更新灵活

引入 hash 数据类型之后,我们就解决了 string 存储对象,更新对象时需要整体更新的问题。

更多编程相关知识,请访问:编程入门!!

Atas ialah kandungan terperinci Mari kita bincangkan tentang jenis data hash dalam redis dan cara mengendalikannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:juejin.cn. Jika ada pelanggaran, sila hubungi admin@php.cn Padam