package sdl
import (
+ "fmt"
"github.com/go-redis/redis"
"os"
"reflect"
nsPrefix: "{" + nameSpace + "},",
client: client,
}
+ s.CheckRedisModuleExtensionCommands()
return &s
}
+func (s *SdlInstance) CheckRedisModuleExtensionCommands() {
+ var moduleError bool
+ commands, err := s.client.Command().Result()
+ if err == nil {
+ redisModuleCommands := []string{
+ "setie", "delie", "setiepub", "deliepub",
+ "setnxpub", "msetmpub", "delmpub",
+ }
+ for _, v := range redisModuleCommands {
+ _, ok := commands[v]
+ if !ok {
+ fmt.Println("ERROR: Missing command:", v)
+ moduleError = true
+ }
+ }
+ } else {
+ fmt.Println("ERROR:", err)
+ }
+ if moduleError {
+ fmt.Println("Please make sure that redis extension modules have been installed.")
+ fmt.Println("To install: redis-cli module load /usr/local/libexec/redismodule/libredismodule.so")
+ }
+}
+
func (s *SdlInstance) setNamespaceToKeys(pairs ...interface{}) []interface{} {
var retVal []interface{}
for i, v := range pairs {
return retVal
}
+func checkResultAndError(result interface{}, err error) (bool, error) {
+ if err != nil {
+ if err == redis.Nil {
+ return false, nil
+ }
+ return false, err
+ }
+ if result == "OK" {
+ return true, nil
+ }
+ return false, nil
+}
+
func (s *SdlInstance) Set(pairs ...interface{}) error {
keyAndData := s.setNamespaceToKeys(pairs...)
err := s.client.MSet(keyAndData...).Err()
return m, err
}
-func (s *SdlInstance) SetIf(key string, oldData, newData interface{}) {
- panic("SetIf not implemented\n")
+func (s *SdlInstance) SetIf(key string, oldData, newData interface{}) (bool, error) {
+ return checkResultAndError(s.client.Do("SETIE", key, newData, oldData).Result())
}
func (s *SdlInstance) SetIfiNotExists(key string, data interface{}) {
func (s *SdlInstance) RemoveAll() {
panic("RemoveAll not implemented\n")
}
-