java操作Redis
原来mysql需要使用jdbc,现在需要redis的一个java客户端jedis。
jedis是客户端,而reids是服务器。使用jedis这个java客户端操作redis数据库。
1.导包
2.操作方式
①普通方法
@Test
public void setTest() throws Exception{
Jedis jedis=new Jedis("127.0.0.1");//获取连接
jedis.set("name","lisi");//添加数据
jedis.close();//关闭连接
}
@Test
public void getTest(){
Jedis jedis=new Jedis("127.0.0.1");
System.out.println(jedis.get("name"));//获取数据
jedis.close();
}
② 连接池
@Test
public void testName(){
JedisPoolConfig poolConfig=new JedisPoolConfig();
poolConfig.setMaxIdle(2);//最小连接(空闲最大连接)
poolConfig.setMaxTotal(10);//最大连接数
poolConfig.setMaxWaitMillis(2*1000);//最大等待时间
poolConfig.setTestOnBorrow(true);//获取连接时测试连接是否畅通
JedisPool jedisPool = new JedisPool(poolConfig,"127.0.0.1",6379,2*1000,"123456");
Jedis jedis=jedisPool.getResource();
jedis.set("age","16");
System.out.println(jedis.get("age"));
jedis.close();
}
3.抽取工具类
public enum PoolConfigUtil {
INSTANCE;
private static JedisPool pool = null;
static {
JedisPoolConfig poolConfig=new JedisPoolConfig();
poolConfig.setMaxIdle(2);//最小连接(空闲最大连接)
poolConfig.setMaxTotal(10);//最大连接数
poolConfig.setMaxWaitMillis(2*1000);//最大等待时间
poolConfig.setTestOnBorrow(true);//获取连接时测试连接是否畅通
pool=new JedisPool(poolConfig,"127.0.0.1",6379,2*1000,"123456");
}
public Jedis getJedis(){
return pool.getResource();
}
public void closeJdeisPool(Jedis jedis){
if(jedis!=null){
jedis.close();
}
}
}
4.对key值得操作
/**
* Key的操作
* @throws Exception
*/
@Test
public void testName3() throws Exception{
Jedis jedis = PoolConfigUtil.INSTANCE.getJedis();
System.out.println(jedis.exists("sex"));//判断key是否存在 false
Set<String> keys = jedis.keys("*");
System.out.println(keys);//获取所有keys [name, age]
jedis.del("age");//删除指定key
Set<String> keys2 = jedis.keys("*");
System.out.println(keys2);//获取所有keys [name]
jedis.expire("name",10);//设置key的生存时间
}
5.对String的操作
/**
* String的操作
*/
@Test
public void testName4(){
Jedis jedis = PoolConfigUtil.INSTANCE.getJedis();
jedis.set("name","啦啦啦");
System.out.println(jedis.get("name"));//啦啦啦
jedis.append("name","呵呵呵");//追加字段
System.out.println(jedis.get("name"));//啦啦啦呵呵呵
jedis.del("name");
System.out.println(jedis.get("name"));//null
}
6.对list的操作
/**
* List操作
*/
@Test
public void testName5(){
Jedis jedis = PoolConfigUtil.INSTANCE.getJedis();
jedis.lpush("list1","李四","张三","王五");//添加list集合并赋值
/**
* 获取集合中所有值
* start:开始出下标
* end:结尾处下标
*/
List<String> list1 = jedis.lrange("list1", 0, -1);
System.out.println(list1);//[王五, 张三, 李四]
/**
* 删除指定值
* count>0:从上到下依次删除count个
* count<0:从下到上依次删除count个
* count00:从下到上依次删除所有
*/
jedis.lrem("list1",0,"李四");//删除指定值 count>0:从上到下依次删除count个
List<String> list2 = jedis.lrange("list1", 0, -1);
System.out.println(list2);//[王五, 张三]
jedis.lpush("list2","1","3","2","6");
List<String> list3 = jedis.sort("list2");
System.out.println(list3);
}
7.对set的操作
/**
* set操作
*/
@Test
public void testName6(){
Jedis jedis = PoolConfigUtil.INSTANCE.getJedis();
jedis.sadd("set1","王五","赵柳","孙琦");//添加
Set<String> set1 = jedis.smembers("set1");
System.out.println(set1);
jedis.sadd("set2","李四","王五","赵柳1","孙琦1");//添加
Set<String> set2 = jedis.smembers("set2");
System.out.println(set2);
jedis.srem("set1","王五");//删除
Set<String> set3 = jedis.smembers("set1");
System.out.println(set3);
Set<String> sinter = jedis.sinter("set1", "set2");//两个set集合中共有的
System.out.println(sinter);
}
8.对hash的操作
/**
* hash操作
*/
@Test
public void testName7(){
Jedis jedis = PoolConfigUtil.INSTANCE.getJedis();
jedis.hset("map1","name","李四");//设置或修改
jedis.hset("map1","sex","男");//设置或修改
System.out.println(jedis.hget("map1","name"));//获取
jedis.hincrBy("map1","age",2);//自增
System.out.println(jedis.hget("map1","age"));
Set<String> map1 = jedis.hkeys("map1");//获取所有key值
System.out.println(map1);//[name, age, sex]
List<String> map11 = jedis.hvals("map1");//获取所有value值
System.out.println(map11);//[name, age, sex]
Map<String, String> map12 = jedis.hgetAll("map1");//获取所有值
System.out.println(map12);
jedis.hdel("map1","sex");//删除
}
9.数组字母排序
/**
* 数字字母排序
* @throws Exception
*/
@Test
public void testJedisList() throws Exception{
Jedis jedis = PoolConfigUtil.INSTANCE.getJedis();
//清空当前数据库
jedis.flushDB();
jedis.lpush("nums","12","14","6","9","10","13");
System.out.println("nums原始的位置:"+jedis.lrange("nums",0,-1));
System.out.println("nums排序之后的值 升序:"+jedis.sort("nums"));
SortingParams sortingParams = new SortingParams();
sortingParams.desc();
System.out.println("nums排序之后的值:"+jedis.sort("nums",sortingParams));
jedis.lpush("letters","a","d","f","c","k","e");
SortingParams sortingParams1 = new SortingParams();
sortingParams1.alpha();
System.out.println("字母排序:"+jedis.sort("letters",sortingParams1));
PoolConfigUtil.INSTANCE.closeJdeisPool(jedis);
}
持久化
1.Redis 提供了两种不同级别的持久化方式:RDB和AOF,可以通过修改redis.conf来进行配置.
2.RDB模式
RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照,默认开启该模式.
如何关闭 rdb 模式:
# save ""
#save 900 1 //至少在900秒的时间段内至少有一次改变存储同步一次
# save xxx
# save 60 10000
3.AOF追加模式
AOF 持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集,默认关闭该模式。
如何开启aof模式:
appendonly yes //yes 开启,no 关闭
appendfsync always //每次有新命令时就执行一次fsync
这里我们启用 everysec appendfsync everysec //每秒 fsync 一次
appendfsync no //从不fsync(交给操作系统来处理,可能很久才执行一次fsync)