一、導入jar包
二、實現簡單的條件查詢
創建一個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對象存到緩存中
接下來,首先實現單條件的查詢,比如說查詢年齡為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>
那么,如果想要查詢年齡為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
喜歡就支持一下吧
相關推薦