593 lines
12 KiB
Plaintext
593 lines
12 KiB
Plaintext
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
|
|
}
|
|
}
|