Rumah > pembangunan bahagian belakang > Golang > Golang melaksanakan pengumpulan redis

Golang melaksanakan pengumpulan redis

WBOY
Lepaskan: 2023-05-10 22:14:38
asal
751 orang telah melayarinya

Dengan perkembangan teknologi Internet yang berterusan, pelbagai sistem storan berprestasi tinggi telah muncul. Antaranya, Redis ialah sistem storan Nilai Kunci berasaskan memori Ia digunakan secara meluas dalam cache, baris gilir mesej, kaunter dan medan lain, dan memainkan peranan penting dalam senario berskala besar dan berkonkurensi tinggi. Antaranya, Redis menyediakan pelbagai struktur data, seperti rentetan, senarai, set, set tertib, jadual cincang, dll. Set digunakan secara meluas dalam pelbagai senario Artikel ini akan memperkenalkan cara menggunakan Golang untuk melaksanakan set Redis.

1. Struktur data set Redis

Dalam Redis, set (Set) ialah himpunan unsur yang tidak tertib dan tidak berulang dan setiap elemen boleh terdiri daripada sebarang jenis. Koleksi Redis dilaksanakan melalui jadual cincang, dengan kerumitan O(1). Dalam Redis, set mempunyai ciri-ciri berikut:

  1. Elemen dalam set tidak berulang
  2. Turutan unsur dalam set tidak tertib
  3. Set Unsur-unsur dalam adalah unik.

Koleksi Redis menyediakan arahan berikut:

  1. sadd(key, value1, value2, …): Tambahkan satu atau lebih elemen pada koleksi; >srem(kunci, nilai1, nilai2, …): Padamkan satu atau lebih elemen daripada set; ): Kembalikan semua elemen set;
  2. spop(key): Alih keluar secara rawak dan kembalikan satu elemen; 🎜>
  3. sdiff(key1, key2, …): Mengembalikan perbezaan antara berbilang set; (key1, key2, …): Mengembalikan kesatuan antara berbilang set.
  4. 2. Gunakan Golang untuk melaksanakan koleksi Redis
  5. Golang ialah bahasa pengaturcaraan yang ditaip secara statik, sumber terbuka, berprestasi tinggi yang digunakan secara meluas dalam konkurensi tinggi dan diedarkan secara besar-besaran sistem. Seterusnya, mari kita lihat cara menggunakan Golang untuk melaksanakan koleksi Redis.
  6. Pertama, kita perlu mentakrifkan struktur set untuk mewakili objek koleksi Kod ini dilaksanakan seperti berikut:
  7. type set struct {
        data map[interface{}]bool
    }
    Salin selepas log masuk
  8. Antaranya, data ialah peta, mewakili elemen dalam koleksi. nilai ialah jenis bool, menunjukkan sama ada elemen itu wujud dalam koleksi Jika ia wujud, ia adalah benar, jika tidak ia adalah palsu. Seterusnya, kami melaksanakan operasi asas berikut dalam struktur set:
  9. Tambah elemen pada set:
  10. func (s *set) Add(item interface{}) {
        s.data[item] = true
    }
    Salin selepas log masuk

Padam elemen daripada set:

func (s *set) Remove(item interface{}) {
    delete(s.data, item)
}
Salin selepas log masuk

Mengembalikan bilangan elemen dalam set:

func (s *set) Size() int {
    return len(s.data)
}
Salin selepas log masuk

    Menentukan sama ada elemen berada dalam set:
  1. func (s *set) Contains(item interface{}) bool {
        return s.data[item]
    }
    Salin selepas log masuk
    Kembalikan semua elemen dalam koleksi:
  1. func (s *set) Members() []interface{} {
        var members []interface{}
        for item := range s.data {
            members = append(members, item)
        }
        return members
    }
    Salin selepas log masuk
Kami boleh melaksanakan kebanyakan operasi pengumpulan Redis melalui kod di atas. Seterusnya, mari kita laksanakan beberapa operasi lanjutan.
  1. Hitung persilangan dua set:
    func Intersect(s1, s2 *set) *set {
        result := &set{
            data: make(map[interface{}]bool),
        }
        for item := range s1.data {
            if s2.Contains(item) {
                result.Add(item)
            }
        }
        return result
    }
    Salin selepas log masuk
  1. Hitung gabungan dua set:
    func Union(s1, s2 *set) *set {
        result := &set{
            data: make(map[interface{}]bool),
        }
        for item := range s1.data {
            result.Add(item)
        }
        for item := range s2.data {
            result.Add(item)
        }
        return result
    }
    Salin selepas log masuk
  1. Kira perbezaan antara dua set:

func Difference(s1, s2 *set) *set {
    result := &set{
        data: make(map[interface{}]bool),
    }
    for item := range s1.data {
        if !s2.Contains(item) {
            result.Add(item)
        }
    }
    return result
}
Salin selepas log masuk

Pada ketika ini, kami telah menyelesaikan pelaksanaan Golang bagi semua operasi asas dan operasi lanjutan koleksi Redis.
  1. 3. Kod ujian
Akhir sekali, mari tulis beberapa kod ujian untuk mengesahkan sama ada koleksi Golang yang kami laksanakan adalah betul.
    func TestSet(t *testing.T) {
        s := &set{
            data: make(map[interface{}]bool),
        }
    
        // 添加元素
        s.Add(1)
        s.Add("hello")
        s.Add(3.14)
    
        // 判断元素是否存在
        if !s.Contains(1) || !s.Contains("hello") || !s.Contains(3.14) {
            t.Error("set Add or Contains error")
        }
    
        // 计算元素个数
        if s.Size() != 3 {
            t.Error("set Size error")
        }
    
        // 删除元素
        s.Remove(1)
        if s.Contains(1) {
            t.Error("set Remove error")
        }
    
        // 计算交集
        s1 := &set{data: map[interface{}]bool{1: true, 2: true}}
        s2 := &set{data: map[interface{}]bool{2: true, 3: true}}
        s3 := Intersect(s1, s2)
        if s3.Size() != 1 || !s3.Contains(2) {
            t.Error("Intersect error")
        }
    
        // 计算并集
        s4 := Union(s1, s2)
        if s4.Size() != 3 || !s4.Contains(1) || !s4.Contains(2) || !s4.Contains(3) {
            t.Error("Union error")
        }
    
        // 计算差集
        s5 := Difference(s1, s2)
        if s5.Size() != 1 || !s5.Contains(1) {
            t.Error("Difference error")
        }
    
        // 返回所有元素
        m := s.Members()
        if len(m) != 2 {
            t.Error("Members error")
        }
    }
    Salin selepas log masuk
  1. Kod di atas berjaya dijalankan, menunjukkan bahawa koleksi Golang yang kami laksanakan mematuhi ciri dan operasi koleksi Redis.
4. Ringkasan
  1. Artikel ini memperkenalkan ciri dan perintah koleksi Redis, menggunakan Golang untuk melaksanakan struktur data koleksi dan mengesahkan ketepatannya melalui beberapa kod ujian. Dalam aplikasi praktikal, koleksi yang dilaksanakan oleh Golang boleh digunakan dalam senario seperti caching tempatan dan caching teragih. Ia mempunyai kelebihan kecekapan tinggi, keselamatan dan penyelenggaraan yang mudah, dan boleh mengembangkan lebih banyak operasi dan fungsi secara fleksibel. Jika anda menggunakan Golang untuk membangunkan sistem teragih, anda boleh cuba menggunakan Golang untuk melaksanakan koleksi Redis untuk meningkatkan prestasi dan kestabilan sistem.

Atas ialah kandungan terperinci Golang melaksanakan pengumpulan redis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan