中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

redis怎么實現條件查詢?

發布時間:2020-05-18 11:38:16 來源:億速云 閱讀:436 作者:Leah 欄目:關系型數據庫

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, String> map = new HashMap<String,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);

在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, String> map = new HashMap<String,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);

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 [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 [id=63a970ec-e997-43e0-8ed9-14c5eb87de8b, name=y1, sex=m, age=15]

以上就是redis實現條件查詢的方法介紹,代碼示例簡單明了,如果在日常工作遇到此問題。通過這篇文章,希望你能有所收獲,更多詳情敬請關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

湘潭县| 公主岭市| 安达市| 桂东县| 璧山县| 香河县| 延川县| 马公市| 荆州市| 冕宁县| 珠海市| 崇仁县| 靖宇县| 思南县| 五大连池市| 延寿县| 高安市| 遂溪县| 贵南县| 宜昌市| 南昌县| 中宁县| 祁门县| 汨罗市| 苍梧县| 章丘市| 济宁市| 吴江市| 色达县| 大冶市| 邮箱| 玉田县| 建德市| 昂仁县| 昌邑市| 通河县| 平山县| 永平县| 麻阳| 泸溪县| 安顺市|