Skip to content

Commit

Permalink
RedisTemplate封装
Browse files Browse the repository at this point in the history
  • Loading branch information
javahongxi committed Dec 27, 2018
1 parent 3769fad commit 560e33a
Show file tree
Hide file tree
Showing 5 changed files with 221 additions and 19 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,207 @@
package org.hongxi.whatsmars.redis.client;

import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;

import java.util.*;

/**
* Created by shenhongxi on 2018/12/27.
* 单个redis模式作为sharding模式的特例(配一个host:port即可)
* JedisCluster不用封装,直接用即可
*/
public class RedisTemplate {

private ShardedJedisPool shardedJedisPool;

public void set(String key, String value) {
ShardedJedis jedis = fetchJedis();
try {
jedis.set(key, value);
} finally {
release(jedis);
}
}

public void set(String key, String value, int activeTime) {
ShardedJedis jedis = fetchJedis();
try {
jedis.setex(key, activeTime, value);
} finally {
release(jedis);
}
}

public void setIfAbsent(String key, String value) {
ShardedJedis jedis = fetchJedis();
try {
jedis.setnx(key, value);
} finally {
release(jedis);
}
}

public String get(String key) {
ShardedJedis jedis = fetchJedis();
try {
return jedis.get(key);
} finally {
release(jedis);
}
}

public void del(String key) {
ShardedJedis jedis = fetchJedis();
try {
jedis.del(key);
} finally {
release(jedis);
}
}

public List<String> multiGet(Collection<String> keys) {
List<String> list = new ArrayList<>();
keys.stream().forEach(key -> list.add(get(key)));
return list;
}

public Long increment(String key, long delta) {
ShardedJedis jedis = fetchJedis();
try {
return jedis.incrBy(key, delta);
} finally {
release(jedis);
}
}

public Double increment(String key, double delta) {
ShardedJedis jedis = fetchJedis();
try {
return jedis.incrByFloat(key, delta);
} finally {
release(jedis);
}
}

public Long append(String key, String value) {
ShardedJedis jedis = fetchJedis();
try {
return jedis.append(key, value);
} finally {
release(jedis);
}
}

public String get(String key, long start, long end) {
ShardedJedis jedis = fetchJedis();
try {
return jedis.getrange(key, start, end);
} finally {
release(jedis);
}
}

public Long size(String key) {
ShardedJedis jedis = fetchJedis();
try {
return jedis.strlen(key);
} finally {
release(jedis);
}
}

public Boolean setBit(String key, long offset, boolean value) {
ShardedJedis jedis = fetchJedis();
try {
return jedis.setbit(key, offset, value);
} finally {
release(jedis);
}
}

public Boolean getBit(String key, long offset) {
ShardedJedis jedis = fetchJedis();
try {
return jedis.getbit(key, offset);
} finally {
release(jedis);
}
}

public long addSet(String key, String... values) {
ShardedJedis jedis = fetchJedis();
try {
return jedis.sadd(key, values);
} finally {
release(jedis);
}
}

public Set<String> getSet(String key) {
ShardedJedis jedis = fetchJedis();
try {
return jedis.smembers(key);
} finally {
release(jedis);
}
}

public long lpush(String key, String... values) {
ShardedJedis jedis = fetchJedis();
try {
return jedis.lpush(key, values);
} finally {
release(jedis);
}
}

public String rpop(String key) {
ShardedJedis jedis = fetchJedis();
try {
return jedis.rpop(key);
} finally {
release(jedis);
}
}

public List<String> lrange(String key, long start, long end) {
ShardedJedis jedis = fetchJedis();
try {
return jedis.lrange(key, start, end);
} finally {
release(jedis);
}
}

public Long hset(String key, String field, String value) {
ShardedJedis jedis = fetchJedis();
try {
return jedis.hset(key, field, value);
} finally {
release(jedis);
}
}

public String hget(String key, String field) {
ShardedJedis jedis = fetchJedis();
try {
return jedis.hget(key, field);
} finally {
release(jedis);
}
}

public void setShardedJedisPool(ShardedJedisPool shardedJedisPool) {
this.shardedJedisPool = shardedJedisPool;
}

private ShardedJedis fetchJedis() {
return shardedJedisPool.getResource();
}

private void release(ShardedJedis jedis) {
if (jedis != null) {
jedis.close();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,4 @@ public interface RedisListService {
List<byte[]> lrange(String key, long begin, long end);

List<byte[]> lrange(String key);

long del(byte[] key);

long del(String key);
}
Original file line number Diff line number Diff line change
Expand Up @@ -54,19 +54,4 @@ public List<byte[]> lrange(String key) {
return this.lrange(key, 0, -1);
}

@Override
public long del(byte[] key) {
return redisTemplate.execute(new RedisCallback<Long>() {
@Override
public Long doInRedis(RedisConnection connection) throws DataAccessException {
return connection.del(key);
}
});
}

@Override
public long del(String key) {
return this.del(key.getBytes());
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,9 @@ public class Demo {
@Qualifier("shardedRedisClient")
private ShardedJedisPool shardedRedisClient;

@Autowired
private RedisTemplate redisTemplate;

@Test
public void testSingleton() {
Jedis jedis = singletonRedisClient.getResource();
Expand Down Expand Up @@ -95,4 +98,11 @@ public void testSharded() {
}
// ..
}

@Test
public void testTemplate() {
String key = "domain";
redisTemplate.set(key, "hongxi.org");
assert "hongxi.org".equals(redisTemplate.get(key));
}
}
4 changes: 4 additions & 0 deletions whatsmars-redis/src/test/resources/spring-redis.xml
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,10 @@
<property name="jedisPoolConfig" ref="commonJedisPoolConfig" />
</bean>

<bean id="redisTemplate" class="org.hongxi.whatsmars.redis.client.RedisTemplate">
<property name="shardedJedisPool" ref="shardedRedisClient" />
</bean>

<bean id="commonJedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxTotal" value="256" />
<property name="maxIdle" value="8" />
Expand Down

0 comments on commit 560e33a

Please sign in to comment.