package com.java110.core.cache; import com.java110.utils.cache.Jedis; import com.java110.utils.factory.ApplicationContextFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.connection.RedisConnection; import org.springframework.data.redis.core.RedisCallback; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.script.DefaultRedisScript; import org.springframework.stereotype.Component; import redis.clients.jedis.JedisPool; import java.util.List; import java.util.Set; import java.util.concurrent.TimeUnit; /** * spring 内置 redis */ @Component public class JedisClientTemplate implements Jedis { @Autowired private RedisTemplate redisTemplate; @Override public String set(String key, String value) { redisTemplate.opsForValue().set(key, value); return ""; } @Override public String set(byte[] key, byte[] value) { redisTemplate.opsForValue().set(key, value); return ""; } @Override public String set(String key, String value, String nxxx, String expx, int time) { // redisTemplate.opsForValue().set(key, value,nxxx,expx,time); // return ""; return redisTemplate.execute(new RedisCallback() { public String doInRedis(RedisConnection connection) { Jedis jedis = (Jedis) connection.getNativeConnection(); return jedis.set(key, value, nxxx, expx, time); } }, true).toString(); } @Override public String get(String key) { return redisTemplate.opsForValue().get(key).toString(); } @Override public byte[] get(byte[] key) { return (byte[]) redisTemplate.opsForValue().get(key); } @Override public Boolean exists(String key) { return redisTemplate.hasKey(key); } @Override public Long expire(String key, int seconds) { redisTemplate.expire(key, seconds, TimeUnit.SECONDS); return redisTemplate.opsForValue().getOperations().getExpire(key); } @Override public Long ttl(String key) { return redisTemplate.opsForValue().getOperations().getExpire(key); } @Override public Long incr(String key) { return redisTemplate.getConnectionFactory().getConnection().incr(redisTemplate.getKeySerializer().serialize(key)); } @Override public Long hset(String key, String field, String value) { JedisPool jedisPool = (JedisPool) ApplicationContextFactory.getBean("jedisPool"); redis.clients.jedis.Jedis jedis = jedisPool.getResource(); try { return jedis.hset(key, field, value); } finally { jedis.close(); } } @Override public String hget(String key, String field) { redisTemplate.opsForZSet().add(key, field, 1); return ""; } @Override public Long hdel(String key, String... field) { return redisTemplate.opsForZSet().remove(key, field); } @Override public Long del(String key) { redisTemplate.delete(key); return 1L; } @Override public Long del(byte[] key) { redisTemplate.delete(key); return 1L; } @Override public void close() { // JedisPool jedisPool = (JedisPool) ApplicationContextFactory.getBean("jedisPool"); // jedisPool.getResource().close(); } @Override public Set keys(String pattern) { return redisTemplate.keys(pattern); } @Override public Object eval(String script, int keyCount, String... params) { return null; } @Override public Object eval(String script, List keys, List args) { DefaultRedisScript redisScript = new DefaultRedisScript(script); return redisTemplate.execute(redisScript, keys, args); } }