Redis
redis是一款开源的Key-Value数据库,运行在内存中,由ANSI C编写。企业开发通常采用Redis来实现缓存。同类的产品还有memcache 、memcached 、MongoDB等。
Jedis
Jedis是Redis官方推出的一款面向Java的客户端,提供了很多接口供Java语言调用。可以在Redis官网下载,当然还有一些开源爱好者提供的客户端,如Jredis、SRP等等,推荐使用Jedis。
Spring Data Redis
Spring-data-redis是spring大家族的一部分,提供了在srping应用中通过简单的配置访问redis服务,对reids底层开发包(Jedis, JRedis, and RJC)进行了高度封装,RedisTemplate提供了redis各种操作、异常处理及序列化,支持发布订阅,并对spring 3.1 cache进行了实现。
spring-data-redis针对jedis提供了如下功能:
1.连接池自动管理,提供了一个高度封装的“RedisTemplate”类
2.针对jedis客户端中大量api进行了归类封装,将同一类型操作封装为operation接口
ValueOperations:简单K-V操作
SetOperations:set类型数据操作
ZSetOperations:zset类型数据操作
HashOperations:针对map类型的数据操作
ListOperations:针对list类型的数据操作
Jedis使用
Jedis jedis = getJedis();
//�����ַ�
jedis.set("name", "lisi");
jedis.get("name");
jedis.del("name");
jedis.incr("num1");//key不存在,初始值为0,结果为1
jedis.decr("num1");//key不存在,初始值为0,结果为-1
jedis.incrBy("num", 5);//每次加5
jedis.decrBy("num", 4);//每次减4
jedis.set("name", "lisi");
jedis.append("name", " & wangwu");//拼接字符串
System.out.println(jedis.get("xxx"));
//hashmap
jedis.hset("myhash", "name", "tom");
System.out.println(jedis.hget("myhash", "name"));
Map<String, String> hash = new HashMap<String, String>();
hash.put("age", "25");
hash.put("sex", "man");
jedis.hmset("myhash", hash );
System.out.println(jedis.hmget("myhash", "age","sex"));
jedis.hgetAll("myhash");
jedis.hdel("myhash", "age");
jedis.del("myhash");
jedis.hincrBy("myhash", "age", 8);
//list
jedis.lpush("mylist", "a","b");//从左添加
jedis.lpush("mylist", "1","2");
jedis.rpush("mylist", "@","!");//从右添加
System.out.println(jedis.llen("mylist"));//长度
jedis.lpush("mylist2", "3","4");
jedis.lpush("mylist2", "5","6");
System.out.println(jedis.lrange("mylist", 0, -1));//获取从0到 倒数第一个数
System.out.println(jedis.lrange("mylist2", 0, -1));
jedis.rpoplpush("mylist", "mylist2");
System.out.println(jedis.lrange("mylist", 0, -1));
System.out.println(jedis.lrange("mylist2", 0, -1));
jedis.lpop("mylist");//返回链表头部元素
jedis.rpop("mylist");//返回链表尾部元素
jedis.del("mylist");
jedis.del("mylist2");
//set
jedis.sadd("myset", "2","1","3");
jedis.sadd("myset2", "4","5","3");
jedis.srem("myset", "2");//删除指定成员
System.out.println(jedis.smembers("myset"));//获取所有成员
System.out.println(jedis.smembers("myset2"));
System.out.println(jedis.sismember("myset2", "1"));//判断1在myset2中是否存在
System.out.println(jedis.sdiff("myset","myset2"));//A-B差集
System.out.println(jedis.sinter("myset","myset2"));//AB交集
System.out.println(jedis.sunion("myset","myset2"));//AB并集
//sortedset存储,sortedset每个成员会有一个分数,通过分数来为集合中的成员进行从小到大的排序
jedis.zadd("mysort", 0, "zhangsan");
jedis.zadd("mysort", 100, "lisi");
jedis.zadd("mysort", 40, "wangwu");
jedis.zadd("mysort", 70, "zhaoliu");
jedis.zadd("mysort", 80, "liuqi");
System.out.println(jedis.zscore("mysort", "wangwu"));
jedis.zadd("mysort", 70, "wangwu");
System.out.println(jedis.zscore("mysort", "wangwu"));
System.out.println(jedis.zcard("mysort"));
jedis.zrem("mysort", "lisi");//移除指定成员
System.out.println(jedis.zscore("mysort", "lisi"));
System.out.println(jedis.zrange("mysort", 0, -1));
System.out.println(jedis.zrevrange("mysort", 0, -1));
jedis.zremrangeByRank("mysort", 1, 2);//按照排名范围删除元素
jedis.zremrangeByScore("mysort", 52, 85);//按照分数范围删除元素
System.out.println(jedis.zrange("mysort", 0, -1));
//keys的通用操作
System.out.println(jedis.keys("mys*"));//正则
System.out.println(jedis.keys("*"));//正则
jedis.del("myhash");
jedis.rename("num1", "num4");
System.out.println(jedis.keys("*"));
System.out.println(jedis.type("mysort"));
JedisPubSub jedisPubSub = new JedisPubSub() {};
jedis.subscribe(jedisPubSub , "cctv");//订阅频道
jedis.publish("cctv", "cctv hello");//在指定的频道中发布消息
Spring Data Redis使用demo见svn