java直接使用redis

使用版本

redis-4.0.6

jedis-2.9.0.jar

spring4.3.13

spring-data-redis-1.8.3.jar

spring-data-commons-2.0.1.jar

 

一共两篇,第一篇是java直接使用redis,第二篇使用spring整合redis。

先看下目录(就五个文件):

user目录下的User.java是将要使用redis存储的类,SerializeUtil.java是用来序列化和反序列化类文件的。

先看一下User.java:

package user;

import java.io.Serializable;

/** 
* @author 朱宏亮
* @version 创建时间:2017年12月19日 下午2:00:53 
* 类说明 
*/
public class User implements Serializable{

   
    private static final long serialVersionUID = 1L;
  
    private String id;
    private String name;
    private String phone;
    private String address;
    
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    
}

SerializeUtil.java:

package user;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

/** 
* @author 朱宏亮
* @version 创建时间:2017年12月19日 下午2:23:20 
* 类说明 
*/
public class SerializeUtil {

    /**
     * 序列化
     * @param object
     * @return
     */
    public static byte[] serialize(Object object){
        ObjectOutputStream oos = null;
        ByteArrayOutputStream baos = null;
        try{
            baos = new ByteArrayOutputStream();
            oos = new ObjectOutputStream(baos);
            oos.writeObject(object);
            byte[] bytes = baos.toByteArray();
            return bytes;
        }catch(Exception e){
            
        }
        return null;
    }
    
    /**
     * 反序列化
     * @param bytes
     * @return
     */
    public static Object unserialize(byte[] bytes){
        ByteArrayInputStream bais = null;
        try{
            bais = new ByteArrayInputStream(bytes);
            ObjectInputStream ois = new ObjectInputStream(bais);
            return ois.readObject();
        }catch(Exception e){
            
        }
        return null;
    }
    

}

然后我们写一个简单的java代码来连接redis,看看能否成功

Test.java:

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

import redis.clients.jedis.Jedis;
import user.SerializeUtil;
import user.User;
/**
 * 和spring没有关系
 * @author Administrator
 *
 */
public class Test {

    @SuppressWarnings("resource")
    public static void main(String[] args) {

        //连接 Redis 服务
        Jedis jedis = new Jedis("你的Redis服务的ip地址", 6379);
        jedis.auth("redis的密码,没有密码的就把这行注释了");
        
        //查看服务是否运行
        System.out.println("Server is running: "+jedis.ping()); 
        
        jedis.set("test", "123");
        System.out.println("test:"+jedis.get("test"));
        System.out.println("=============================================");
        
        
        jedis.lpush("skill-list", "如来神掌" );
        jedis.lpush("skill-list", "独孤九剑");
        jedis.lpush("skill-list", "凌波微步");
        
        List list = jedis.lrange("skill-list", 0, 2);
        
        for(String s : list){
            System.out.println(s);
        }
        System.out.println("=============================================");
        
        
        Set keys = jedis.keys("*");
        Iterator it = keys.iterator();
        while(it.hasNext()){
            String key = it.next();
            System.out.println(key);
        }
        System.out.println("=============================================");
        
        /**
         * 存一个对象
         */
        User user1 = new User();
        user1.setId("18");
        user1.setName("蜡笔小新");
        user1.setPhone("18628889999");
        user1.setAddress("北京市海淀区中关村软件园大飞碟");
        
        jedis.set("user1".getBytes(), SerializeUtil.serialize(user1));
    
        User user2 = (User) SerializeUtil.unserialize(jedis.get("user1".getBytes()));
        System.out.println("id:\t"+user2.getId());
        System.out.println("name:\t"+user2.getName());
        System.out.println("phone:\t"+user2.getPhone());
        System.out.println("address:\t"+user2.getAddress());
        
  
              
    }

}

运行Test.java文件,在Eclipse的控制台看到输出:

Server is running: PONG
test:123
=============================================
凌波微步
独孤九剑
如来神掌
=============================================
user1
spring-redis-key
redisChat
test
skill-list
redisUser
=============================================
id:	18
name:	蜡笔小新
phone:	18628889999
address:	北京市海淀区中关村软件园大飞碟

上面运行的没毛病,然后我们实现一个简单的发布者和订阅者自动监听,俩文件。

发布者TestProducer.java:

import redis.clients.jedis.Jedis;

/** 
* @author 朱宏亮
* @version 创建时间:2017年12月21日 下午4:48:28 
* 类说明  消息发布者   和spring没有关系
*/
public class TestProducer{
	
	public static String ip = "你的redisip";
	
	public static String pw = "你的密码";
    @SuppressWarnings("resource")
	public static void main(String[] args) throws InterruptedException {
        
    	
     /*
        for(int i = 0 ; i < 3 ; i ++ ){
            Thread thread = new Thread(){
                public void run() {
                    go();
                }
            };
            thread.start();
       
        }*/
        
        
        Jedis jedis = new Jedis( ip , 6379); 
        jedis.auth(pw);
        jedis.publish("redisChat", "Redis真好玩");  
        Thread.sleep(2000);  
        jedis.publish("redisChat", "请开始你的表演");  
        Thread.sleep(2000);  
        jedis.publish("redisChat", "皮皮虾我们走!");  
   
        
    }

    @SuppressWarnings("resource")
	public static void go(){
       
        Jedis jedis = new Jedis( ip , 6379);  
        jedis.auth(pw);
        jedis.publish("redisChat", "又一个发布者");  
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }  
        jedis.publish("redisChat", "发送一些信息");  
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }  
        jedis.publish("redisChat", "嘿嘿嘿");  
    }
}

自动监听的订阅者TestConsumer.java:

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPubSub;

/** 
* @author 朱宏亮
* @version 创建时间:2017年12月21日 下午4:35:51 
* 类说明 消息订阅者,消息监听  和spring没有关系
*/
public class TestConsumer extends JedisPubSub {

   

    @Override
    public void onMessage(String channel, String message) {
        System.out.println(channel + "," + message);
    }

    @Override
    public void onPMessage(String pattern, String channel, String message) {
        System.out.println(pattern + "," + channel + "," + message);

    }

    @Override
    public void onSubscribe(String channel, int subscribedChannels) {
        System.out.println("onSubscribe: channel[" + channel + "]," + "subscribedChannels[" + subscribedChannels + "]");
    }

    @Override
    public void onUnsubscribe(String channel, int subscribedChannels) {
        System.out.println("onUnsubscribe: channel[" + channel + "], " + "subscribedChannels[" + subscribedChannels + "]");
    }

    @Override
    public void onPUnsubscribe(String pattern, int subscribedChannels) {
        System.out.println("onPUnsubscribe: pattern[" + pattern + "]," + "subscribedChannels[" + subscribedChannels + "]");

    }

    @Override
    public void onPSubscribe(String pattern, int subscribedChannels) {
        System.out.println("onPSubscribe: pattern[" + pattern + "], " + "subscribedChannels[" + subscribedChannels + "]");

    }

    
    

    
    @SuppressWarnings("resource")
    public static void main(String[] args) {
        Jedis jedis = new Jedis("你的redisip", 6379);  
        jedis.auth("你的redis密码");
        TestConsumer listener = new TestConsumer();  
        jedis.subscribe(listener, "redisChat");  
    }
    
    
    

}

然后我们先启动TestConsumer.java,然后再启动TestProducer.java,Eclipse的控制台输出:

onSubscribe: channel[redisChat],subscribedChannels[1]
redisChat,Redis真好玩
redisChat,请开始你的表演
redisChat,皮皮虾我们走!

看到这个输出之后,发现TestConsumer.java文件并没结束,他还保持着监听状态,当发布者再次发布消息时,订阅者还是可以接受到信息。

使用java使用redis就是这么简单,下一篇来看看spring+整合redis的操作。

源代码下载地址: https://gitee.com/zhuhongliang/RedisStudy

 

发表评论