码迷,mamicode.com
首页 > 其他好文 > 详细

redis入门

时间:2016-04-13 20:48:47      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:

  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 优势  

  • 异常快速:Redis的速度非常快,每秒能执行约11万集合,每秒约81000+条记录。

  • 支持丰富的数据类型:Redis支持最大多数开发人员已经知道像列表,集合,有序集合,散列数据类型。这使得它非常容易解决各种各样的问题,因为我们知道哪些问题是可以处理通过它的数据类型更好。

  • 操作都是原子性:所有Redis操作是原子的,这保证了如果两个客户端同时访问的Redis服务器将获得更新后的值。

  • 多功能实用工具:Redis是一个多实用的工具,可以在多个用例如缓存,消息,队列使用(Redis原生支持发布/订阅),任何短暂的数据,应用程序,如Web应用程序会话,网页命中计数等。

Redis 安装

  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

Redis 使用(按照我自己在项目中使用的经验)  

  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     }

 

    

redis入门

标签:

原文地址:http://www.cnblogs.com/shufy/p/5388571.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!