redis實現簡單的條件查詢

redis實現簡單的條件查詢

一、導入jar包

redis實現簡單的條件查詢

二、實現簡單的條件查詢

創建一個User實體類

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

創建5個對象并將其存入緩存中,以便我們進行測試

	//連接redis 	Jedis?jedis?=?new?Jedis("127.0.0.1",6379); 	 	Map<string>?map?=?new?HashMap<string>(); 	final?String?USER_TABLE?=?"USER_TABLE"; 	 	//向緩存中存入5條數據組成的map 	String?uuid1?=?UUID.randomUUID().toString(); 	User?user1?=?new?User(uuid1,?"y1",?"m",?15); 	//將對象轉為json 	map.put(uuid1,?JSONObject.fromObject(user1).toString()); 	 	String?uuid2?=?UUID.randomUUID().toString(); 	User?user2?=?new?User(uuid2,?"y2",?"m",?18); 	map.put(uuid2,?JSONObject.fromObject(user2).toString()); 	 	String?uuid3?=?UUID.randomUUID().toString(); 	User?user3?=?new?User(uuid3,?"y3",?"n",?25); 	map.put(uuid3,?JSONObject.fromObject(user3).toString()); 	 	String?uuid4?=?UUID.randomUUID().toString(); 	User?user4?=?new?User(uuid4,?"y4",?"n",?15); 	map.put(uuid4,?JSONObject.fromObject(user4).toString()); 	 	String?uuid5?=?UUID.randomUUID().toString(); 	User?user5?=?new?User(uuid5,?"y5",?"m",?25); 	map.put(uuid5,?JSONObject.fromObject(user5).toString()); 	 	//把map存到緩存中 	jedis.hmset("USER_TABLE",?map);</string></string>

redis中查詢,可以看到已經將5個user對象存到緩存中

redis實現簡單的條件查詢

接下來,首先實現單條件的查詢,比如說查詢年齡為15的user和性別為m的user

由于Redis是nosql,無法直接像mysql那樣利用where進行條件查詢,所以Redis想實現條件查詢,只能用一個笨方法:將所有符合條件的user存到一個set中。

Jedis?jedis?=?new?Jedis("127.0.0.1",6379); 	Map<string>?map?=?new?HashMap<string>(); 	 	final?String?USER_TABLE?=?"USER_TABLE"; 	//查詢年齡為15,性別為n 	 	final?String?USER_TABLE_AGE_15?=?"USER_TABLE_AGE_15"; 	final?String?USER_TABLE_SEX_m?=?"USER_TABLE_SEX_m"; 	final?String?USER_TABLE_SEX_n?=?"USER_TABLE_SEX_n"; 	 	//向緩存中存入5條數據組成的map 	 	String?uuid1?=?UUID.randomUUID().toString(); 	User?user1?=?new?User(uuid1,?"y1",?"m",?15); 	//將對象轉為json 	map.put(uuid1,?JSONObject.fromObject(user1).toString()); 	//將符合條件的user的Id存到set中 	jedis.sadd(USER_TABLE_AGE_15,uuid1); 	jedis.sadd(USER_TABLE_SEX_m,uuid1); 	 	String?uuid2?=?UUID.randomUUID().toString(); 	User?user2?=?new?User(uuid2,?"y2",?"m",?18); 	map.put(uuid2,?JSONObject.fromObject(user2).toString()); 	jedis.sadd(USER_TABLE_SEX_m,uuid2); 	 	String?uuid3?=?UUID.randomUUID().toString(); 	User?user3?=?new?User(uuid3,?"y3",?"n",?25); 	map.put(uuid3,?JSONObject.fromObject(user3).toString()); 	 	String?uuid4?=?UUID.randomUUID().toString(); 	User?user4?=?new?User(uuid4,?"y4",?"n",?15); 	map.put(uuid4,?JSONObject.fromObject(user4).toString()); 	jedis.sadd(USER_TABLE_AGE_15,uuid4); 	 	String?uuid5?=?UUID.randomUUID().toString(); 	User?user5?=?new?User(uuid5,?"y5",?"m",?25); 	map.put(uuid5,?JSONObject.fromObject(user5).toString()); 	jedis.sadd(USER_TABLE_SEX_m,uuid5); 	 	//把map存到緩存中 	jedis.hmset("USER_TABLE",?map);</string></string>

redis實現簡單的條件查詢

那么,如果想要查詢年齡為15的user,就需要先從USER_TABLE_AGE_15中取出所有的uuid,然后再從USER_TABLE中取出user

	//獲取年齡為15的user的uuid 	Set<string>?age?=?jedis.smembers(USER_TABLE_AGE_15); 	 	//根據uuid獲取user 	List<user>?userJson?=?new?ArrayList<user>(); 	 	for?(Iterator?iterator?=?age.iterator();?iterator.hasNext();)?{ 	????String?string?=?(String)?iterator.next(); 	????String?jsonStr?=?jedis.hget(USER_TABLE,?string); 	????JSONObject?json?=?JSONObject.fromObject(jsonStr); 	????User?user?=?(User)?JSONObject.toBean(json,?User.class); 	????userJson.add(user); 	????System.out.println(user); 	}</user></user></string>

結果如下:

User?[id=63a970ec-e997-43e0-8ed9-14c5eb87de8b,?name=y1,?sex=m,?age=15] User?[id=aa074a2a-88d9-4b50-a99f-1375539164f7,?name=y4,?sex=n,?age=15]

那么如果現在需要年齡為15,性別為m的user呢,很簡單,獲取
USER_TABLE_AGE_15 和 USER_TABLE_SEX_m的并集,再從USER_TABLE中獲取.

//獲取年齡為15并性別為m的user 	Set<string>?userSet?=?jedis.sinter(USER_TABLE_AGE_15,USER_TABLE_SEX_m); 	List<user>?users?=?new?ArrayList<user>(); 	for?(Iterator?iterator?=?userSet.iterator();?iterator.hasNext();)?{ 	????String?string?=?(String)?iterator.next(); 	????String?jsonStr?=?jedis.hget(USER_TABLE,?string); 	????JSONObject?json?=?JSONObject.fromObject(jsonStr); 	????User?user?=?(User)?JSONObject.toBean(json,?User.class); 	????users.add(user); 	????System.out.println(user); 	}</user></user></string>
User?[id=63a970ec-e997-43e0-8ed9-14c5eb87de8b,?name=y1,?sex=m,?age=15]

更多redis知識請關注redis入門教程欄目。

以上就是

? 版權聲明
THE END
喜歡就支持一下吧
點贊15 分享