goProject/trunk/goutil/redisUtil/redisPool_expire_test.go
皮蛋13361098506 1b77f62820 初始化项目
2025-01-06 16:01:02 +08:00

593 lines
12 KiB
Go

package redisUtil
import (
"testing"
"time"
)
var (
redisPoolObj_expire *RedisPool
)
func init() {
redisPoolObj_expire = NewRedisPool("testPool", "10.1.0.21:6379", "redis_pwd", 5, 500, 200, 10*time.Second, 5*time.Second)
}
func TestExpire(t *testing.T) {
deleteKeys := make([]string, 0, 8)
defer func() {
// Delete the test keys
distinctKeyList := getDistinctKeyList(deleteKeys)
count, err := redisPoolObj_string.Del(distinctKeyList...)
if err != nil {
t.Fail()
}
if count != len(distinctKeyList) {
t.Errorf("Expected to get %d, but now got %d", len(distinctKeyList), count)
return
}
}()
/*
redis> SET cache_page "www.google.com"
OK
redis> TTL cache_page
(integer) -1
redis> EXPIRE cache_page 30 # 设置过期时间为 30 秒
(integer) 1
redis> TTL cache_page # 查看剩余生存时间
(integer) 23
redis> EXPIRE cache_page 30000 # 更新过期时间
(integer) 1
redis> TTL cache_page
(integer) 29996
*/
key := "cache_page"
value := "www.google.com"
expected := true
got, err := redisPoolObj_expire.Set(key, value, "", 0, "")
if err != nil {
t.Fail()
}
if got != expected {
t.Errorf("Expected to get %t, but got %t", expected, got)
return
}
deleteKeys = append(deleteKeys, key)
expected = true
_, _, got, err = redisPoolObj_expire.TTL(key)
if err != nil {
t.Fail()
}
if got != expected {
t.Errorf("Expected to get %t, but got %t", expected, got)
return
}
seconds := int64(30)
got, err = redisPoolObj_expire.Expire(key, seconds)
if err != nil {
t.Fail()
}
if got != expected {
t.Errorf("Expected to get %t, but got %t", expected, got)
return
}
expected2 := seconds - 5
got2, exist, _, err := redisPoolObj_expire.TTL(key)
if err != nil {
t.Fail()
}
if !exist {
t.Errorf("The key:%s should exist, but now it doesn't.", key)
return
}
if got2 <= expected2 {
t.Errorf("Expected to get a number bigger than %d, but now get %d.", expected2, got2)
return
}
seconds = int64(3000)
got, err = redisPoolObj_expire.Expire(key, seconds)
if err != nil {
t.Fail()
}
if got != expected {
t.Errorf("Expected to get %t, but got %t", expected, got)
return
}
expected2 = seconds - 5
got2, exist, _, err = redisPoolObj_expire.TTL(key)
if err != nil {
t.Fail()
}
if !exist {
t.Errorf("The key:%s should exist, but now it doesn't.", key)
return
}
if got2 <= expected2 {
t.Errorf("Expected to get a number bigger than %d, but now get %d.", expected2, got2)
return
}
}
func TestExpireAt(t *testing.T) {
deleteKeys := make([]string, 0, 8)
defer func() {
// Delete the test keys
distinctKeyList := getDistinctKeyList(deleteKeys)
count, err := redisPoolObj_string.Del(distinctKeyList...)
if err != nil {
t.Fail()
}
if count != len(distinctKeyList) {
t.Errorf("Expected to get %d, but now got %d", len(distinctKeyList), count)
return
}
}()
/*
redis> SET cache www.google.com
OK
redis> EXPIREAT cache '1609403601' # 这个 key 将在 Now()+1day 过期
(integer) 1
redis> TTL cache
(integer) 45081860
*/
key := "cache_page"
value := "www.google.com"
expected := true
got, err := redisPoolObj_expire.Set(key, value, "", 0, "")
if err != nil {
t.Fail()
}
if got != expected {
t.Errorf("Expected to get %t, but got %t", expected, got)
return
}
deleteKeys = append(deleteKeys, key)
timestamp := time.Now().AddDate(0, 0, 1).Unix()
expected = true
got, err = redisPoolObj_expire.ExpireAt(key, timestamp)
if err != nil {
t.Fail()
}
if got != expected {
t.Errorf("Expected to get %t, but got %t", expected, got)
return
}
expected2 := int64(86400 - 5)
got2, exist, _, err := redisPoolObj_expire.TTL(key)
if err != nil {
t.Fail()
}
if !exist {
t.Errorf("The key:%s should exist, but now it doesn't.", key)
return
}
if got2 <= expected2 {
t.Errorf("Expected to get a number bigger than %d, but now get %d.", expected2, got2)
return
}
}
func TestTTL(t *testing.T) {
deleteKeys := make([]string, 0, 8)
defer func() {
// Delete the test keys
distinctKeyList := getDistinctKeyList(deleteKeys)
count, err := redisPoolObj_string.Del(distinctKeyList...)
if err != nil {
t.Fail()
}
if count != len(distinctKeyList) {
t.Errorf("Expected to get %d, but now got %d", len(distinctKeyList), count)
return
}
}()
/*
# 不存在的 key
redis> TTL key
(integer) -2
*/
key := "key"
expected := false
_, got, _, err := redisPoolObj_expire.TTL(key)
if err != nil {
t.Fail()
}
if got != expected {
t.Errorf("Expected to get %t, but got %t", expected, got)
return
}
/*
# key 存在,但没有设置剩余生存时间
redis> SET key value
OK
redis> TTL key
(integer) -1
*/
value := "value"
redisPoolObj_expire.Set(key, value, "", 0, "")
deleteKeys = append(deleteKeys, key)
expected2 := int64(-1)
got2, exist, _, err := redisPoolObj_expire.TTL(key)
if err != nil {
t.Fail()
}
if !exist {
t.Errorf("The key:%s should exist, but now it doesn't.", key)
return
}
if got2 != expected2 {
t.Errorf("Expected to get %d, but got %d", expected2, got2)
return
}
/*
# 有剩余生存时间的 key
redis> EXPIRE key 10086
(integer) 1
redis> TTL key
(integer) 10084
*/
seconds := int64(10086)
expected = true
got, err = redisPoolObj_expire.Expire(key, seconds)
if err != nil {
t.Fail()
}
if got != expected {
t.Errorf("Expected to get %t, but got %t", expected, got)
return
}
expected2 = seconds - 5
got2, exist, _, err = redisPoolObj_expire.TTL(key)
if err != nil {
t.Fail()
}
if !exist {
t.Errorf("The key:%s should exist, but now it doesn't.", key)
return
}
if got2 <= expected2 {
t.Errorf("Expected to get a number bigger than %d, but now get %d.", expected2, got2)
return
}
}
func TestPersist(t *testing.T) {
deleteKeys := make([]string, 0, 8)
defer func() {
// Delete the test keys
distinctKeyList := getDistinctKeyList(deleteKeys)
count, err := redisPoolObj_string.Del(distinctKeyList...)
if err != nil {
t.Fail()
}
if count != len(distinctKeyList) {
t.Errorf("Expected to get %d, but now got %d", len(distinctKeyList), count)
return
}
}()
/*
redis> SET mykey "Hello"
OK
*/
key := "mykey"
value := "Hello"
redisPoolObj_expire.Set(key, value, "", 0, "")
/*
redis> EXPIRE mykey 10 # 为 key 设置生存时间
(integer) 1
*/
seconds := int64(10)
expected := true
got, err := redisPoolObj_expire.Expire(key, seconds)
if err != nil {
t.Fail()
}
if got != expected {
t.Errorf("Expected to get %t, but got %t", expected, got)
return
}
deleteKeys = append(deleteKeys, key)
/*
redis> TTL mykey
(integer) 10
*/
expected2 := seconds - 5
got2, _, _, err := redisPoolObj_expire.TTL(key)
if err != nil {
t.Fail()
}
if got2 <= expected2 {
t.Errorf("Expected to get %d, but got %d", expected2, got2)
return
}
/*
redis> PERSIST mykey # 移除 key 的生存时间
(integer) 1
*/
redisPoolObj_expire.Persist(key)
/*
redis> TTL mykey
(integer) -1
*/
expected = true
_, _, got, err = redisPoolObj_expire.TTL(key)
if err != nil {
t.Fail()
}
if got != expected {
t.Errorf("Expected to get %t, but got %t", expected, got)
return
}
}
func TestPExpire(t *testing.T) {
deleteKeys := make([]string, 0, 8)
defer func() {
// Delete the test keys
distinctKeyList := getDistinctKeyList(deleteKeys)
count, err := redisPoolObj_string.Del(distinctKeyList...)
if err != nil {
t.Fail()
}
if count != len(distinctKeyList) {
t.Errorf("Expected to get %d, but now got %d", len(distinctKeyList), count)
return
}
}()
/*
redis> SET mykey "Hello"
OK
*/
key := "mykey"
value := "Hello"
expected := true
got, err := redisPoolObj_expire.Set(key, value, "", 0, "")
if err != nil {
t.Fail()
}
if got != expected {
t.Errorf("Expected to get %t, but got %t", expected, got)
return
}
deleteKeys = append(deleteKeys, key)
/*
redis> PEXPIRE mykey 1500
(integer) 1
*/
milliseconds := int64(1500)
expected = true
got, err = redisPoolObj_expire.PExpire(key, milliseconds)
if err != nil {
t.Fail()
}
if got != expected {
t.Errorf("Expected to get %t, but got %t", expected, got)
return
}
/*
redis> TTL mykey # TTL 的返回值以秒为单位
(integer) 2
redis> PTTL mykey # PTTL 可以给出准确的毫秒数
(integer) 1499
*/
expected2 := int64(1)
got2, _, _, err := redisPoolObj_expire.TTL(key)
if err != nil {
t.Fail()
}
if got2 < expected2 {
t.Errorf("TTL %d should be no less than %d", got2, expected2)
return
}
expected2 = int64(1000)
got2, _, _, err = redisPoolObj_expire.PTTL(key)
if err != nil {
t.Fail()
}
if got2 < expected2 {
t.Errorf("TTL %d should be no less than %d", got2, expected2)
return
}
}
func TestPExpireAt(t *testing.T) {
deleteKeys := make([]string, 0, 8)
defer func() {
// Delete the test keys
distinctKeyList := getDistinctKeyList(deleteKeys)
count, err := redisPoolObj_string.Del(distinctKeyList...)
if err != nil {
t.Fail()
}
if count != len(distinctKeyList) {
t.Errorf("Expected to get %d, but now got %d", len(distinctKeyList), count)
return
}
}()
/*
redis> SET mykey "Hello"
OK
*/
key := "mykey"
value := "Hello"
expected := true
got, err := redisPoolObj_expire.Set(key, value, "", 0, "")
if err != nil {
t.Fail()
}
if got != expected {
t.Errorf("Expected to get %t, but got %t", expected, got)
return
}
deleteKeys = append(deleteKeys, key)
/*
redis> PEXPIREAT mykey 1609403601005
(integer) 1
*/
milliseconds_timestamp := time.Now().AddDate(0, 0, 1).Unix() * 1000
redisPoolObj_expire.PExpireAt(key, milliseconds_timestamp)
/*
redis> TTL mykey # TTL 返回秒
(integer) 223157079
redis> PTTL mykey # PTTL 返回毫秒
(integer) 223157079318
*/
expected2 := int64(86400 - 5)
got2, exist, _, err := redisPoolObj_expire.TTL(key)
if err != nil {
t.Fail()
}
if !exist {
t.Errorf("The key:%s should exist, but now it doesn't.", key)
return
}
if got2 <= expected2 {
t.Errorf("Expected to get a number bigger than %d, but now get %d.", expected2, got2)
return
}
expected2 = int64(86400000 - 5)
got2, exist, _, err = redisPoolObj_expire.PTTL(key)
if err != nil {
t.Fail()
}
if !exist {
t.Errorf("The key:%s should exist, but now it doesn't.", key)
return
}
if got2 <= expected2 {
t.Errorf("Expected to get a number bigger than %d, but now get %d.", expected2, got2)
return
}
}
func TestPTTL(t *testing.T) {
deleteKeys := make([]string, 0, 8)
defer func() {
// Delete the test keys
distinctKeyList := getDistinctKeyList(deleteKeys)
count, err := redisPoolObj_string.Del(distinctKeyList...)
if err != nil {
t.Fail()
}
if count != len(distinctKeyList) {
t.Errorf("Expected to get %d, but now got %d", len(distinctKeyList), count)
return
}
}()
/*
# 不存在的 key
redis> PTTL key
(integer) -2
*/
key := "key"
expected := false
_, got, _, err := redisPoolObj_expire.PTTL(key)
if err != nil {
t.Fail()
}
if got != expected {
t.Errorf("Expected to get %t, but got %t", expected, got)
return
}
/*
# key 存在,但没有设置剩余生存时间
redis> SET key value
OK
redis> PTTL key
(integer) -1
*/
value := "value"
redisPoolObj_expire.Set(key, value, "", 0, "")
deleteKeys = append(deleteKeys, key)
expected = true
_, _, got, err = redisPoolObj_expire.TTL(key)
if err != nil {
t.Fail()
}
if got != expected {
t.Errorf("Expected to get %t, but got %t", expected, got)
return
}
/*
# 有剩余生存时间的 key
redis> PEXPIRE key 10086
(integer) 1
redis> PTTL key
(integer) 6179
*/
milliseconds := int64(10086)
expected = true
got, err = redisPoolObj_expire.PExpire(key, milliseconds)
if err != nil {
t.Fail()
}
if got != expected {
t.Errorf("Expected to get %t, but got %t", expected, got)
return
}
expected2 := milliseconds - 500
got2, exist, _, err := redisPoolObj_expire.PTTL(key)
if err != nil {
t.Fail()
}
if !exist {
t.Errorf("The key:%s should exist, but now it doesn't.", key)
return
}
if got2 <= expected2 {
t.Errorf("Expected to get a number bigger than %d, but now get %d.", expected2, got2)
return
}
}