java操作redis数据库

一、运行环境

     1、操作系统:windows 10;

     2、Redis-x64-3.2.100

     3、java开发环境:eclipse

     4、jar包:jedis-2.1.0.jar 

二、测试1———增删数据

      1、启动redis(必须先启动,否则java程序运行失败)

      2、创建好eclipse工程,代码如下:

package test;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import redis.clients.jedis.Jedis;


public class RedisTest{
	private final static Jedis jedis = new Jedis("127.0.0.1",6379);
	public static void main(String[] args) {

		//add1();
		//del();
		//append();
		//incr();
		//add2();
		//del2();
		//add3();
		//add4();
		add5();
	}
	//添加字符串  修改字符串
	public static void add1(){
		//name-value (键值对)
		jedis.set("name", "wangchunyu1");
		System.out.println(jedis.get("name"));
	}

	//删除字符串
	public static void del(){
		jedis.del("name");
		System.out.println(jedis.get("name"));
	}

	//追加延长字符串
	public static void append(){
		jedis.append("name", "append");
		System.out.println(jedis.get("name"));
	}

	//加1 incr 减一 decr
	public static void incr(){
		jedis.set("num", "4");
		System.out.println(jedis.incr("num"));
	}

	//添加Hash 修改hash
	public static void add2(){
		//Hash 一般第二个为属性 和类最为接近
		jedis.hset("users","name", "wangchunyu");
		jedis.hset("users","age", "24");
		jedis.hset("users", "sex", "男");
		Map<String, String> map = jedis.hgetAll("users");
		Set<String> sets = map.keySet();
		for (String set : sets) {
			System.out.println(set+":"+map.get(set));
		}
	}

	//删除hash值
	public static void del2(){
		jedis.hdel("users", "sex");
		Map<String, String> map = jedis.hgetAll("users");
		Set<String> sets = map.keySet();
		for (String set : sets) {
			System.out.println(set+":"+map.get(set));
		}
	}


	//添加list(列表) 可以重复
	public static void add3(){
		//lpush:左添加 和 rpush:右添加
		jedis.lpush("list1", "刘备");
		jedis.lpush("list1", "关羽");
		jedis.lpush("list1", "张飞");
		//lrange:右提取  第二个参数和第三个参数 为index  -1时候为取出所有参数
		List<String> list = jedis.lrange("list1",0, -1);
		for (String each : list) {
			System.out.println(each);
		}
	}


	//添加set(集合)重复唯一
	public static void add4(){
		jedis.sadd("set1", "中国");
		jedis.sadd("set1", "美国");
		jedis.sadd("set1", "日本");
		jedis.sadd("set1", "印度");
		Set<String> sets = jedis.smembers("set1");
		for (String set : sets) {
			System.out.println(set);
		}
	}


	//添加zset(集合)有顺序 值唯一
	public static void add5(){
		Map<Double, String> map = new HashMap<Double, String>();
		map.put(1d, "第一个");
		map.put(4d, "第四个");
		map.put(3d, "第三个");
		map.put(2d, "第二个");
		jedis.zadd("zset1", map);
		//删除
		//jedis.zrem("zset1", "第二个");
		Set<String> zsets = jedis.zrange("zset1",0, -1);
		for (String set : zsets) {
			System.out.println(set);
		}
	}
}

   三、测试2——利用Redis 实现消息队列

1.用redis中的List可以实现队列,这样可以用来做消息处理和任务调度的队列

2、代码如下 

 

扫描二维码关注公众号,回复: 4942965 查看本文章

1)生产者代码

package scheduleTest;
 
import java.util.Random;
import java.util.UUID;
 
import redis.clients.jedis.Jedis;
 

public class TaskProducer implements Runnable{
	Jedis jedis = new Jedis("127.0.0.1",6379);
	
	public void run() {
		Random random = new Random();
		while(true){
			try{
				Thread.sleep(random.nextInt(600) + 600);
				// 模拟生成一个任务
				UUID taskid = UUID.randomUUID();
				//将任务插入任务队列:task-queue
				jedis.lpush("task-queue", taskid.toString());
				System.out.println("插入了一个新的任务: " + taskid);
 
			}catch(Exception e){
				e.printStackTrace();
			}
		}
		
	}
 
}

 2)消费者代码

package scheduleTest;
 
import java.util.Random;
 
import redis.clients.jedis.Jedis;
 

public class TaskConsumer implements Runnable {
	Jedis jedis = new Jedis("127.0.0.1",6379);
 
	public void run() {
		Random random = new Random();
		
		while(true){
			
			//从任务队列"task-queue"中获取一个任务,并将该任务放入暂存队列"tmp-queue"
			String taskid = jedis.rpoplpush("task-queue", "tmp-queue");
		    
			
			// 处理任务----纯属业务逻辑,模拟一下:睡觉
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			
			
			//模拟成功和失败的偶然现象
			if(random.nextInt(13) % 7 == 0){// 模拟失败的情况,概率为2/13
				//将本次处理失败的任务从暂存队列"tmp-queue"中,弹回任务队列"task-queue"
				jedis.rpoplpush("tmp-queue", "task-queue");
				System.out.println(taskid + "处理失败,被弹回任务队列");
			
			} else {// 模拟成功的情况
				
				// 将本次任务从暂存队列"tmp-queue"中清除
				jedis.rpop("tmp-queue");
				System.out.println(taskid+"处理成功,被清除");
				
			}	
		}
		           		
	}
	
 
	
}

3)测试代码

package scheduleTest;
 

public class TaskShedulerSystem {
	public static void main(String[] args) throws Exception {
		
		// 启动一个生产者线程,模拟任务的产生
		new Thread(new TaskProducer()).start();
		
		Thread.sleep(15000);
		
		//启动一个线程者线程,模拟任务的处理
		new Thread(new TaskConsumer()).start();
		
		//主线程休眠
		Thread.sleep(Long.MAX_VALUE);
	}
}

参考:https://blog.csdn.net/ZuoAnYinXiang/article/details/50263945

猜你喜欢

转载自blog.csdn.net/weixin_40449300/article/details/85890372