golang 利用redis實現分布式鎖

2021-10-04 17:16:57 字數 1976 閱讀 7675

redis知識準備

redis setnx命令

setnx 如果key不存在則建立,並返回true

如果key存在則不操作,並返回false

redis ttl命令

如果對key設定了過期時間,則ttl命令返回key到過期時所剩餘的時間

如果key沒有設定過期時間,則ttl命令返回-1

}// 獲取鎖的過期剩餘時間

func

(r *redisclient)

getttl()

(error

, time.duration)

return

nil, ret.

val()}

func

(r *redisclient)

threadlock

(threadid string)if

!ok

} fmt.

printf

("執行緒 %s 已加鎖\n"

, threadid)

// 加鎖後執行相應操作

time.

sleep(5

* time.second)

// 釋放鎖

r.unlock()

fmt.

printf

("執行緒 %s 已釋放鎖\n"

, threadid)

return

}else

if err !=

nil err, t := r.

getttl()

if err !=

nilif t >0}

}func

main()

}

利用AOP實現redis快取

1.定義註解 target elementtype.method 作用位置 retention retentionpolicy.runtime 什麼時候有效 public inte ce cachefind 2.使用註解 在方法上使用這個註解 override cachefind key iten ...

Golang利用select實現超時機制

所謂超時,比如上網瀏覽一些安全的 如果幾分鐘之後不做操作,那麼就會讓你重新登入。就所謂有時候出現goroutine阻塞的情況,那麼我們如何避免整個程式進入阻塞情況,這時候就可以用select來設定超時 package main import fmt time func main 別忘了 for i ...

利用redis實現使用者簽到

很多 都提供了簽到功能 這裡不考慮資料落地事宜 並且需要展示最近乙個月的簽到情況,如果使用bitmap我們怎麼做?一言不合亮 redis new redis redis connect 127.0.0.1 使用者uid uid 1 記錄有uid的key cachekey sprintf sign d...