标签:
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。
异常快速:Redis的速度非常快,每秒能执行约11万集合,每秒约81000+条记录。
支持丰富的数据类型:Redis支持最大多数开发人员已经知道像列表,集合,有序集合,散列数据类型。这使得它非常容易解决各种各样的问题,因为我们知道哪些问题是可以处理通过它的数据类型更好。
操作都是原子性:所有Redis操作是原子的,这保证了如果两个客户端同时访问的Redis服务器将获得更新后的值。
多功能实用工具:Redis是一个多实用的工具,可以在多个用例如缓存,消息,队列使用(Redis原生支持发布/订阅),任何短暂的数据,应用程序,如Web应用程序会话,网页命中计数等。
1、wget http://download.redis.io/releases/redis-2.8.12.tar.gz
2、[root@infa ~]# tar xzf redis-2.8.12.tar.gz
[root@infa ~]# cd redis-2.8.12
[root@infa redis-2.8.12]# ls
3、[root@infa redis-2.8.12]# make
如果编译报错:
解决:make CFLAGS="-march=i686"
4、启动:src/redis-server
private static Jedis jedis;// 非连接额客户端连接
private static JedisPool jedisPool;// 非连接连接池
private static ShardedJedis shardedJedis;// 连接额客户端连接
private static ShardedJedisPool shardedJedisPool;// 连接连接池
由于是封装的共用的方法所以进行了线程操作:
1 public synchronized Jedis getJedisInstance(){ 2 try{ 3 return jedisPool.getResource(); 4 } catch (JedisConnectionException e) { 5 e.printStackTrace(); 6 initialPool(); 7 } 8 return jedisPool.getResource(); 9 } 10 11 public synchronized ShardedJedis getShardedJedisInstance(){ 12 try{ 13 return shardedJedisPool.getResource(); 14 } catch (Exception e) { 15 logger.error("获取redis连接失败!重新连接", e); 16 initialShardedPool(); 17 } 18 try{ 19 return shardedJedisPool.getResource(); 20 } catch (Exception e) { 21 logger.error("再次获取redis连接失败!", e); 22 } 23 return null; 24 }
由于redis 支持这些数据类型:string,hash,list,set及zset(sorted set)。
所以我自己做了封装对象的存储,不过对象是实现序列化(Serializable,至于什么是Serializable,可以自己百度,以后有机会再跟新关于序列化和反序列化)。
set
/** * * object要实现Serializable接口 * @param key * @param object * @return * @see */ public synchronized boolean setObject(String key, Object object) { if (object instanceof Serializable) { ShardedJedis shardedJedis = null; try { shardedJedis = this.getShardedJedisInstance(); shardedJedis.set(key.getBytes(), SerializeUtil.serialize(object)); } catch (Exception e) { e.printStackTrace(); } finally { shardedJedis.close(); } return true; } else { logger.error("object没有implements Serializable接口"); return false; } }
get
public synchronized Object getObject(String key){ ShardedJedis shardedJedis = null; try { shardedJedis = this.getShardedJedisInstance(); byte[] value = shardedJedis.get(key.getBytes()); return SerializeUtil.unserialize(value); } catch (Exception e) { e.printStackTrace(); } finally { shardedJedis.close(); } return null; }
判断是否存在key
1 public synchronized boolean exist(String key){ 2 ShardedJedis shardedJedis = null; 3 try { 4 shardedJedis = this.getShardedJedisInstance(); 5 if(shardedJedis.exists(key)){ 6 return true; 7 }else{ 8 return false; 9 } 10 } catch (Exception e) { 11 e.printStackTrace(); 12 } finally { 13 shardedJedis.close(); 14 } 15 return false; 16 }
标签:
原文地址:http://www.cnblogs.com/shufy/p/5388571.html