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:
Koleksi Redis menyediakan arahan berikut:
type set struct { data map[interface{}]bool }
func (s *set) Add(item interface{}) { s.data[item] = true }
Padam elemen daripada set:
func (s *set) Remove(item interface{}) { delete(s.data, item) }
Mengembalikan bilangan elemen dalam set:
func (s *set) Size() int { return len(s.data) }
func (s *set) Contains(item interface{}) bool { return s.data[item] }
func (s *set) Members() []interface{} { var members []interface{} for item := range s.data { members = append(members, item) } return members }
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 }
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 }
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 }
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") } }
Atas ialah kandungan terperinci Golang melaksanakan pengumpulan redis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!