2025-06-13 15:34:49 +08:00
|
|
|
package constants
|
2025-03-05 16:42:59 +08:00
|
|
|
|
2025-03-06 16:35:36 +08:00
|
|
|
import (
|
|
|
|
|
"fmt"
|
|
|
|
|
)
|
2025-03-05 16:42:59 +08:00
|
|
|
|
2025-03-06 16:35:36 +08:00
|
|
|
type RedisCode int
|
2025-03-05 16:42:59 +08:00
|
|
|
|
|
|
|
|
const (
|
2025-03-06 16:35:36 +08:00
|
|
|
LockSuccess = RedisCode(1)
|
|
|
|
|
UnLockSuccess = RedisCode(1)
|
|
|
|
|
RefreshLockSuccess = RedisCode(1)
|
|
|
|
|
UnRLockSuccess = RedisCode(0)
|
2025-03-13 16:51:50 +08:00
|
|
|
UnWLockSuccess = RedisCode(0)
|
2025-03-06 16:35:36 +08:00
|
|
|
RLockFailureWithWLockOccupancy = RedisCode(-1)
|
|
|
|
|
UnRLockFailureWithWLockOccupancy = RedisCode(-2)
|
|
|
|
|
WLockFailureWithRLockOccupancy = RedisCode(-3)
|
|
|
|
|
WLockFailureWithWLockOccupancy = RedisCode(-4)
|
|
|
|
|
UnWLockFailureWithRLockOccupancy = RedisCode(-5)
|
|
|
|
|
UnWLockFailureWithWLockOccupancy = RedisCode(-6)
|
|
|
|
|
WLockFailureWithNotFirstPriority = RedisCode(-7)
|
|
|
|
|
RefreshLockFailure = RedisCode(-8)
|
2025-03-07 16:16:26 +08:00
|
|
|
LockFailure = RedisCode(-9)
|
|
|
|
|
UnLocakFailureWithLockOccupancy = RedisCode(-10)
|
2025-03-06 16:35:36 +08:00
|
|
|
UnknownInternalError = RedisCode(-99)
|
2025-03-05 16:42:59 +08:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type RedisLockType int
|
|
|
|
|
|
|
|
|
|
const (
|
|
|
|
|
LockType = RedisLockType(iota)
|
2025-03-13 16:51:50 +08:00
|
|
|
UnRLockType
|
|
|
|
|
UnWLockType
|
2025-03-05 16:42:59 +08:00
|
|
|
UnLockType
|
|
|
|
|
RefreshLockType
|
|
|
|
|
)
|
|
|
|
|
|
2025-03-06 16:35:36 +08:00
|
|
|
type RedisResult struct {
|
|
|
|
|
Code RedisCode
|
2025-03-05 16:42:59 +08:00
|
|
|
Message string
|
|
|
|
|
}
|
|
|
|
|
|
2025-03-06 16:35:36 +08:00
|
|
|
func (e *RedisResult) Error() string {
|
2025-03-05 16:42:59 +08:00
|
|
|
return fmt.Sprintf("redis execution code:%d,message:%s\n", e.Code, e.Message)
|
|
|
|
|
}
|
|
|
|
|
|
2025-03-06 16:35:36 +08:00
|
|
|
func (e *RedisResult) OutputResultMessage() string {
|
2025-03-05 16:42:59 +08:00
|
|
|
return e.Message
|
|
|
|
|
}
|
|
|
|
|
|
2025-03-06 16:35:36 +08:00
|
|
|
func (e *RedisResult) OutputResultCode() int {
|
2025-03-05 16:42:59 +08:00
|
|
|
return int(e.Code)
|
|
|
|
|
}
|
|
|
|
|
|
2025-03-06 16:35:36 +08:00
|
|
|
func NewRedisResult(res RedisCode, lockType RedisLockType, redisMsg string) error {
|
2025-03-05 16:42:59 +08:00
|
|
|
resInt := int(res)
|
|
|
|
|
switch resInt {
|
|
|
|
|
case 1:
|
|
|
|
|
if lockType == LockType {
|
2025-03-06 16:35:36 +08:00
|
|
|
return &RedisResult{Code: res, Message: "redis lock success"}
|
2025-03-13 16:51:50 +08:00
|
|
|
} else if (lockType == UnRLockType) || (lockType == UnWLockType) || (lockType == UnLockType) {
|
2025-03-06 16:35:36 +08:00
|
|
|
return &RedisResult{Code: res, Message: "redis unlock success"}
|
2025-03-05 16:42:59 +08:00
|
|
|
} else {
|
2025-03-06 16:35:36 +08:00
|
|
|
return &RedisResult{Code: res, Message: "redis refresh lock success"}
|
2025-03-05 16:42:59 +08:00
|
|
|
}
|
|
|
|
|
case 0:
|
2025-03-13 16:51:50 +08:00
|
|
|
if lockType == UnRLockType {
|
|
|
|
|
return &RedisResult{Code: res, Message: "redis unlock read lock success, the lock is still occupied by other processes read lock"}
|
|
|
|
|
} else {
|
|
|
|
|
return &RedisResult{Code: res, Message: "redis unlock write lock success, the lock is still occupied by other processes write lock"}
|
|
|
|
|
}
|
2025-03-05 16:42:59 +08:00
|
|
|
case -1:
|
2025-03-06 16:35:36 +08:00
|
|
|
return &RedisResult{Code: res, Message: "redis lock read lock failure,the lock is already occupied by another processes write lock"}
|
2025-03-05 16:42:59 +08:00
|
|
|
case -2:
|
2025-03-06 16:35:36 +08:00
|
|
|
return &RedisResult{Code: res, Message: "redis un lock read lock failure,the lock is already occupied by another processes write lock"}
|
2025-03-05 16:42:59 +08:00
|
|
|
case -3:
|
2025-03-06 16:35:36 +08:00
|
|
|
return &RedisResult{Code: res, Message: "redis lock write lock failure,the lock is already occupied by anthor processes read lock"}
|
2025-03-05 16:42:59 +08:00
|
|
|
case -4:
|
2025-03-06 16:35:36 +08:00
|
|
|
return &RedisResult{Code: res, Message: "redis lock write lock failure,the lock is already occupied by anthor processes write lock"}
|
2025-03-05 16:42:59 +08:00
|
|
|
case -5:
|
2025-04-03 17:22:40 +08:00
|
|
|
return &RedisResult{Code: res, Message: "redis unlock write lock failure,the lock is already occupied by another processes read lock"}
|
2025-03-05 16:42:59 +08:00
|
|
|
case -6:
|
2025-04-03 17:22:40 +08:00
|
|
|
return &RedisResult{Code: res, Message: "redis unlock write lock failure,the lock is already occupied by another processes write lock"}
|
2025-03-05 16:42:59 +08:00
|
|
|
case -7:
|
2025-03-06 16:35:36 +08:00
|
|
|
return &RedisResult{Code: res, Message: "redis lock write lock failure,the first priority in the current process non-waiting queue"}
|
2025-03-05 16:42:59 +08:00
|
|
|
case -8:
|
2025-03-06 16:35:36 +08:00
|
|
|
return &RedisResult{Code: res, Message: "redis refresh lock failure,the lock not exist"}
|
2025-03-07 16:16:26 +08:00
|
|
|
case -9:
|
|
|
|
|
return &RedisResult{Code: res, Message: "redis lock failure,the lock is already occupied by another processes lock"}
|
2025-03-06 16:35:36 +08:00
|
|
|
case -99:
|
2025-03-11 15:35:15 +08:00
|
|
|
return &RedisResult{Code: res, Message: fmt.Sprintf("redis internal execution error:%v\n", redisMsg)}
|
2025-03-05 16:42:59 +08:00
|
|
|
default:
|
2025-03-06 16:35:36 +08:00
|
|
|
msg := "unkown redis execution result"
|
|
|
|
|
if redisMsg != "" {
|
|
|
|
|
msg = fmt.Sprintf("%s:%s\n", msg, redisMsg)
|
|
|
|
|
}
|
|
|
|
|
return &RedisResult{Code: res, Message: msg}
|
2025-03-05 16:42:59 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-03-06 16:35:36 +08:00
|
|
|
func TranslateResultToStr(res RedisCode, lockType RedisLockType) string {
|
2025-03-05 16:42:59 +08:00
|
|
|
resInt := int(res)
|
|
|
|
|
switch resInt {
|
|
|
|
|
case 1:
|
|
|
|
|
if lockType == LockType {
|
|
|
|
|
return "redis lock success"
|
2025-03-13 16:51:50 +08:00
|
|
|
} else if (lockType == UnRLockType) || (lockType == UnWLockType) || (lockType == UnLockType) {
|
2025-03-05 16:42:59 +08:00
|
|
|
return "redis unlock success"
|
|
|
|
|
} else {
|
|
|
|
|
return "redis refresh lock success"
|
|
|
|
|
}
|
|
|
|
|
case 0:
|
2025-03-13 16:51:50 +08:00
|
|
|
if lockType == UnRLockType {
|
|
|
|
|
return "redis unlock read lock success, the lock is still occupied by other processes read lock"
|
|
|
|
|
} else {
|
|
|
|
|
return "redis unlock write lock success, the lock is still occupied by other processes write lock"
|
|
|
|
|
}
|
2025-03-05 16:42:59 +08:00
|
|
|
case -1:
|
|
|
|
|
return "redis lock read lock failure,the lock is already occupied by another processes write lock"
|
|
|
|
|
case -2:
|
|
|
|
|
return "redis un lock read lock failure,the lock is already occupied by another processes write lock"
|
|
|
|
|
case -3:
|
|
|
|
|
return "redis lock write lock failure,the lock is already occupied by anthor processes read lock"
|
|
|
|
|
case -4:
|
|
|
|
|
return "redis lock write lock failure,the lock is already occupied by anthor processes write lock"
|
|
|
|
|
case -5:
|
|
|
|
|
return "redis un lock write lock failure,the lock is already occupied by another processes read lock"
|
|
|
|
|
case -6:
|
|
|
|
|
return "redis un lock write lock failure,the lock is already occupied by another processes write lock"
|
|
|
|
|
case -7:
|
|
|
|
|
return "redis lock write lock failure,the first priority in the current process non-waiting queue"
|
|
|
|
|
case -8:
|
|
|
|
|
return "redis refresh lock failure,the lock not exist"
|
|
|
|
|
}
|
|
|
|
|
return "unkown redis execution result"
|
|
|
|
|
}
|