package com.dashitech.redis.core;

import redis.clients.jedis.Jedis;

/**
 * Redis字符串，注意并发问题
 * Created by CX on 2018/8/20 0020.
 */
public class RedisStringCmd {

    public static void main(String[] args) {
        JedisPoolFactory.getDefaultJedis();

        RedisStringCmd.drop("testString");
        RedisStringCmd.set("testString","ABC");
        System.out.println(RedisStringCmd.getset("testString", "CBA"));
        System.out.println(RedisStringCmd.getset("testString111", "CBA"));
        RedisStringCmd.append("testString","DEF");
        System.out.println(RedisStringCmd.get("testString"));
    }

    /**
     * 新增，如果已存在，覆盖当前值
     * @param name  名称
     * @param value 值
     */
    public static void set(String name, String value) {
        Jedis jedis = JedisPoolFactory.getJedis();
        try {
            jedis.set(name, value);
        } finally {
            jedis.close();
        }
    }

    public static void set(byte[] name, byte[] value) {
        Jedis jedis = JedisPoolFactory.getJedis();
        try {
            jedis.set(name, value);
        } finally {
            jedis.close();
        }
    }

    /**
     * 有生命周期的新增，如果已存在，覆盖当前值和时间
     * @param seconds  时间秒数
     */
    public static void setex(String name, String value,int seconds) {
        Jedis jedis = JedisPoolFactory.getJedis();
        try {
            jedis.setex(name, seconds,value);
        } finally {
            jedis.close();
        }
    }

    public static void setex(byte[] name, byte[] value,int seconds) {
        Jedis jedis = JedisPoolFactory.getJedis();
        try {
            jedis.setex(name, seconds, value);
        } finally {
            jedis.close();
        }
    }

    /**
     *  key不存在时才成功
     * @return 成功1 失败 0
     */
    public static Long setnx(String name,String value) {
        Jedis jedis = JedisPoolFactory.getJedis();
        try {
            return jedis.setnx(name, value);
        } finally {
            jedis.close();
        }
    }

    /**
     * 设置值，并返回旧值，旧值不存在时返回null
     */
    public static String getset(String name,String value) {
        Jedis jedis = JedisPoolFactory.getJedis();
        try {
           return jedis.getSet(name, value);
        } finally {
            jedis.close();
        }
    }

    /**
     * 追加值到末尾，如果不存在key，新增
     */
    public static void append(String name,String value) {
        Jedis jedis = JedisPoolFactory.getJedis();
        try {
            jedis.append(name, value);
        } finally {
            jedis.close();
        }
    }

    /**
     * 直接删除key
     */
    public static void drop(String name) {
        Jedis jedis = JedisPoolFactory.getJedis();
        try {
            jedis.del(name);
        } finally {
            jedis.close();
        }
    }

    /**
     * 获取值
     */
    public static String get(String name) {
        Jedis jedis = JedisPoolFactory.getJedis();
        try {
            return jedis.get(name);
        } finally {
            jedis.close();
        }
    }

    public static byte[] get(byte[] name) {
        Jedis jedis = JedisPoolFactory.getJedis();
        try {
            return jedis.get(name);
        } finally {
            jedis.close();
        }
    }

    /**
     * 值大小
     */
    public static Long size(String name) {
        Jedis jedis = JedisPoolFactory.getJedis();
        try {
            return jedis.strlen(name);
        } finally {
            jedis.close();
        }
    }

}
