首先是安装环境
windows版redis:https://github.com/MSOpenTech/redis/releases
linux版redis:http://redis.io/download

我的电脑是windows版本接下来windows为例,现在我们的环境安装好了,接下来是要启动redis服务,启动要在两个dos界面输入命令,为了方便我将这两条命令做成批处理,
start redis-server.exeredis.windows.conf
start redis-cli.exe -h 127.0.0.1 -p 6379
将这两句话写入txt文件保存后,将文件后缀改为bat就可以直接启动(这个文件要放在下载回来的redis文件下)

前期准备工作已经完成,接下来可以了解redis是个什么东西了。简单的来说redis是一个分布式的(string,object)的一个map,可以用于信息之间的传递。下面是java和redis的使用。

public class RedisJava {
    public static void main(String[] args) {
        //连接本地redis服务(本地服务要先开呀)
        Jedis jedis=new Jedis("localhost");
        System.out.println("连接成功");
        //查看服务网是否运行
        System.out.println("服务正在运行:"+jedis.ping());

//      RedisJava.operationList(jedis);
//      System.out.println(jedis.get("n1"));

    }

    public static void operationString(Jedis jedis){
        jedis.set("key", "value");//添加数据
        jedis.append("key", "s");//追加数据
        System.out.println(jedis.get("key"));
        jedis.del("key");//删除数据
        System.out.println(jedis.get("key"));
        //设置多个键值对
        jedis.mset("name","liangjianyaun","age","23","qq","476777XXX");
        System.out.println(jedis.get("name"));

    }
    public static void operationMap(Jedis jedis){
        //-----添加数据----------  
        Map<String, String> map = new HashMap<String, String>();
        map.put("name", "liangjianyuan");
        map.put("age", "23");
        map.put("qq", "123456");
        jedis.hmset("user",map);

        List<String> rsmap = jedis.hmget("user", "name", "age", "qq");
        System.out.println(rsmap);
        //删除某一个键值
        jedis.hdel("user", "qq");
        System.out.println(jedis.hmget("user",  "qq"));
        System.out.println(jedis.hlen("user"));//key的个数
        System.out.println(jedis.hkeys("user"));//返回所有的key值
        System.out.println(jedis.hexists("user", "qq"));//判断是否有这个key
        System.out.println(jedis.hvals("user"));
        Iterator<String> iter=jedis.hkeys("user").iterator();  
        while (iter.hasNext()){  
            String key = iter.next();  
            System.out.println(key+":"+jedis.hmget("user",key));  
        }  
    }
    public static void operationList(Jedis jedis){
        //开始前,先移除所有的内容  
        jedis.del("java framework");  
        System.out.println(jedis.lrange("java framework",0,-1));  
        //先向key java framework中存放三条数据  方向左
        jedis.lpush("java framework","spring");  
        jedis.lpush("java framework","struts");  
        jedis.lpush("java framework","hibernate");  
        //再取出所有数据jedis.lrange是按范围取出,  
        //第一个是key,第二个是起始位置,第三个是结束位置,jedis.llen获取长度 -1表示取得所有  
        System.out.println(jedis.lrange("java framework",0,-1));  

        jedis.del("java framework");
        //方向右
        jedis.rpush("java framework","hibernate"); 
        jedis.rpush("java framework","struts");  
        jedis.rpush("java framework","spring");  
        System.out.println(jedis.lrange("java framework",0,-1));
    }
}

为了方便对象的使用和减小new对象的开销,redis也有池的使用

public class JedisUtil {
//
    private static String ADDR="127.0.0.1";  //连接主机ip

    private static int PORT=6379;//端口

    private static int MAX_ACTIVE=1024;//最大连接数

    private static int MAX_IDLE=200;//最大空闲数

    private static int MAX_WAIT=10000;//连接等待时间

    private static boolean TEST_ON_BORROW=true;//在获取连接的时候检查有效性

    private static JedisPool jedisPool=null;

     private static void initialPool(){
         JedisPoolConfig config = new JedisPoolConfig();
         config.setMaxTotal(MAX_ACTIVE);//最大连接数
         config.setMaxIdle(MAX_IDLE);//最大空闲
         config.setMaxWaitMillis(MAX_WAIT);//等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException;
         config.setTestOnBorrow(TEST_ON_BORROW);//在获取连接的时候检查有效性, 默认false
         jedisPool=new JedisPool(config, ADDR, PORT);
     }
    public synchronized static Jedis getJedis(){
        if(null==jedisPool){
            initialPool();
        }
        Jedis jedis=jedisPool.getResource();//获取实例
        return jedis;
    }
     public static void closeJedis(Jedis jedis)
      {
        if ((null != jedis) && (null != jedisPool ))
          jedisPool.returnResource(jedis);
      }

}

有关于redis订阅与发布的方面的内容,redis采用的pub/sub的方式来实现

广播类

public class TestPublist {
    public static void main(String[] args) {

        try {
            Jedis jedis=new Jedis("localhost");
            jedis.publish("redisChatTest", "恐怖广播");
            jedis.publish("redisChatTest", "我没有名字,因为名字在这里没有意义");

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

订阅类

public class TestSubscribe {
public static void main(String[] args) {
    Jedis jedis=new Jedis("localhost");
    //重写onMessage方法就可以接收到发布的信息
    System.out.println("开始监听");
    JedisPubSub jedisPubSub=new JedisPubSub() {
        public void onMessage(String channel, String message) {
            //channel监听器名字  消息
            System.out.println("channel:" + channel + "    receives message :" + message);
//          this.unsubscribe();//监听一回结束监听
        }
    };
    jedis.subscribe(jedisPubSub, "redisChatTest");
    System.out.println("监听结束。。。。");

}
}

最后来一起看看redis有关于同步方面的demo
、“`
public class RedisTransactions {
public static void main(String[] args) {
//有关于redis事务使用
RedisTransactions.test1Normal();
RedisTransactions.test2Trans();
}

//普通方法同步
public static void test1Normal(){
    Jedis jedis=new Jedis("localhost");
    long start = System.currentTimeMillis();
    for(int i=0;i<100000;i++){
        String result=jedis.set("n"+i,"n"+i);//成功返回OK
    }
    long end = System.currentTimeMillis(); 
    System.out.println("Simple SET: " + ((end - start)/1000.0) + " seconds");
    jedis.disconnect();
}
//事务
public static void test2Trans(){
    Jedis jedis=new Jedis("localhost");
    long start=System.currentTimeMillis();
    Transaction tx=jedis.multi();
    for(int i=0;i<100000;i++){
        tx.set("t"+i,"t"+i);
    }
    List<Object>results=tx.exec();
    long end = System.currentTimeMillis(); 
    System.out.println("Transaction SET: " + ((end - start)/1000.0) + " seconds"); 
    jedis.disconnect();
}
//管道
public void test3Pipelined() { 
    Jedis jedis = new Jedis("localhost"); 
    Pipeline pipeline = jedis.pipelined(); 
    long start = System.currentTimeMillis(); 
    for (int i = 0; i < 100000; i++) { 
        pipeline.set("p" + i, "p" + i); 
    } 
    List<Object> results = pipeline.syncAndReturnAll(); 
    long end = System.currentTimeMillis(); 
    System.out.println("Pipelined SET: " + ((end - start)/1000.0) + " seconds"); 
    jedis.disconnect(); 
}

}

“`