java使用redis入门学习--Jedis

人总要进步!最近的项目中,因为是电商类的网站,图片比较多,考虑到网站性能问题,所以尝试用redis做缓存,当然,redis很多高大上的功能都还没能及时到应用到项目中来,只是初步的使用了redis做页面缓存,减少数据库的压力。项目代码不能贴,下面贴上自己刚学习redis时敲的学习代码,可能不是很全面,仅供入门参考和自己以后回顾。

安装redis服务过程略过,网上很多,也很简单。相关jar包:jedis-2.7.2.jar   commons-pool2-2.4.2.jar

import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.Transaction;
import sun.tools.jar.resources.jar;

/**
 * redis Demo
 * @author 李小拐
 * 2016年6月11日16:17:58
 */
public class RedisUtil {
	
	private static JedisPool pool=null;//声明jedis池
	
	private static JedisPool getPool(){
		if(pool==null){
			JedisPoolConfig config=new JedisPoolConfig();
			//可用连接实例的最大数目,默认值为8,旧版本是maxActive,如果赋值为-1,则表示不限制
			config.setMaxTotal(500);
			//设置允许池中最大的空连接数
			config.setMaxIdle(20);
			//设置最大等待时间
			config.setMaxWaitMillis(1000*60);
			//引入一个jedis的实例时,是否提前进行validate操作,true表示得到的实例均可用
			config.setTestOnBorrow(true);
			
			pool=new JedisPool(config, "127.0.0.1",6379);
		}
		return pool;
	}
	/**
	 * 回收jedis
	 * @param pool
	 * @param jedis
	 */
	private static void returnJedisPool(JedisPool pool,Jedis jedis) {
		pool.returnResourceObject(jedis);
	}
	
	/**
	 * jedis对字符串的基本操作
	 */
	public static void Jedis_String(){
		System.out.println("------------------------------------------string");
		JedisPool pool=getPool();
		Jedis jedis=pool.getResource();
		try{
		//jedis中存入一个值
		jedis.set("name", "李小拐");
		System.out.println(jedis.get("name"));//result:李小拐
		//在原来基础后面追加一个值
		jedis.append("name", "--追加到后面");
		System.out.println(jedis.get("name"));//result:李小拐--追加到后面
		//jedis覆盖原来的值
		jedis.set("name", "易小乖");
		System.out.println(jedis.get("name"));//result:易小乖
		//删除key
		jedis.del("name");
		System.out.println(jedis.get("name"));//result:null
		//设置多个key值,相当于jedis.set("name", "李小拐");  jedis.set("sex", "男");
		//当然也能同时删除/获取多个key
		jedis.mset("name","李小拐","sex","男");
		//jedis.mget结果是list<String>类型
		System.out.println(jedis.mget("name"));//result:[李小拐]
		System.out.println(jedis.mget("name","sex"));//result:[李小拐, 男]
		//setnx:当key存在时和不存在时-------这能防止新增覆盖原值
		jedis.setnx("name", "李二拐");
		jedis.setnx("nameA", "李三拐");
		System.out.println("---"+jedis.mget("name","nameA"));//result:[李小拐, 李三拐]
		//setex:设置值的同时设置过期时间
		jedis.setex("nameB", 3, "李四拐");
		System.out.println(jedis.get("nameB"));//result:李四拐
		Thread.sleep(1000*3);//等待3s
		System.out.println(jedis.get("nameB"));//result:null
		//获取原值同时更新新值
		System.out.println(jedis.getSet("nameA", "李new拐"));//result:李三拐
		System.out.println(jedis.get("nameA"));//result:李new拐
		//截取字符串
		System.out.println(jedis.getrange("nameA", 3, 5));//result:new
		}catch (Exception e) {
		}finally{
			//回收jedis
			//getPool().returnResource(jedis);//过时
			//getPool().returnResourceObject(jedis);
			returnJedisPool(pool, jedis);
		}
	}
	
	/**
	 * jedis操作Hash
	 */
	public static void Jedis_Hash(){
		System.out.println("------------------------------------------Hash");
		Jedis jedis=getPool().getResource();
		Map<String, String> map=new HashMap<String, String>();
		map.put("name", "李小拐");
		map.put("sex", "男");
		map.put("age", "25");
		//存入map数据
		jedis.hmset("user", map);
		jedis.hset("user", "hset", "hsetvalue");
		//结果是List<String>类型,第一个是jedis的key,后面可以跟多个map的key
		List<String> list=jedis.hmget("user","name","sex");
		System.out.println(list);//result:[李小拐,男]
		//删除map中某个key
		jedis.hdel("user", "sex");
		System.out.println(jedis.hmget("user", "sex"));//删除了,返回null
		//返回key为user的值的长度
		System.out.println(jedis.hlen("user"));//result:2
		//返回user对象中所有的key,,,类型Set<String>
		System.out.println(jedis.hkeys("user"));//result:[age, name]
		//返回user对象中所有的value,,,类型List<String>
		System.out.println(jedis.hvals("user"));//result:[李小拐, 25]
		//遍历map所有的key并取值
		Iterator<String> iterator=jedis.hkeys("user").iterator();
		while (iterator.hasNext()) {
			String key=iterator.next();
			System.out.println(key+":"+jedis.hget("user", key));
		}
	}
	
	/**
	 * jedis操作List
	 */
	public static void Jedis_List(){
		System.out.println("------------------------------------------LIST");
		Jedis jedis=getPool().getResource();
		//List集合可以无限添加重复值,所以这里添加之前,先把其清空,方便看效果
		jedis.del("users");
		jedis.del("users2");
		//----------------------------------lpush:后进先出(添加在list的头部)
		jedis.lpush("users", "李小拐");
		jedis.lpush("users", "李中拐");
		jedis.lpush("users", "李大拐");
		//第一个key,第二个起始位置,第三个是结束位置,-1表示取,,,结果类型List<String>
		System.out.println(jedis.lrange("users", 0, -1));//result:[李大拐, 李中拐, 李小拐]
		//覆盖位置1的元素值
		jedis.lset("users", 1, "李新拐");
		System.out.println(jedis.lrange("users", 0, -1));//result:[李大拐, 李新拐, 李小拐]
		//对列表进行裁剪,key,开始位置,结束位置,因为是lpush后进先出,所以直接干掉了李大拐
		jedis.ltrim("users", 1, 2);
		System.out.println(jedis.lrange("users", 0, -1));//result:[李新拐, 李小拐]
		//获取列表长度
		System.out.println(jedis.llen("users"));//result:3
		//----------------------------------rpush:先进先出(添加在list的尾部)
		jedis.rpush("users2", "李小拐");
		jedis.rpush("users2", "李中拐");
		jedis.rpush("users2", "李大拐");
		System.out.println(jedis.lrange("users2", 0, -1));//result:[李小拐, 李中拐, 李大拐]
		//对列表进行裁剪,只保留区间内的数,因为是rpush先进先出,所以直接干掉了李小拐
		jedis.ltrim("users2", 1, 2);
		System.out.println(jedis.lrange("users2", 0, -1));//result:[李中拐, 李大拐]
		//List<String>类型来接受结果
		List<String> list=jedis.lrange("users2", 0, -1);
		for(int i=0;i<list.size();i++){
			System.out.println("user2:::"+list.get(i));
		}
		
		//移除并返回列表的第一个元素。
		System.out.println(jedis.lpop("users2"));//result:李中拐
		//移除并返回列表的最后一个元素。
		//System.out.println(jedis.rpop("users2"));
		System.out.println(jedis.lrange("users2", 0, -1));//result:[李大拐]
		//获取指定下标的元素值
		System.out.println(jedis.lindex("users2", 0));//result:李大拐
	}
	
	
	/**
	 * jedis操作Set
	 * sadd---无序集合
	 * zadd---有序集合
	 */
	public static void Jedis_Set(){
		System.out.println("------------------------------------------SET(sadd)");
		Jedis jedis=getPool().getResource();
		//添加
		jedis.sadd("sname", "李小拐");//可以试试这里sname换成前面用过的name,看看会不会冲突
		jedis.sadd("sname", "李中拐");
		jedis.sadd("sname", "李大拐","李二拐");//可以一次添加多个
		jedis.sadd("sname", "要删除的");
		jedis.sadd("sname", "要删除的");//插入重复的会被忽略
		//遍历集合,从结果可以看出是无序的
		System.out.println(jedis.smembers("sname"));//result:[李小拐, 李中拐, 李二拐, 要删除的, 李大拐]
		Set<String> set=jedis.smembers("sname");
		for (String val : set) {
			
			System.out.print("====="+val);
		}
		//移除集合里某个元素
		jedis.srem("sname", "要删除的");
		//获取所有成员
		System.out.println("\r"+jedis.smembers("sname"));//result:[李小拐, 李中拐, 李大拐]
		//判断李小拐是不是sname的元素,判断是否存在
		System.out.println(jedis.sismember("sname", "李小拐"));//result:true
		//srandmember返回集合中的一个随机元素。 该操作和SPOP相似,但SPOP将随机元素从集合中移除并返回,而SRANDMEMBER则仅仅返回随机元素
		 System.out.println(jedis.srandmember("sname"));//result:
		 //随机返回集合中的某个元素,并从集合中移除移除
		 System.out.println(jedis.spop("sname"));//result:
		//获取所有成员
		 System.out.println(jedis.smembers("sname"));
		//获取成员数量(长度)
		 System.out.println(jedis.scard("sname"));//result:3
		 
		 System.out.println("此刻sname的集合::"+jedis.smembers("sname"));//[李小拐, 李中拐, 李二拐]
		 //此处新增一个sname2的集合
		 jedis.sadd("sname2", "李小拐", "易小乖");
		 
		 
		 //取两个集合的并集(全部)
		 Set<String> set1=jedis.sunion("sname2","sname");
		 System.out.println(set1);//[李小拐, 李中拐, 李二拐, 易小乖]
		 
		 
		//取两个集合的差集(前一个独有的)
		 Set<String> set2=jedis.sdiff("sname","sname2");
		 System.out.println(set2);//[李二拐, 李中拐]
		 //取两个集合的差集,调换了前后位置,结果也就变了
		 Set<String> set3=jedis.sdiff("sname2","sname");
		 System.out.println(set3);//[易小乖, 李小拐]
		 
		 
		//取两个集合的交集(共有的)
		 Set<String> set4=jedis.sinter("sname","sname2");
		 System.out.println(set4);
		 
		 System.out.println("------------------------------------------SET(zadd)");
		 jedis.zadd("zname", 3, "李小拐1");
		 jedis.zadd("zname", 4, "李小拐2");
		 jedis.zadd("zname", 1, "李小拐3");
		 jedis.zadd("zname", 2, "李小拐4");
		 //按权重排序
		 System.out.println(jedis.zrange("zname", 0, -1));//[李小拐3, 李小拐4, 李小拐1, 李小拐2]
		 //移除 ---zrem
		 //总数----zcard
		 //位于某个权重范围内的元素个数
		 System.out.println(jedis.zcount("zname", 2, 4));//3
		 
	}
	
	/**
	 * 其他一些基础操作
	 */
	public static void Jedis_Other(){
		Jedis jedis=getPool().getResource();
		//对key进行模糊查询,这里是查出全部的key
		Set<String> keys = jedis.keys("*");
		System.out.println(keys);
		
		//对key进行模糊查询,这里是查出已s开头的key全部的key
		Set<String> keys2 = jedis.keys("s*");
		System.out.println(keys2);
		
		//删除某个key
		//jedis.del("sex");
		
		//判断某个key是否存在
		System.out.println(jedis.exists("name"));
		
		//设置key的失效时间,单位:秒
		jedis.expire("name", 10);//10s过期
		
		//获取key的存活时间(及剩余的有效时间)
		System.out.println(jedis.ttl("name"));
		
		//去掉key的失效时间expire,即理论上永存
		jedis.persist("name");
		
		//int类型采用String存储
		jedis.set("amount", 100 + "");
		long val;
		//自增
		val=jedis.incr("amount");
		System.out.println(val);
		//自减
		val=jedis.decr("amount");
		System.out.println(val);
		//做加法
		val=jedis.incrBy("amount", 5);
		System.out.println(val);
		//做减法
		val=jedis.decrBy("amount", 5);
		System.out.println(val);
		//可以用非int类型的的做下加减试试
		
		
		
		//jedis对事物的支持
		Transaction tx=jedis.multi();
		//模拟批量操作,事物hejedis操作方式一样
		for (int i = 0; i < 5; i++) {
			tx.set("key"+i, "value"+i);
		}
		//执行事物,返回每一个结果
		List<Object> list=tx.exec();
		for (int i = 0; i < list.size(); i++) {
			System.out.println(list.get(i)+"--------");
		}
		
		
		//清空当前DB
		jedis.flushDB();
		//清空全部DB....两个有什么区别呢??
		jedis.flushAll();
	}
	
}

动手才能真正的感受到代码的魅力,上面就是本人学习敲的redis demo,非常基础,希望下一位学习的朋友,也自己敲一次。

最后一句:多有不足之处,请大神们勿喷!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值