redis 使用go redis實現點讚投票功能

2021-09-10 21:46:54 字數 2783 閱讀 5686

需要記錄的資訊:

最後固定時間間隔【採用定時任務】取出 redis 中所有點讚資料存入mysql中或者做持久化。

set中的資料特徵是:無序,不重複,所以

如果當前使用者點讚的話,判斷set中是否有此成員。

127.0

.0.1:6379

> sismember like_id1 userid1

(integer)0

127.0

.0.1:6379

> sadd like_id1 userid1

(integer)1

127.0

.0.1:6379

> sismember like_id1 userid1

(integer)1

127.0

.0.1:6379

> srem like_id1 userid1

(integer)1

127.0

.0.1:6379

> sismember like_id1 userid1

(integer)0

127.0

.0.1:6379

> scard like_id1 統計有多少使用者點讚了這條id

)// 通過 cient.ping() 來檢查是否成功連線到了 redis 伺服器

_, err := client.

ping()

.result()

if err !=

nilreturn client

}func

is_like_id1

(client *redis.client, userid int

)if val ==

false

}func

like_id1_set

(client *redis.client, userid int

)if val ==

false

}else}}

func

like_id1_count

(client *redis.client)

(int64

)return val

}func

main()

bitmap是一連串的二進位制數字(0,1),每一位所在的位置為偏移(offset),在bitmap上可以執行and,or,xor以及其他操作。

127.0

.0.1:6379

> getbit like_id1 "oceanstar"

//因此位圖只能是數字

(error) err bit

offset

isnot an integer

orout

of range

127.0

.0.1:6379

> getbit like_id1 100

//檢視id為100的數字是否點讚

(integer)0

127.0

.0.1:6379

> setbit like_id1 100

1//點讚

(integer)0

127.0

.0.1:6379

> getbit like_id1 100

(integer)1

127.0

.0.1:6379

> setbit like_id1 100

0//取消點讚

(integer)1

127.0

.0.1:6379

> getbit like_id1 100

(integer)0

127.0

.0.1:6379

> bitcount like_id1 //有多少人點贊

(integer

)0

點陣圖還可以進行位操作:and , or,xor,not。

// 通過 cient.ping() 來檢查是否成功連線到了 redis 伺服器

_, err := client.ping(

).result(

)if err != nil

return client

}func like_id1_bitmap(client *redis.client, userid int64)

if val ==0

}else }}

func count_like_id1(client *redis.client)

(int64)

return val

}func main(

)總結:

點陣圖是由bit組成的陣列。redis中的點陣圖不是一種新的資料型別,它的底層是字串。因為字串本質上是二進位製大物件blob,所以可以視為位圖。同時因為位圖儲存的是布林資訊,所以在某些情況下可以節省大量的記憶體空間。

應用場景:

Go redis分布式鎖的go redis實現

在分布式的業務中 如果有的共享資源需要安全的被訪問和處理 那就需要分布式鎖 分布式鎖的幾個原則 1.鎖的互斥性 在分布式集群應用中,共享資源的鎖在同一時間只能被乙個物件獲取。2.可重入 為了避免死鎖,這把鎖是可以重入的,並且可以設定超時。3.高效的加鎖和解鎖 能夠高效的加鎖和解鎖,獲取鎖和釋放鎖的效...

go redis使用之List列表

go redis string字串操作詳解?go redis hash雜湊操作詳解?go redis set集合操作詳解?go redis zset有序集合操作詳解?基本的資料型別 list 列表 在redis裡,可以把list作為棧 佇列 阻塞佇列 在redis裡,所有的list命令都是l開頭的 ...

go redis使用之Hash字典

go redis list列表使用詳解 go redis string字串使用詳解 go redis set集合使用詳解 go redis zset使用詳解 在redis中,hash雜湊被稱為字典 dictionary redis的字典使用雜湊表作為底層實現 hash更適合用來儲存物件,例如 use...