java操作Redis(一)

本文介绍了如何使用Java操作Redis,包括利用jedis-2.7.2.jar进行基本数据类型的操作,以及如何实现带条件的查询。在实现条件查询时,文章提出需要先建立id与其他属性的联系集,再进行匹配查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、java操作Redis的基本数据类型

    1、使用java操作Redis需要用到 jedis jar 包 我用的是 jedis-2.7.2.jar(2.7以后才支持集群操作) 测试需要 junit 的jar包

         链接: https://pan.baidu.com/s/1K0YrsN-OqKT0F3xvooug0w 密码: 67fj 

    2、代码实现

package com.xyq.redis.test;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.junit.Before;
import org.junit.Test;

import redis.clients.jedis.Jedis;

public class TestRedis {

	private Jedis jedis;
	
	// before注解的方法,在运行test注解的方法之前会运行
	@Before
	public void setup(){
		// 连接redis服务器
		jedis = new Jedis("192.168.43.202", 6379);
		// 查看服务是否运行
		System.out.println(jedis.ping());//输出PONG则连接成功
	}
	
	/**
	 * java 操作Redis的String数据类型
	 */
	@Test
	public void testString(){
		
		jedis.set("name", "z3");//设置数据
		System.out.println(jedis.get("name"));//获得数据
		
		jedis.append("name", "is a man");//追加
		System.out.println(jedis.get("name"));//获得数据
		
		jedis.del("name");// 删除某个键
		System.out.println(jedis.get("name"));
		
		jedis.mset("name", "z3", "age", "23", "sex", "nan");// 设置多个键值对
		System.out.println(jedis.mget("name", "age", "sex"));
	}
	
	/**
	 * java 操作Redis的Hash数据类型
	 */
	@Test
	public void testHash(){
		
		Map<String, String> map = new HashMap<String, String>();
		
		jedis.hset("user", "name", "L4");//设置数据
		System.out.println(jedis.hget("user", "name"));//获得数据
		
		map.put("age", "30");
		map.put("sex", "nan");
		jedis.hmset("user", map);
		List<String> result = jedis.hmget("user", "name", "age", "sex");
		System.out.println(result);
		
	}
	
	/**
	 * java 操作Redis的List数据类型,List既可以用作栈,也可以用作队列
	 */
	@Test
	public void testList(){
		//1、栈操作
		jedis.del("list1");
		
		jedis.lpush("list1", "z3");
		jedis.lpush("list1", "l4");
		jedis.lpush("list1", "w5");
		
		List<String> result1 = jedis.lrange("list1", 0, -1);
		System.out.println(result1);
		
		jedis.del("list1");
		//2、队列操作
		jedis.rpush("list1", "z3");
		jedis.rpush("list1", "l4");
		jedis.rpush("list1", "w5");
		
		List<String> result2 = jedis.lrange("list1", 0, -1);
		System.out.println(result2);
	}
	
	/**
	 * java 操作Redis的Set数据类型
	 */
	@Test
	public void testSet(){
		
		jedis.sadd("set1", "z3");
		jedis.sadd("set1", "L4");
		jedis.sadd("set1", "w5");
		jedis.sadd("set1", "z6");
		
		Set<String> result = jedis.smembers("set1");
		System.out.println(result);
	}
	
	/**
	 * java 操作Redis的ZSet数据类型
	 */
	@Test
	public void testZSet(){
		
		jedis.zadd("zset1", 1, "one");
		jedis.zadd("zset1", 6, "six");
		jedis.zadd("zset1", 5, "five");
		jedis.zadd("zset1", 3, "three");
		
		Set<String> result = jedis.zrange("zset1", 0, -1);
		System.out.println(result);
		
	}
}

2、java操作Redis实现带条件的查询

    1、基本思路

        redis实现条件查询其实就是需要我们自己建立id与其他属性的联系集。比如在关系型数据库里面,建立一个汽车表user:id, name, age, sex当我们需要查询age等于25的所有user信息的时候,我们首先需要建立一个id和age之间的联系集,通过匹配得到id再去查找user信息。

    2、代码实现

        user实体类

package com.xyq.redis.test.entity;

public class User {

	private int id;
	private String name;
	private int age;
	private String sex;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	
	public User() {
	}
	
	@Override
	public String toString() {
		return "user[id" + id + "name" + name + "age" + age + "sex" +sex + "]";
	}
}

        json工具类

            需要用到 gson-2.2.4.jar 也在上面连接中

package com.xyq.redis.test.Util;

import com.google.gson.Gson;

public class GsonUtil {
	
	public static String object2Json(Object object) {
		Gson gson = new Gson();
		return gson.toJson(object);
	}

	public static <T> T json2Object(String json, Class<T> clazz) {
		Gson gson = new Gson();
		return gson.fromJson(json, clazz);
	}
}

        RedisSelect类

package com.xyq.redis.test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import com.xyq.redis.test.Util.GsonUtil;
import com.xyq.redis.test.entity.User;

import redis.clients.jedis.Jedis;

public class RedisSelect {
	
	public static void main(String[] args) {
		
		// 将User表的内容field:id value: json 保存一个记录
		final String SYS_USER_TABLE = "SYS_USER_TABLE";
		// 用于保存性别为男性的User用户的Redis的Set
		final String SYS_USER_TABLE_SEX_MAN = "SYS_USER_TABLE_SEX_MAN";
		// 用于保存性别为女性的用户的Redis的Set
		final String SYS_USER_TABLE_SEX_WOMAN = "SYS_USER_TABLE_SEX_WOMAN";
		// 用于保存age为25岁的用户的Redis的Set
		final String SYS_USER_TABLE_AGE_25 = "SYS_USER_TABLE_AGE_25";
		
		// 连接redis服务器
		Jedis jedis = new Jedis("192.168.43.202", 6379);
		// 查看服务是否运行
		System.out.println(jedis.ping());//输出PONG则连接成功
		
		// 模拟数据库的表User的数据
		List<User> users = new ArrayList<User>();
		for(int i=0; i<5; i++){
			User user = new User();
			user.setId(i);
			user.setName("z" + i);
			user.setAge(20 + i);
			user.setSex("man");
			users.add(user);
		}
		for(int i=5; i<10; i++){
			User user = new User();
			user.setId(i);
			user.setName("L" + i);
			user.setAge(20 + i);
			user.setSex("woman");
			users.add(user);
		}
		// 通过Hash存放
		Map< String, String> map = new HashMap<String, String>();
		
		for(int i=0; i<users.size(); i++){
			
			map.put(users.get(i).getId() + "", GsonUtil.object2Json(users.get(i)));
			
			//将性别为男性的User用户加入到Redis中key为SYS_USER_TABLE_SEX_MAN的Set集合里面
			if("man".equals(users.get(i).getSex())){
				jedis.sadd(SYS_USER_TABLE_SEX_MAN, users.get(i).getId()+"");
			}
			
			// 将性别为男性的User用户加入到Redis中key为SYS_USER_TABLE_SEX_MAN的Set集合里面
			if("woman".equals(users.get(i).getSex())){
				jedis.sadd(SYS_USER_TABLE_SEX_WOMAN, users.get(i).getId()+"");
			}
			
			// 将年龄为25的User用户加入到Redis中key为SYS_USER_TABLE_AGE_25的Set集合里面
			if(users.get(i).getAge() == 25){
				jedis.sadd(SYS_USER_TABLE_AGE_25, users.get(i).getId()+"");
			}
		}
		
		// 每条记录一 feild :id value:json 的形式保存
		
		jedis.hmset(SYS_USER_TABLE, map);
		
		// 查询年龄为25岁,性别为女的user用户(就是两个集合求交集)
		Set<String> result = jedis.sinter(SYS_USER_TABLE_SEX_WOMAN, SYS_USER_TABLE_AGE_25);
		
		for(String key:result){
			// 根据id到Redis中的SYS_USER_TABLE,查询符合条件的user
			String hkey = jedis.hget(SYS_USER_TABLE, key);
			System.out.println(hkey);
			// 将查询到的json数据,转换为User用户
			User user = GsonUtil.json2Object(hkey, User.class);
			System.out.println(user);
		}
		
	}
	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值