redis学习笔记七(实例代码)

1.创建redisPool池

public class JedisPoolUtil 

{
private static volatile JedisPool jedisPool = null;
private JedisPoolUtil(){}
private static JedisPool getJedisPoolInstance()
{
if(null == jedisPool)
{
synchronized (JedisPoolUtil.class)
{
if(null == jedisPool)
{
JedisPoolConfig config = new JedisPoolConfig();
//配置最大jedis实例数
        config.setMaxTotal(100);
       //配置资源池最大闲置数
       config.setMaxIdle(32);
        //等待可用连接的最大时间
       config.setMaxWaitMillis(10000);
       //在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的
        config.setTestOnBorrow(true);
jedisPool = new JedisPool(config,"127.0.0.1",6379);
}
}
}
return jedisPool;
}
 public static Jedis getJedis(){
       if(jedisPool == null)
        getJedisPoolInstance();
            Jedis resource = jedisPool.getResource();
            return resource;
   }

/* 自Jedis3.0版本后jedisPool.returnResource()遭弃用,官方重写了Jedis的close方法用以代替;
官方建议应用redis.clients.jedis#Jedis的close方法进行资源回收*/
@SuppressWarnings("deprecation")
public static void release(JedisPool jedisPool,Jedis jedis)
{
if(null != jedis)
{
jedisPool.returnResourceObject(jedis);
}
}

}


2.主从备份(一般不会再代码中设置,都是在redis启动配置时已经配置好,程序只需要写数据和读数据)

public class TestMS {
public static void main(String[] args) {
Jedis jedis_M = new Jedis("127.0.0.1",6379);
Jedis jedis_S = new Jedis("127.0.0.1",6380);
jedis_S.slaveof("127.0.0.1",6379);
jedis_M.set("class","1122V2");
String result = jedis_S.get("class");
System.out.println(result);
}
}


3.模拟redis事务过程

public class TestTX {
public boolean transMethod() throws InterruptedException {
    Jedis jedis = new Jedis("127.0.0.1", 6379);
    int balance;// 可用余额
    int debt;// 欠额
    int amtToSubtract = 10;// 实刷额度


    jedis.watch("balance");
    //jedis.set("balance","5");//此句不该出现,讲课方便。模拟其他程序已经修改了该条目
    Thread.sleep(7000);
    balance = Integer.parseInt(jedis.get("balance"));
    if (balance < amtToSubtract) {
      jedis.unwatch();
      System.out.println("modify");
      return false;
    } else {
      System.out.println("***********transaction");
      Transaction transaction = jedis.multi();
      transaction.decrBy("balance", amtToSubtract);
      transaction.incrBy("debt", amtToSubtract);
      transaction.exec();
      balance = Integer.parseInt(jedis.get("balance"));
      debt = Integer.parseInt(jedis.get("debt"));
      System.out.println("*******" + balance);
      System.out.println("*******" + debt);
      return true;
    }
 }


 /**
  * 通俗点讲,watch命令就是标记一个键,如果标记了一个键, 
  * 在提交事务前如果该键被别人修改过,那事务就会失败,这种情况通常可以在程序中
  * 重新再尝试一次。
  * 首先标记了键balance,然后检查余额是否足够,不足就取消标记,并不做扣减; 
  * 足够的话,就启动事务进行更新操作,
  * 如果在此期间键balance被其它人修改, 那在提交事务(执行exec)时就会报错, 
  * 程序中通常可以捕获这类错误再重新执行一次,直到成功。
* @throws InterruptedException 
  */
 public static void main(String[] args) throws InterruptedException {
    TestTX test = new TestTX();
    boolean retValue = test.transMethod();
    System.out.println("main retValue-------: " + retValue);
 }
}


扫描二维码关注公众号,回复: 2827364 查看本文章

4.字符串api

 public static void testString() {
       //-----添加数据---------- 
Jedis jedis=new Jedis("192.168.43.100",6379);
jedis.auth("123");
       jedis.flushDB();
       jedis.set("name","annie");//向key-->name中放入了value-->  
       System.out.println(jedis.get("name"));       //执行结果:xinxin          
       jedis.setnx("name", "bill");                //存在时不写入
       System.out.println(jedis.get("name"));
       jedis.append("name", " is my a girl"); //value的拼接
       System.out.println(jedis.get("name"));        
       jedis.del("name");                      //删除某个键
       System.out.println(jedis.get("name"));
        //设置过期时间,单位秒       
       jedis.setex("sql",2, "mysql");
       System.out.println(jedis.get("sql"));
       try {
        Thread.sleep(3000);
       }catch(InterruptedException e) {
        e.printStackTrace();
       }
       System.out.println(jedis.get("sql"));        
       //设置多个键值对
       jedis.mset("name","annie","age","22","tel","1517252**");
       jedis.incr("age"); //进行加1操作
       //mget返回list集合
       System.out.println(jedis.mget("name","age","tel"));
  }


5.列表操作API

 public void testList(){
Jedis jedis=new Jedis("192.168.43.100",6379);
jedis.auth("123");
       //先移除所有的内容  
       jedis.del("framework");  
       System.out.println(jedis.lrange("framework",0,-1));  
       //从framework头部存放三条数据  
       jedis.lpush("framework","spring");  
       jedis.lpush("framework","struts");  
       jedis.lpush("framework","hibernate");  
       //第一个是key,第二个是起始位置,第三个是结束位置,-1表示取得所有  
       System.out.println(jedis.lrange("framework",0,-1));  
       System.out.println(jedis.lrange("framework",0,2));   //包含2下标
       //jedis.llen("framework");                                //获取列表长度
       jedis.del("framework");        
       //从framework尾部存放三条数据
       jedis.rpush("framework","spring");  
       jedis.rpush("framework","struts");  
       jedis.rpush("framework","hibernate"); 
       System.out.println(jedis.lrange("framework",0,-1));
        
       jedis.del("sql");
       jedis.lpush("sql", "hello");
       jedis.lpush("sql", "there");
       jedis.lpush("sql", "world");
       jedis.linsert("sql", LIST_POSITION.AFTER, "there", "111");
       System.out.println(jedis.lrange("sql", 0, -1));
       //获取列表长度
       System.out.println(jedis.llen("sql"));
       //修改某下标的值
       jedis.lset("sql", 0, "oracle");
       //获取下标为某list下标为0的值
       System.out.println(jedis.lindex("sql", 0));
       //删除数据
       System.out.println(jedis.lrem("sql", 1,"mongodb"));
       System.out.println(jedis.lindex("sql", 1));
       jedis.rpush("sql", "s");
       //删除区间以外的
       System.out.println(jedis.ltrim("sql", 0, 1));
       System.out.println(jedis.rpush("sql", "mongodb"));
       //判断是否存在,存在则弹栈
       System.out.println(jedis.rpushx("sql", "mongodb"));
       //弹出尾元素
       jedis.rpop("sql");
       //弹出头元素
       jedis.lpop("sql");
       //尾部进栈
       jedis.rpush("sql", "mysql");
       //头部进栈
       jedis.lpush("sql", "linput");        
   } 


6.set操作

public void testSet() {
Jedis jedis = new Jedis("192.168.43.100", 6379);
jedis.auth("123");
jedis.sadd("sql", "mysql");
jedis.sadd("sql", "redis");
jedis.sadd("sql", "mongodb");
jedis.sadd("sql", "oracle");
Set<String> sql = jedis.smembers("sql");
System.out.println(sql);
// 移除指定元素
jedis.srem("sql", "redis");
// 输出全部set的值
Set<String> sqls = jedis.smembers("sql");
System.out.println(sqls);
// 判断set是否存在
System.out.println(jedis.sismember("sql", "mysql"));
// 返回集合元素总数
System.out.println(jedis.scard("sql"));
jedis.sadd("sql2", "mysql");
jedis.sadd("sql2", "redis");
jedis.sadd("sql2", "sql");
// 交集
System.out.println(jedis.sinter("sql", "sql2"));
// 并集
System.out.println(jedis.sunion("sql", "sql2"));
// 差集
System.out.println(jedis.sdiff("sql2", "sql"));
// 差集
System.out.println(jedis.sdiff("sql", "sql2"));
}


7.zsort操作

public void testSortedSet() {
Jedis jedis = new Jedis("192.168.43.100", 6379);
jedis.auth("123");
jedis.flushDB();
jedis.zadd("sql", 22, "redis");
jedis.zadd("sql", 23, "mysql");
jedis.zadd("sql", 2, "mongodb");
jedis.zadd("sql", 1, "oracle");
// 从小到大
System.out.println(jedis.zrange("sql", 0, -1));
// 从大到小
System.out.println(jedis.zrevrange("sql", 0, -1));
// 统计所有的个数
System.out.println(jedis.zcard("sql"));
// 查询元素的下标
System.out.println(jedis.zscore("sql", "11"));
// 统计10-30下标的元素个数
System.out.println(jedis.zcount("sql", 10, 30));
}


8.hashmap操作

public void testMap() {
Jedis jedis = new Jedis("192.168.43.100", 6379);
jedis.auth("123");
jedis.flushDB();
Map<String, String> user = new HashMap<String, String>();
user.put("name", "小明");
user.put("age", "10");
user.put("gender", "man");
user.put("like", "basketball");
jedis.hmset("user", user);
// 获取key为name的元素
System.out.println(jedis.hmget("user", "name"));
// 统计元素个数
System.out.println(jedis.hlen("user"));
// 是否存在
System.out.println(jedis.exists("user"));
// 获取所有的key
System.out.println(jedis.hkeys("user"));
// 获取所有的value
System.out.println(jedis.hvals("user"));
for (Map.Entry<String, String> user1 : user.entrySet()) {
System.out.println(user1.getKey() + ":" + user1.getValue());
}
// 获取map中符合key的值
System.out.println(jedis.hmget("user", "name", "age", "gender"));
// 删除指定的key
System.out.println(jedis.hdel("user", "name"));
// 判断指定的key是否存在
System.out.println(jedis.hexists("user", "name"));
// 某值增加如果不存在创建一个新的key-value
System.out.println(jedis.hincrBy("user", "key", 123456));
System.out.println(jedis.hincrBy("user", "key", 22));
// 如果map的key存在不更新value并返回0
System.out.println(jedis.hsetnx("user", "name", "123"));


// 另一种遍历方式
Iterator<String> iter = jedis.hkeys("user").iterator();
while (iter.hasNext()) {
String key = iter.next();
System.out.println(key + ":" + jedis.hmget("user", key));
}
}
}

9.其他测试

public static void testOther() throws InterruptedException {  
        Jedis jedis = RedisUtil.getJedis();  
  
        try {  
            // keys中传入的可以用通配符  
            System.out.println(jedis.keys("*")); // 返回当前库中所有的key [sose, sanme,  
                                                    // name, jarorwar, foo,  
                                                    // sname, java framework,  
                                                    // user, braand]  
            System.out.println(jedis.keys("*name"));// 返回的sname [sname, name]  
            System.out.println(jedis.del("sanmdde"));// 删除key为sanmdde的对象 删除成功返回1  
                                                        // 删除失败(或者不存在)返回 0  
            System.out.println(jedis.ttl("sname"));// 返回给定key的有效时间,如果是-1则表示永远有效  
            jedis.setex("timekey", 10, "min");// 通过此方法,可以指定key的存活(有效时间) 时间为秒  
            Thread.sleep(5000);// 睡眠5秒后,剩余时间将为<=5  
            System.out.println(jedis.ttl("timekey")); // 输出结果为5  
            jedis.setex("timekey", 1, "min"); // 设为1后,下面再看剩余时间就是1了  
            System.out.println(jedis.ttl("timekey")); // 输出结果为1  
            System.out.println(jedis.exists("key"));// 检查key是否存在  
            System.out.println(jedis.rename("timekey", "time"));  
            System.out.println(jedis.get("timekey"));// 因为移除,返回为null  
            System.out.println(jedis.get("time")); // 因为将timekey 重命名为time  
                                                    // 所以可以取得值 min  
            // jedis 排序  
            // 注意,此处的rpush和lpush是List的操作。是一个双向链表(但从表现来看的)  
            jedis.del("a");// 先清除数据,再加入数据进行测试  
            jedis.rpush("a", "1");  
            jedis.lpush("a", "6");  
            jedis.lpush("a", "3");  
            jedis.lpush("a", "9");  
            System.out.println(jedis.lrange("a", 0, -1));// [9, 3, 6, 1]  
            System.out.println(jedis.sort("a")); // [1, 3, 6, 9] //输入排序后结果  
            System.out.println(jedis.lrange("a", 0, -1));  
        } catch (Exception e) {  
            e.printStackTrace();  
        } finally {  
            RedisUtil.getPool().returnResource(jedis);  
        }  
  
    }  

猜你喜欢

转载自blog.csdn.net/yuliantao/article/details/78751092