Rumah  >  Artikel  >  pangkalan data  >  Analisis mendalam tentang struktur data dalam Redis dan bercakap tentang senario aplikasi

Analisis mendalam tentang struktur data dalam Redis dan bercakap tentang senario aplikasi

青灯夜游
青灯夜游ke hadapan
2022-01-18 09:51:451965semak imbas

Artikel ini akan memberi anda pemahaman yang mendalam tentang struktur data dalam Redis dan melihat senario aplikasi struktur data ini, saya harap ia akan membantu anda!

Analisis mendalam tentang struktur data dalam Redis dan bercakap tentang senario aplikasi

Jenis data Redis dan senario aplikasi

Redis ialah sistem storan Nilai-Kekunci yang ditulis dalam bahasa ANSI C. Jenis kunci ialah rentetan. [Cadangan berkaitan: Tutorial video Redis]

8 jenis data nilai:

  • Jenis data biasa

    • jenis rentetan rentetan

    • jenis senarai senarai

    • tetapkan jenis koleksi

    • set disusun( zset) jenis set yang dipesan

    • jenis cincang

  • jenis data luar biasa

    • jenis peta bit peta bit

    • jenis lokasi geo

    • jenis strim

  • Nota

    Arahan Redis abaikan kes, (tetapkan SET), kekunci jangan abaikan kes (nama NAMA)

Analisis mendalam tentang struktur data dalam Redis dan bercakap tentang senario aplikasi

rentetan jenis rentetan

Redis' String boleh menyatakan tiga jenis nilai: rentetan, integer, titik terapung nombor 100.01 ialah rentetan enam digit

Arahan biasa

命令名称 命令格式 命令描述
set set key value 赋值
get get key 取值
getset getset key value 取值并赋值
mset MSET key1 value1 key2 value2 .. keyN valueN 设置多个 key 的值为各自对应的 value。
mget MGET KEY1 KEY2 .. KEYN 返回所有(一个或多个)给定 key 的值
EXPIRE EXPIRE   key  seconds 设置一个键的过期时间(秒)
append append key value 向尾部追加值
strlen strlen key 获取字符串长度
setnx setnx key value 当value不存在时采用赋值
set key value NX PX 3000 原子操作,px 设置毫秒数
incr incr key 递增数字
incrby incrby key increment 增加指定的整数
decr decr key 递减数字
decrby decrby key decrement 减少指定的整数

Senario aplikasi

  • 1 Cache objek

  • 2

  • 3. incr digunakan untuk incr penguncian optimistik: peningkatan bilangan, yang boleh digunakan untuk melaksanakan jam penguncian optimistik (transaksi)
  • 4 mengunci apabila nilai bukan Tugasan digunakan apabila ia wujud, yang boleh digunakan untuk melaksanakan kunci teragih
  • 5, pembilang
  • 6, Perkongsian sesi kelompok web
Contoh kaedah biasa

jenis senarai senarai
dockerRedis:0>keys *
dockerRedis:0>append testName 2
"1"
dockerRedis:0>exists testName
"1"
dockerRedis:0>append testName " 1234"
"6"
dockerRedis:0>get testName
"2 1234"
dockerRedis:0>set testName1 "testName1"
"OK"
dockerRedis:0>get testName1
"testName1"
dockerRedis:0>getset testName2 "testName2"
null
dockerRedis:0>get testName2
"testName2"
dockerRedis:0>strlen testName
"6"
dockerRedis:0>set incrTest "10"
"OK"
dockerRedis:0>incr incrTest
"11"
dockerRedis:0>get incrTest
"11"
dockerRedis:0>decr incrTest
"10"
dockerRedis:0>decrby incrTest 5
"5"
dockerRedis:0>mset set01 1 set02 2 set03 3
"OK"
dockerRedis:0>mget set01 set02 set03
1) "1"
2) "2"
3) "3"

jenis senarai senarai boleh disimpan dipesan dan elemen boleh berulang untuk mendapatkan kepala atau ekor Rekod berdekatan adalah sangat pantas Bilangan maksimum elemen dalam senarai ialah 2^32-1 (4 bilion)

Perintah biasa

.

命令名称 命令格式 命令描述
lpush lpush key v1 v2 v3 ... 从左侧插入列表
lpop lpop key 从列表左侧取出
rpush rpush key v1 v2 v3 ... 从右侧插入列表
rpop rpop key 从列表右侧取出
lpushx lpushx key value 将值插入到列表头部
blpop blpop key timeout 从列表左侧取出,当列表为空时阻塞,可以设置最大阻塞时间,单位为秒
llen llen key 获得列表中元素个数
lrange lrange key start end 返回列表中指定区间的元素,区间通过start和end指定
lset lset key index value 将列表index位置的元素设置成value的值
rpoplpush rpoplpush key1 key2 从key1列表右侧弹出并插入到key2列表左侧
rpushx rpushx key 将值插入到列表尾部 value
brpop blpop key 从列表右侧取出,当列表为空时阻塞,可以设置最大阻塞时 timeout 间,单位为秒
 lindex lindex key value 获得列表中下标为index的元素 index从0开始 index
ltrim ltrim key start end 对列表进行修剪,只保留start到end区间 end
brpoplpush brpoplpush 从key1列表右侧弹出并插入到key2列表左侧,会阻塞 key1 key2
linsert linsert key BEFORE/AFTER pivot value 将value插入到列表,且位于值pivot之前或之后
Senario aplikasi

    1 Tindanan(Timbunan)=LPUSH LPOP
  • 2 (queue)=LPUSH RPOP
  • 3 Menyekat MQ (blocking queue) =LPUSH BRPOP
  • 4 senarai
  • jenis set set

Set: Bilangan maksimum ahli dalam set elemen unik yang tidak tertib ialah 2^32 - 1

Perintah biasa

Senario Aplikasi

  • Program Mini Loteri WeChat

  • Suka, koleksi, tag Weibo

  • Model ikut Weibo WeChat

  • Penapisan produk e-dagang

jenis set yang dipesan zset

Set tertib SortedSet (ZSet): elemen itu sendiri tidak tertib dan tidak berulang Setiap elemen dikaitkan dengan skor (skor), yang boleh diisih mengikut skor dan skor boleh diulang

Perintah biasa

命令名称 命令格式 命令描述
zadd zadd key score1 member1 score2 member2 ... 往有序集合key中加入带分值元素
zrem zrem key mem1 mem2 .... 从有序集合key中删除元素
zcard zcard key 获得有序集合中的元素数量
zcount zcount key min max 返回集合中score值在[min,max]区间 的元素数量
zincrby zincrby key increment member 为有序集合key中元素member的分值加上increment
zscore zscore key member 返回有序集合key中元素member的分值
zrank zrank key member 获得集合中member的排名(按分值从 小到大)
zrange zrange key start end 正 序获取有序集合key从start下标到stop下标的元素
zrevrank zrevrank key member 获得集合中member的排名(按分值从 大到小)
zrevrange  zrevrange key start end 倒序获取有序集合key从start下标到stop下标的元素

Senario aplikasi

  • Kedudukan klik, kedudukan jualan, kedudukan perhatian

jenis cincang

Cincangan Redis ialah jadual pemetaan medan jenis rentetan dan nilai. Menyediakan pemetaan medan dan nilai medan. Setiap cincangan boleh menyimpan 2^32-1 pasangan nilai kunci (lebih daripada 4 bilion).

Analisis mendalam tentang struktur data dalam Redis dan bercakap tentang senario aplikasi

  • Kelebihan

    • 1 Data yang serupa dikelaskan dan disepadukan untuk storan, yang memudahkan pengurusan data

    • 2. Berbanding dengan operasi rentetan, ia menggunakan lebih sedikit memori dan CPU

    • 3. Berbanding dengan storan rentetan, ia menjimatkan ruang

  • Kelemahan

    • 1. Fungsi tamat tempoh tidak boleh digunakan pada medan, tetapi hanya boleh digunakan pada kekunci

    • 2. Seni bina kelompok Redis tidak sesuai untuk kegunaan berskala besar

arahan biasa

命令名称 命令格式 命令描述
hset hset key field value 存储一个哈希表key的键值
hmset hmset key field1 value1 field2 value2 在一个哈希表key中存储多个键值对
hget hget key field 查看某个field是否存在
hmget hmget key field1 field2 ... 获取一个字段值
hsetnx hsetnx key field value 存储一个不存在的哈希表key的键值
hexists hexists key filed 判断filed是否存在
hgetall hgetall key 获取多个字段值
hdel hdel key field1 field2... 删除指定字段
hincrby hincrby key field increment 指定字段自增increment
hlen hlen key 获得字段数量

Adegan aplikasi

  • Cache objek

  • Kendalian troli beli-belah

jenis bitmap bitmap

Bitmap menjalankan operasi bit dan menggunakan bit untuk mewakili nilai atau status yang sepadan dengan elemen, dan kuncinya ialah elemen yang sepadan itu sendiri. Bitmap sendiri akan sangat menjimatkan ruang storan.

Perintah biasa

命令名称 命令格式 命令描述
setbit setbit key offset value 设置key在offset处的bit值(只能是0或者 1)。
getbit getbit key offset 获得key在offset处的bit值
bitcount bitcount key 获得key的bit位为1的个数
bitpos bitpos key value 返回第一个被设置为bit值的索引值
bitop bitop and[or/xor/not] destkey key [key ...] 对多个key 进行逻辑运算后存入destkey 中

Senario Aplikasi

  • 1 Pengguna log masuk setiap bulan, id pengguna adalah kunci, tarikh digunakan sebagai offset 1 untuk menunjukkan log masuk
  • 2. Statistik adalah Pengguna aktif, tarikh adalah kunci, id pengguna diimbangi 1, yang bermaksud aktif
  • 3. Tanya status dalam talian pengguna, tarikh adalah kunci, id pengguna diimbangi 1, ia bermakna dalam talian

Jenis geo lokasi

geo digunakan oleh Redis untuk memproses maklumat lokasi. Digunakan secara rasmi dalam Redis3.2. Terutamanya menggunakan lengkung Z-order, pengekodan Base32 dan algoritma geohash

Arahan biasa

命令名称 命令格式 命令描述



geoadd geoadd key 经度 纬度 成员名称1 经度1 纬度1 成 员名称2 经度2 纬度 2 ... 添加地理坐标
geopos geopos key 成员名称1 成员名称2... 返回成员经纬度
geodist geodist key 成员1 成员2 单位 计算成员间距离
georadiusbymember georadiusbymember key 成员 值单位 count 数 asc[desc] 根据成员查找附近的成员
geohash geohash key 成员名称1 成员名称2... 返回标准的 geohash串

Senario aplikasi

1 . Rakam lokasi geografi

2 Kira jarak

3 Cari "orang berdekatan"

jenis strim data

strim ialah Redis5.0 A baru. struktur data tambahan digunakan untuk baris gilir mesej yang berterusan.

Hampir memenuhi semua keperluan baris gilir mesej, termasuk:

  • Penjanaan bersiri ID mesej
  • Pelintasan mesej
  • Penyekatan mesej dan bukan -menyekat bacaan
  • Penggunaan mesej kumpulan
  • Pemprosesan mesej yang belum selesai
  • Pemantauan baris gilir mesej

Setiap Strim mempunyai keunikan Namanya ialah kunci Redis. Ia dibuat secara automatik apabila arahan xadd digunakan buat kali pertama untuk menambahkan mesej

Senario aplikasi

Penggunaan baris gilir mesej

Lagi Untuk pengetahuan berkaitan pengaturcaraan, sila lawati: Pengenalan kepada Pengaturcaraan! !

Atas ialah kandungan terperinci Analisis mendalam tentang struktur data dalam Redis dan bercakap tentang senario aplikasi. 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