1、jedis
在java中操作数据库redis
2、环境
首先要导入JAR:
jedis-2.9.0.jar
commons-pool2-2.4.2.jar
maven工程下pom.xml文件中配置:
<!-- redis jar包 -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
3、redis操作string
public class RedisTest {
// 日志
private transient static final Logger log = Logger.getLogger(RedisUtils.class);
// 连接
private Jedis jedis;
// 连接服务器(启动)
@Before
public void setUp(){
jedis = new Jedis("127.0.0.1",6379);
}
//########## redis 操作 string ###########//
@Test
public void string(){
//-----添加数据----------
jedis.set("name","Tom");
log.info(jedis.get("name"));
// 拼接
jedis.append("name", " is my lover");
log.info(jedis.get("name"));
//删除某个键
jedis.del("name");
log.info(jedis.get("name"));
//设置多个键值对(key,value,.....)
jedis.mset("name","liuling","age","20","qq","476X-XX777XXX");
//进行加1操作
jedis.incr("age");
log.info(jedis.get("name") + " & " + jedis.get("age") + " & " + jedis.get("qq"));
}
}
测试结果:
4、redis操作map
//########## redis 操作 map ###########//
@Test
public void map() {
//-----添加数据----------
Map<String, String> map = new HashMap<String, String>();
map.put("name", "sonny");
map.put("age", "22");
map.put("qq", "123-456XXXX");
// 存map
jedis.hmset("user",map);
// 获取所以的key的value
List<String> rsmap = jedis.hmget("user", "name", "age", "qq");
log.info(rsmap);
//删除map中的某个键值
jedis.hdel("user","age");
log.info(jedis.hmget("user", "age")); //因为删除了,所以返回的是null
log.info(jedis.hlen("user")); //返回key为user的键中存放的值的个数
log.info(jedis.exists("user"));//是否存在key为user的记录 返回true
log.info(jedis.hkeys("user"));//返回map对象中的所有key
log.info(jedis.hvals("user"));//返回map对象中的所有value
Iterator<String> iter=jedis.hkeys("user").iterator();
while (iter.hasNext()){
String key = iter.next();
log.info(key+":"+jedis.hmget("user",key));
}
}
测试结果:
5、redis操作list
//########## redis 操作 list ###########//
@Test
public void list(){
//开始前,先移除所有的内容
jedis.del("framework");
// 第一个是key,第二个是起始位置,第三个是结束位置,jedis.llen获取长度 -1表示取得所有
log.info(jedis.lrange("framework",0,-1));
// 左边添加
jedis.lpush("framework","spring");
jedis.lpush("framework","springMVC");
jedis.lpush("framework","mybatis");
log.info(jedis.lrange("framework",0,-1));
// 左边弹出
jedis.lpop("framework");
log.info(jedis.lrange("framework",0,-1));
// 右边添加
//jedis.del("framework");
jedis.rpush("framework","spring");
jedis.rpush("framework","springMVC");
jedis.rpush("framework","mybatis");
log.info(jedis.lrange("framework",0,-1));
// 右边弹出
jedis.rpop("framework");
log.info(jedis.lrange("framework",0,-1));
// 长度
log.info("长度:"+jedis.llen("framework"));
//获取列表key索引为index的值
log.info(jedis.lindex("framework", 1));
//注意,此处的rpush和lpush是List的操作。是一个双向链表(但从表现来看的)
jedis.del("a");
jedis.rpush("a", "1");
jedis.lpush("a","6");
jedis.lpush("a","3");
jedis.lpush("a","9");
// 输出
log.info(jedis.lrange("a",0,-1));
// 排序(原list不变)
log.info(jedis.sort("a"));
log.info(jedis.lrange("a",0,-1));
}
测试结果:
6、redis操作set
//########## redis 操作 set ###########//
@Test
public void set(){
//添加
jedis.sadd("people","曹操");
jedis.sadd("people","曹丕");
jedis.sadd("people","曹冲");
jedis.sadd("people","曹植");
jedis.sadd("people","曹昂");
// 输出所有值
log.info(jedis.smembers("people"));
//移除
jedis.srem("people","曹昂");
log.info(jedis.smembers("people"));
//判断 曹冲 是否是user集合的元素
log.info(jedis.sismember("people", "曹冲"));
// 随机获取值
log.info(jedis.srandmember("people"));
//返回集合的元素个数
log.info(jedis.scard("people"));
}
测试结果:
7、redis操作sorted set
//########## redis 操作 sorted set ###########//
@Test
public void sortSet(){
HashMap<String, Double> map = new HashMap<String, Double>();
map.put("Tom", 67.9);
map.put("jack", 77.5);
map.put("mary", 69.6);
map.put("sunny", 56.5);
map.put("daliy", 78.4);
map.put("ristom", 91.8);
// 添加
jedis.zadd("studentScore", map);
// 获取所有的元素
log.info(jedis.zrange("studentScore", 0, -1));
// 查询key下的某一个元素的score
log.info("元素为mary的成绩:"+jedis.zscore("studentScore", "mary"));
log.info("----- 小到大输出 -----");
// 获取所有的,并且带有scores(默认:小到大输出)
Set<Tuple> scores = jedis.zrangeWithScores("studentScore", 0, -1);
// 遍历输出 元素+score
Iterator<Tuple> iterator = scores.iterator();
while (iterator.hasNext()) {
Tuple tuple = iterator.next();
// 元素 + score
log.info(tuple.getElement()+" : "+tuple.getScore());
}
log.info("----- 大到小输出 -----");
// 获取所有的,并且带有scores(默认:大到小输出)
Set<Tuple> scores2 = jedis.zrevrangeWithScores("studentScore", 0, -1);
Iterator<Tuple> iterator2 = scores2.iterator();
while (iterator2.hasNext()) {
Tuple tuple = iterator2.next();
// 元素 + score
log.info(tuple.getElement()+" : "+tuple.getScore());
}
// 获取 key 中元素个数
log.info("key 中元素个数: "+jedis.zcard("studentScore"));
// 删除key中的元素ristom
jedis.zrem("studentScore", "ristom");
log.info(jedis.zrange("studentScore", 0, -1));
log.info("删除key中ristom元素后的个数: "+jedis.zcard("studentScore"));
}
测试结果:
8、使用JedisPool连接池
8.1、工具类
RedisPoolUtil.java
package Java.Redis;
import org.apache.log4j.Logger;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
public class RedisPoolUtil {
//Redis服务器IP
private static String HOST = "127.0.0.1";
//Redis的端口号
private static int PORT = 6379;
//可用连接实例的最大数目,默认值为8;
//如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。
private static int MAX_ACTIVE = 1024;
//控制一个pool最多有多少个状态为idle(空闲的)的jedis实例,默认值也是8。
private static int MAX_IDLE = 200;
//等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException;
private static long MAX_WAIT = 10000;
private static int TIMEOUT = 10000;
//在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;
private static boolean TEST_ON_BORROW = true;
// reids连接池
private static JedisPool jedisPool = null;
// 日志
private transient static final Logger log = Logger.getLogger(RedisPoolUtil.class);
/**
* 初始化Redis连接池
*/
static {
try {
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxIdle(MAX_IDLE);
config.setMaxTotal(MAX_ACTIVE);
config.setMaxWaitMillis(MAX_WAIT);
config.setTestOnBorrow(TEST_ON_BORROW);
jedisPool = new JedisPool(config, HOST, PORT, TIMEOUT);
log.info("从连接池中获取jedis成功 !!");
} catch (Exception e) {
e.printStackTrace();
log.error("从连接池中获取jedis失败 !!");
}
}
/**
* 获取Jedis实例
* @return
*/
public synchronized static Jedis getJedis() {
try {
if (jedisPool != null) {
Jedis resource = jedisPool.getResource();
return resource;
} else {
return null;
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
8.2、测试
@Test
public void redisPoolTest(){
Jedis jedis = RedisPoolUtil.getJedis();
log.info("redis-ping: "+jedis.ping());
// 输出 redis中的所有key
log.info(jedis.keys("*"));
}
测试结果: