861 lines
16 KiB
Go
861 lines
16 KiB
Go
|
|
package redisUtil
|
|||
|
|
|
|||
|
|
import (
|
|||
|
|
"testing"
|
|||
|
|
"time"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
var (
|
|||
|
|
redisPoolObj_db *RedisPool
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
func init() {
|
|||
|
|
redisPoolObj_db = NewRedisPool("testPool", "10.1.0.21:6379", "redis_pwd", 5, 500, 200, 10*time.Second, 5*time.Second)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
func TestExists(t *testing.T) {
|
|||
|
|
/*
|
|||
|
|
redis> SET db "redis"
|
|||
|
|
OK
|
|||
|
|
*/
|
|||
|
|
key := "db"
|
|||
|
|
value := "redis"
|
|||
|
|
successful, err := redisPoolObj_db.Set(key, value, "", 0, "")
|
|||
|
|
if err != nil {
|
|||
|
|
t.Fail()
|
|||
|
|
}
|
|||
|
|
if !successful {
|
|||
|
|
t.Errorf("Set the key:%s should be successful, but now it's not.", key)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
redis> EXISTS db
|
|||
|
|
(integer) 1
|
|||
|
|
*/
|
|||
|
|
exist, err := redisPoolObj_db.Exists(key)
|
|||
|
|
if err != nil {
|
|||
|
|
t.Fail()
|
|||
|
|
}
|
|||
|
|
if !exist {
|
|||
|
|
t.Errorf("Set the key:%s should exist, but now it doesn't.", key)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
redis> DEL db
|
|||
|
|
(integer) 1
|
|||
|
|
*/
|
|||
|
|
expected := 1
|
|||
|
|
got, err := redisPoolObj_db.Del(key)
|
|||
|
|
if err != nil {
|
|||
|
|
t.Fail()
|
|||
|
|
}
|
|||
|
|
if got != expected {
|
|||
|
|
t.Errorf("Expected to get %d, but now got %d", expected, got)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
redis> EXISTS db
|
|||
|
|
(integer) 0
|
|||
|
|
*/
|
|||
|
|
exist, err = redisPoolObj_db.Exists(key)
|
|||
|
|
if err != nil {
|
|||
|
|
t.Fail()
|
|||
|
|
}
|
|||
|
|
if exist {
|
|||
|
|
t.Errorf("Set the key:%s should not exist, but now it does.", key)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
func TestType(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 weather "sunny"
|
|||
|
|
OK
|
|||
|
|
|
|||
|
|
redis> TYPE weather
|
|||
|
|
string
|
|||
|
|
*/
|
|||
|
|
key := "weather"
|
|||
|
|
value := "sunny"
|
|||
|
|
|
|||
|
|
successful, err := redisPoolObj_db.Set(key, value, "", 0, "")
|
|||
|
|
if err != nil {
|
|||
|
|
t.Fail()
|
|||
|
|
}
|
|||
|
|
if !successful {
|
|||
|
|
t.Errorf("Set the key:%s should be successful, but now it's not.", key)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
expected := "string"
|
|||
|
|
got, err := redisPoolObj_db.Type(key)
|
|||
|
|
if err != nil {
|
|||
|
|
t.Fail()
|
|||
|
|
}
|
|||
|
|
if got != expected {
|
|||
|
|
t.Errorf("Expected to get %s, but now got %s", expected, got)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
deleteKeys = append(deleteKeys, key)
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
# 列表
|
|||
|
|
|
|||
|
|
redis> LPUSH book_list "programming in scala"
|
|||
|
|
(integer) 1
|
|||
|
|
|
|||
|
|
redis> TYPE book_list
|
|||
|
|
list
|
|||
|
|
*/
|
|||
|
|
key = "book_list"
|
|||
|
|
value = "programming in scala"
|
|||
|
|
expected2 := 1
|
|||
|
|
got2, err := redisPoolObj_db.LPush(key, value)
|
|||
|
|
if err != nil {
|
|||
|
|
t.Fail()
|
|||
|
|
}
|
|||
|
|
if got2 != expected2 {
|
|||
|
|
t.Errorf("Expected to get %d, but now got %d", expected2, got2)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
expected = "list"
|
|||
|
|
got, err = redisPoolObj_db.Type(key)
|
|||
|
|
if err != nil {
|
|||
|
|
t.Fail()
|
|||
|
|
}
|
|||
|
|
if got != expected {
|
|||
|
|
t.Errorf("Expected to get %s, but now got %s", expected, got)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
deleteKeys = append(deleteKeys, key)
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
# 集合
|
|||
|
|
|
|||
|
|
redis> SADD pat "dog"
|
|||
|
|
(integer) 1
|
|||
|
|
|
|||
|
|
redis> TYPE pat
|
|||
|
|
set
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
key = "pat"
|
|||
|
|
value = "dog"
|
|||
|
|
expected3 := 1
|
|||
|
|
got3, err := redisPoolObj_db.SAdd(key, value)
|
|||
|
|
if err != nil {
|
|||
|
|
t.Fail()
|
|||
|
|
}
|
|||
|
|
if got3 != expected3 {
|
|||
|
|
t.Errorf("Expected to get %d, but now got %d", expected3, got3)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
expected = "set"
|
|||
|
|
got, err = redisPoolObj_db.Type(key)
|
|||
|
|
if err != nil {
|
|||
|
|
t.Fail()
|
|||
|
|
}
|
|||
|
|
if got != expected {
|
|||
|
|
t.Errorf("Expected to get %s, but now got %s", expected, got)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
deleteKeys = append(deleteKeys, key)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
func TestRename(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 存在且 newkey 不存在
|
|||
|
|
|
|||
|
|
redis> SET message "hello world"
|
|||
|
|
OK
|
|||
|
|
|
|||
|
|
redis> RENAME message greeting
|
|||
|
|
OK
|
|||
|
|
|
|||
|
|
redis> EXISTS message # message 不复存在
|
|||
|
|
(integer) 0
|
|||
|
|
|
|||
|
|
redis> EXISTS greeting # greeting 取而代之
|
|||
|
|
(integer) 1
|
|||
|
|
*/
|
|||
|
|
key := "message"
|
|||
|
|
value := "hello world"
|
|||
|
|
expected := true
|
|||
|
|
got, err := redisPoolObj_db.Set(key, value, "", 0, "")
|
|||
|
|
if err != nil {
|
|||
|
|
t.Fail()
|
|||
|
|
}
|
|||
|
|
if got != expected {
|
|||
|
|
t.Errorf("Expected to get %t, but now got %t", expected, got)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
newkey := "greeting"
|
|||
|
|
err = redisPoolObj_db.Rename(key, newkey)
|
|||
|
|
if err != nil {
|
|||
|
|
t.Fail()
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
expected = false
|
|||
|
|
got, err = redisPoolObj_db.Exists(key)
|
|||
|
|
if err != nil {
|
|||
|
|
t.Fail()
|
|||
|
|
}
|
|||
|
|
if got != expected {
|
|||
|
|
t.Errorf("Expected to get %t, but now got %t", expected, got)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
expected = true
|
|||
|
|
got, err = redisPoolObj_db.Exists(newkey)
|
|||
|
|
if err != nil {
|
|||
|
|
t.Fail()
|
|||
|
|
}
|
|||
|
|
if got != expected {
|
|||
|
|
t.Errorf("Expected to get %t, but now got %t", expected, got)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
deleteKeys = append(deleteKeys, newkey)
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
# 当 key 不存在时,返回错误
|
|||
|
|
|
|||
|
|
redis> RENAME fake_key never_exists
|
|||
|
|
(error) ERR no such key
|
|||
|
|
*/
|
|||
|
|
key = "fake_key"
|
|||
|
|
newkey = "never_exists"
|
|||
|
|
err = redisPoolObj_db.Rename(key, newkey)
|
|||
|
|
if err == nil {
|
|||
|
|
t.Errorf("There should be one error, but now there isn't.")
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
# newkey 已存在时, RENAME 会覆盖旧 newkey
|
|||
|
|
|
|||
|
|
redis> SET pc "lenovo"
|
|||
|
|
OK
|
|||
|
|
|
|||
|
|
redis> SET personal_computer "dell"
|
|||
|
|
OK
|
|||
|
|
|
|||
|
|
redis> RENAME pc personal_computer
|
|||
|
|
OK
|
|||
|
|
|
|||
|
|
redis> GET pc
|
|||
|
|
(nil)
|
|||
|
|
|
|||
|
|
redis:1> GET personal_computer # 原来的值 dell 被覆盖了
|
|||
|
|
"lenovo"
|
|||
|
|
*/
|
|||
|
|
key = "pc"
|
|||
|
|
value = "lenovo"
|
|||
|
|
expected = true
|
|||
|
|
got, err = redisPoolObj_db.Set(key, value, "", 0, "")
|
|||
|
|
if err != nil {
|
|||
|
|
t.Fail()
|
|||
|
|
}
|
|||
|
|
if got != expected {
|
|||
|
|
t.Errorf("Expected to get %t, but now got %t", expected, got)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
key = "personal_computer"
|
|||
|
|
value = "dell"
|
|||
|
|
expected = true
|
|||
|
|
got, err = redisPoolObj_db.Set(key, value, "", 0, "")
|
|||
|
|
if err != nil {
|
|||
|
|
t.Fail()
|
|||
|
|
}
|
|||
|
|
if got != expected {
|
|||
|
|
t.Errorf("Expected to get %t, but now got %t", expected, got)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
key = "pc"
|
|||
|
|
newkey = "personal_computer"
|
|||
|
|
err = redisPoolObj_db.Rename(key, newkey)
|
|||
|
|
if err != nil {
|
|||
|
|
t.Fail()
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
expected = false
|
|||
|
|
got, err = redisPoolObj_db.Exists(key)
|
|||
|
|
if err != nil {
|
|||
|
|
t.Fail()
|
|||
|
|
}
|
|||
|
|
if got != expected {
|
|||
|
|
t.Errorf("Expected to get %t, but now got %t", expected, got)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
expected = true
|
|||
|
|
got, err = redisPoolObj_db.Exists(newkey)
|
|||
|
|
if err != nil {
|
|||
|
|
t.Fail()
|
|||
|
|
}
|
|||
|
|
if got != expected {
|
|||
|
|
t.Errorf("Expected to get %t, but now got %t", expected, got)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
deleteKeys = append(deleteKeys, newkey)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
func TestRenameNX(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
|
|||
|
|
}
|
|||
|
|
}()
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
# newkey 不存在,改名成功
|
|||
|
|
|
|||
|
|
redis> SET player "MPlyaer"
|
|||
|
|
OK
|
|||
|
|
|
|||
|
|
redis> EXISTS best_player
|
|||
|
|
(integer) 0
|
|||
|
|
|
|||
|
|
redis> RENAMENX player best_player
|
|||
|
|
(integer) 1
|
|||
|
|
*/
|
|||
|
|
key := "player"
|
|||
|
|
value := "MPlayer"
|
|||
|
|
expected := true
|
|||
|
|
got, err := redisPoolObj_db.Set(key, value, "", 0, "")
|
|||
|
|
if err != nil {
|
|||
|
|
t.Fail()
|
|||
|
|
}
|
|||
|
|
if got != expected {
|
|||
|
|
t.Errorf("Expected to get %t, but now got %t", expected, got)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
newkey := "best_player"
|
|||
|
|
expected = false
|
|||
|
|
got, err = redisPoolObj_db.Exists(newkey)
|
|||
|
|
if err != nil {
|
|||
|
|
t.Fail()
|
|||
|
|
}
|
|||
|
|
if got != expected {
|
|||
|
|
t.Errorf("Expected to get %t, but now got %t", expected, got)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
expected = true
|
|||
|
|
got, err = redisPoolObj_db.RenameNX(key, newkey)
|
|||
|
|
if err != nil {
|
|||
|
|
t.Fail()
|
|||
|
|
}
|
|||
|
|
if got != expected {
|
|||
|
|
t.Errorf("Expected to get %t, but now got %t", expected, got)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
deleteKeys = append(deleteKeys, newkey)
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
# newkey存在时,失败
|
|||
|
|
|
|||
|
|
redis> SET animal "bear"
|
|||
|
|
OK
|
|||
|
|
|
|||
|
|
redis> SET favorite_animal "butterfly"
|
|||
|
|
OK
|
|||
|
|
|
|||
|
|
redis> RENAMENX animal favorite_animal
|
|||
|
|
(integer) 0
|
|||
|
|
|
|||
|
|
redis> get animal
|
|||
|
|
"bear"
|
|||
|
|
|
|||
|
|
redis> get favorite_animal
|
|||
|
|
"butterfly"
|
|||
|
|
*/
|
|||
|
|
key = "animal"
|
|||
|
|
value = "bear"
|
|||
|
|
expected = true
|
|||
|
|
got, err = redisPoolObj_db.Set(key, value, "", 0, "")
|
|||
|
|
if err != nil {
|
|||
|
|
t.Fail()
|
|||
|
|
}
|
|||
|
|
if got != expected {
|
|||
|
|
t.Errorf("Expected to get %t, but now got %t", expected, got)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
deleteKeys = append(deleteKeys, key)
|
|||
|
|
|
|||
|
|
key = "favorite_animal"
|
|||
|
|
value = "butterfly"
|
|||
|
|
expected = true
|
|||
|
|
got, err = redisPoolObj_db.Set(key, value, "", 0, "")
|
|||
|
|
if err != nil {
|
|||
|
|
t.Fail()
|
|||
|
|
}
|
|||
|
|
if got != expected {
|
|||
|
|
t.Errorf("Expected to get %t, but now got %t", expected, got)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
deleteKeys = append(deleteKeys, key)
|
|||
|
|
|
|||
|
|
expected = false
|
|||
|
|
got, err = redisPoolObj_db.RenameNX(key, newkey)
|
|||
|
|
if err != nil {
|
|||
|
|
t.Fail()
|
|||
|
|
}
|
|||
|
|
if got != expected {
|
|||
|
|
t.Errorf("Expected to get %t, but now got %t", expected, got)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
key2 := "animal"
|
|||
|
|
expected2 := "bear"
|
|||
|
|
got2_interface, exist2, err := redisPoolObj_db.Get(key2)
|
|||
|
|
if err != nil {
|
|||
|
|
t.Fail()
|
|||
|
|
}
|
|||
|
|
if !exist2 {
|
|||
|
|
t.Errorf("The key:%s should exist, but now it doesn't.", key2)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
got2, err := redisPoolObj_db.String(got2_interface)
|
|||
|
|
if err != nil {
|
|||
|
|
t.Fail()
|
|||
|
|
}
|
|||
|
|
if got2 != expected2 {
|
|||
|
|
t.Errorf("Expected to get %s, but now got %s", expected2, got2)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
key3 := "animal"
|
|||
|
|
expected3 := "bear"
|
|||
|
|
got3_interface, exist3, err := redisPoolObj_db.Get(key3)
|
|||
|
|
if err != nil {
|
|||
|
|
t.Fail()
|
|||
|
|
}
|
|||
|
|
if !exist3 {
|
|||
|
|
t.Errorf("The key:%s should exist, but now it doesn't.", key3)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
got3, err := redisPoolObj_db.String(got3_interface)
|
|||
|
|
if err != nil {
|
|||
|
|
t.Fail()
|
|||
|
|
}
|
|||
|
|
if got3 != expected3 {
|
|||
|
|
t.Errorf("Expected to get %s, but now got %s", expected3, got3)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
func TestDel(t *testing.T) {
|
|||
|
|
/*
|
|||
|
|
# 删除单个 key
|
|||
|
|
|
|||
|
|
redis> SET name huangz
|
|||
|
|
OK
|
|||
|
|
|
|||
|
|
redis> DEL name
|
|||
|
|
(integer) 1
|
|||
|
|
*/
|
|||
|
|
key := "name"
|
|||
|
|
value := "huangz"
|
|||
|
|
expected := true
|
|||
|
|
got, err := redisPoolObj_db.Set(key, value, "", 0, "")
|
|||
|
|
if err != nil {
|
|||
|
|
t.Fail()
|
|||
|
|
}
|
|||
|
|
if got != expected {
|
|||
|
|
t.Errorf("Expected to get %t, but now got %t", expected, got)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
expected2 := 1
|
|||
|
|
got2, err := redisPoolObj_db.Del(key)
|
|||
|
|
if err != nil {
|
|||
|
|
t.Fail()
|
|||
|
|
}
|
|||
|
|
if got2 != expected2 {
|
|||
|
|
t.Errorf("Expected to get %d, but now got %d", expected2, got2)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
# 删除一个不存在的 key
|
|||
|
|
|
|||
|
|
redis> EXISTS phone
|
|||
|
|
(integer) 0
|
|||
|
|
|
|||
|
|
redis> DEL phone # 失败,没有 key 被删除
|
|||
|
|
(integer) 0
|
|||
|
|
*/
|
|||
|
|
key = "phone"
|
|||
|
|
expected = false
|
|||
|
|
got, err = redisPoolObj_db.Exists(key)
|
|||
|
|
if err != nil {
|
|||
|
|
t.Fail()
|
|||
|
|
}
|
|||
|
|
if got != expected {
|
|||
|
|
t.Errorf("Expected to get %t, but now got %t", expected, got)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
expected3 := 0
|
|||
|
|
got3, err := redisPoolObj_db.Del(key)
|
|||
|
|
if err != nil {
|
|||
|
|
t.Fail()
|
|||
|
|
}
|
|||
|
|
if got3 != expected3 {
|
|||
|
|
t.Errorf("Expected to get %d, but now got %d", expected3, got3)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
# 同时删除多个 key
|
|||
|
|
|
|||
|
|
redis> SET name "redis"
|
|||
|
|
OK
|
|||
|
|
|
|||
|
|
redis> SET type "key-value store"
|
|||
|
|
OK
|
|||
|
|
|
|||
|
|
redis> SET website "redis.com"
|
|||
|
|
OK
|
|||
|
|
|
|||
|
|
redis> DEL name type website
|
|||
|
|
(integer) 3
|
|||
|
|
*/
|
|||
|
|
key1 := "name"
|
|||
|
|
value1 := "redis"
|
|||
|
|
expected = true
|
|||
|
|
got, err = redisPoolObj_db.Set(key1, value1, "", 0, "")
|
|||
|
|
if err != nil {
|
|||
|
|
t.Fail()
|
|||
|
|
}
|
|||
|
|
if got != expected {
|
|||
|
|
t.Errorf("Expected to get %t, but now got %t", expected, got)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
key2 := "type"
|
|||
|
|
value2 := "key-value store"
|
|||
|
|
expected = true
|
|||
|
|
got, err = redisPoolObj_db.Set(key2, value2, "", 0, "")
|
|||
|
|
if err != nil {
|
|||
|
|
t.Fail()
|
|||
|
|
}
|
|||
|
|
if got != expected {
|
|||
|
|
t.Errorf("Expected to get %t, but now got %t", expected, got)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
key3 := "website"
|
|||
|
|
value3 := "redis.com"
|
|||
|
|
expected = true
|
|||
|
|
got, err = redisPoolObj_db.Set(key3, value3, "", 0, "")
|
|||
|
|
if err != nil {
|
|||
|
|
t.Fail()
|
|||
|
|
}
|
|||
|
|
if got != expected {
|
|||
|
|
t.Errorf("Expected to get %t, but now got %t", expected, got)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
expected4 := 3
|
|||
|
|
got4, err := redisPoolObj_db.Del(key1, key2, key3)
|
|||
|
|
if err != nil {
|
|||
|
|
t.Fail()
|
|||
|
|
}
|
|||
|
|
if got4 != expected4 {
|
|||
|
|
t.Errorf("Expected to get %d, but now got %d", expected4, got4)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
func TestRandomKey(t *testing.T) {
|
|||
|
|
deleteKeys := make([]string, 0, 8)
|
|||
|
|
defer func() {
|
|||
|
|
// Delete the test keys
|
|||
|
|
distinctKeyList := getDistinctKeyList(deleteKeys)
|
|||
|
|
count, err := redisPoolObj_list.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> RANDOMKEY
|
|||
|
|
(nil)
|
|||
|
|
*/
|
|||
|
|
expected := ""
|
|||
|
|
got, exist, err := redisPoolObj_db.RandomKey()
|
|||
|
|
if err != nil {
|
|||
|
|
t.Fail()
|
|||
|
|
}
|
|||
|
|
if exist {
|
|||
|
|
t.Errorf("RandomKey doesn't exist, but now it does.")
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
if got != expected {
|
|||
|
|
t.Errorf("Expected to get %s, but now got %s", expected, got)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
# 数据库不为空
|
|||
|
|
|
|||
|
|
redis> MSET fruit "apple" drink "beer" food "cookies" # 设置多个 key
|
|||
|
|
OK
|
|||
|
|
|
|||
|
|
redis> RANDOMKEY
|
|||
|
|
"fruit"
|
|||
|
|
|
|||
|
|
redis> RANDOMKEY
|
|||
|
|
"food"
|
|||
|
|
|
|||
|
|
redis> KEYS * # 查看数据库内所有key,证明 RANDOMKEY 并不删除 key
|
|||
|
|
1) "food"
|
|||
|
|
2) "drink"
|
|||
|
|
3) "fruit"
|
|||
|
|
*/
|
|||
|
|
key_value_map := make(map[string]interface{})
|
|||
|
|
key_value_map["fruit"] = "apple"
|
|||
|
|
key_value_map["drink"] = "beer"
|
|||
|
|
key_value_map["food"] = "cookies"
|
|||
|
|
err = redisPoolObj_db.MSet(key_value_map)
|
|||
|
|
if err != nil {
|
|||
|
|
t.Fail()
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
got, exist, err = redisPoolObj_db.RandomKey()
|
|||
|
|
if err != nil {
|
|||
|
|
t.Fail()
|
|||
|
|
}
|
|||
|
|
if !exist {
|
|||
|
|
t.Errorf("RandomKey should exist, but now it doesn't.")
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
if _, exist = key_value_map[got]; !exist {
|
|||
|
|
t.Errorf("RandomKey should exist, but now it doesn't.")
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
expected2 := make([]string, 0, len(key_value_map))
|
|||
|
|
for k := range key_value_map {
|
|||
|
|
expected2 = append(expected2, k)
|
|||
|
|
deleteKeys = append(deleteKeys, k)
|
|||
|
|
}
|
|||
|
|
got2, err := redisPoolObj_db.Keys("*")
|
|||
|
|
if err != nil {
|
|||
|
|
t.Fail()
|
|||
|
|
}
|
|||
|
|
if isTwoUnorderedSliceEqual(expected2, got2) == false {
|
|||
|
|
t.Errorf("Expected to get %v, but got %v\n", expected2, got2)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
func TestDBSize(t *testing.T) {
|
|||
|
|
deleteKeys := make([]string, 0, 8)
|
|||
|
|
defer func() {
|
|||
|
|
// Delete the test keys
|
|||
|
|
distinctKeyList := getDistinctKeyList(deleteKeys)
|
|||
|
|
count, err := redisPoolObj_list.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> DBSIZE
|
|||
|
|
(integer) 0
|
|||
|
|
|
|||
|
|
redis> SET new_key "hello_moto" # 增加一个 key 试试
|
|||
|
|
OK
|
|||
|
|
|
|||
|
|
redis> DBSIZE
|
|||
|
|
(integer) 1
|
|||
|
|
*/
|
|||
|
|
expected := 0
|
|||
|
|
got, err := redisPoolObj_db.DBSize()
|
|||
|
|
if err != nil {
|
|||
|
|
t.Fail()
|
|||
|
|
}
|
|||
|
|
if got != expected {
|
|||
|
|
t.Errorf("Expected to get %d, but now got %d", expected, got)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
key := "new_key"
|
|||
|
|
value := "hello_moto"
|
|||
|
|
redisPoolObj_db.Set(key, value, "", 0, "")
|
|||
|
|
|
|||
|
|
deleteKeys = append(deleteKeys, key)
|
|||
|
|
|
|||
|
|
expected = 1
|
|||
|
|
got, err = redisPoolObj_db.DBSize()
|
|||
|
|
if err != nil {
|
|||
|
|
t.Fail()
|
|||
|
|
}
|
|||
|
|
if got != expected {
|
|||
|
|
t.Errorf("Expected to get %d, but now got %d", expected, got)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
func TestKeys(t *testing.T) {
|
|||
|
|
deleteKeys := make([]string, 0, 8)
|
|||
|
|
defer func() {
|
|||
|
|
// Delete the test keys
|
|||
|
|
distinctKeyList := getDistinctKeyList(deleteKeys)
|
|||
|
|
count, err := redisPoolObj_list.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> MSET one 1 two 2 three 3 four 4 # 一次设置 4 个 key
|
|||
|
|
OK
|
|||
|
|
*/
|
|||
|
|
key_value_map := make(map[string]interface{})
|
|||
|
|
key_value_map["one"] = "1"
|
|||
|
|
key_value_map["two"] = "2"
|
|||
|
|
key_value_map["three"] = "3"
|
|||
|
|
key_value_map["four"] = "4"
|
|||
|
|
err := redisPoolObj_db.MSet(key_value_map)
|
|||
|
|
if err != nil {
|
|||
|
|
t.Fail()
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
for k := range key_value_map {
|
|||
|
|
deleteKeys = append(deleteKeys, k)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
redis> KEYS *o*
|
|||
|
|
1) "four"
|
|||
|
|
2) "two"
|
|||
|
|
3) "one"
|
|||
|
|
*/
|
|||
|
|
pattern := "*o*"
|
|||
|
|
expected := []string{"four", "two", "one"}
|
|||
|
|
got, err := redisPoolObj_db.Keys(pattern)
|
|||
|
|
if err != nil {
|
|||
|
|
t.Fail()
|
|||
|
|
}
|
|||
|
|
if isTwoUnorderedSliceEqual(expected, got) == false {
|
|||
|
|
t.Errorf("Expected to get %v, but got %v\n", expected, got)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
redis> KEYS t??
|
|||
|
|
1) "two"
|
|||
|
|
*/
|
|||
|
|
pattern = "t??"
|
|||
|
|
expected = []string{"two"}
|
|||
|
|
got, err = redisPoolObj_db.Keys(pattern)
|
|||
|
|
if err != nil {
|
|||
|
|
t.Fail()
|
|||
|
|
}
|
|||
|
|
if isTwoUnorderedSliceEqual(expected, got) == false {
|
|||
|
|
t.Errorf("Expected to get %v, but got %v\n", expected, got)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
redis> KEYS t[w]*
|
|||
|
|
1) "two"
|
|||
|
|
*/
|
|||
|
|
pattern = "t[w]*"
|
|||
|
|
expected = []string{"two"}
|
|||
|
|
got, err = redisPoolObj_db.Keys(pattern)
|
|||
|
|
if err != nil {
|
|||
|
|
t.Fail()
|
|||
|
|
}
|
|||
|
|
if isTwoUnorderedSliceEqual(expected, got) == false {
|
|||
|
|
t.Errorf("Expected to get %v, but got %v\n", expected, got)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
redis> KEYS * # 匹配数据库内所有 key
|
|||
|
|
1) "four"
|
|||
|
|
2) "three"
|
|||
|
|
3) "two"
|
|||
|
|
4) "one"
|
|||
|
|
*/
|
|||
|
|
pattern = "*"
|
|||
|
|
expected = []string{"two", "one", "three", "four"}
|
|||
|
|
got, err = redisPoolObj_db.Keys(pattern)
|
|||
|
|
if err != nil {
|
|||
|
|
t.Fail()
|
|||
|
|
}
|
|||
|
|
if isTwoUnorderedSliceEqual(expected, got) == false {
|
|||
|
|
t.Errorf("Expected to get %v, but got %v\n", expected, got)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
}
|