Redis
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> Redis

Các phím sắp xếp của Spring Redis

Mã nằm ở cuối bài đăng, nếu bạn đã quen với nguyên tắc sắp xếp nhiều phím hset trong redis, hãy bỏ qua nội dung sau và trực tiếp đọc mã.

Redis Sort nhằm mục đích sắp xếp các trường bên trong List / Set / Zset, nhưng phương pháp này có thể được sử dụng để sắp xếp nhiều khóa dựa trên số liệu được chỉ định mà chúng tôi muốn. Chúng ta có thể sử dụng "sort" để sắp xếp nhiều khóa hset theo trường được chỉ định, nhưng có giới hạn về mẫu của các khóa hset.
Ví dụ:nếu mẫu của các khóa hset là "băm {i}" (tôi là một số nguyên), với điều kiện này chúng ta có thể sắp xếp nó.

127.0.0.1:6379> keys hash*
1) "hash3"
2) "hash2"
3) "hash1"

Hãy xem nội dung của hash1:

127.0.0.1:6379> hgetall hash1
1) "id"
2) "24"
3) "name"
4) "kobe"

Mỗi khóa băm chứa hai trường:"id", "tên". Nếu chúng ta muốn sắp xếp các khóa hset này theo id của nó. Chúng ta nên làm gì?

Đầu tiên, thêm một khóa thiết lập có tên "myset". "myset" là một khóa tập hợp chứa các thành viên {"1", "2", "3"}.

127.0.0.1:6379> smembers myset
1) "1"
2) "2"
3) "3"

Sau đó chạy lệnh sau:

127.0.0.1:6379> SORT myset BY hash*->id GET hash*->id GET hash*->name
1) "3"
2) "wade"
3) "24"
4) "kobe"
5) "30"
6) "curry"

Eureka, sắp xếp hàm băm {1-3} theo id của nó.
Đây là mã sử dụng Spring Redis để thực hiện công việc:

public static String getRandomStr() {
    return String.valueOf(new Random().nextInt(100));
}

public static void redisTemplateSort(RedisTemplate redisTemplate) {
    String sortKey = "sortKey";

    StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();

    redisTemplate.setKeySerializer(stringRedisSerializer);
    redisTemplate.setValueSerializer(stringRedisSerializer);
    redisTemplate.setHashKeySerializer(stringRedisSerializer);
    redisTemplate.setHashValueSerializer(stringRedisSerializer);

    redisTemplate.delete(sortKey);
    if (!redisTemplate.hasKey(sortKey)) {
        for (int i = 0; i < 10; i++) {
            redisTemplate.boundSetOps(sortKey).add(String.valueOf(i));
            String hashKey = "hash" + i,
                    strId = String.valueOf(i),
                    strName = getRandomStr(),
                    strSite = getRandomStr();
            redisTemplate.boundHashOps(hashKey).put("_id", strId);
            redisTemplate.boundHashOps(hashKey).put("Name", strName);
            redisTemplate.boundHashOps(hashKey).put("Site", strSite);

            System.out.printf("%s : {\"_id\": %s, \"Name\": %s, \"Site\", %s}\n",
                    hashKey, strId, strName, strSite);
        }
    }

    SortQuery<String> sortQuery = SortQueryBuilder.sort(sortKey).by("hash*->Name")
            .get("hash*->_id").get("hash*->Name").get("hash*->Site").build();
    List<String> sortRslt = redisTemplate.sort(sortQuery);

    for (int i = 0; i < sortRslt.size(); ) {
        System.out.printf("{\"_id\": %s, \"Name\": %s, \"Site\", %s}\n", sortRslt.get(i+2), sortRslt.get(i+1), sortRslt.get(i));
        i += 3;
    }
}

Kết quả chạy redisTemplateSort(redisTemplate) (như sắp xếp theo tên trong mã):

hash0 : {"_id": 0, "Name": 59, "Site", 60}
hash1 : {"_id": 1, "Name": 37, "Site", 57}
hash2 : {"_id": 2, "Name": 6, "Site", 40}
hash3 : {"_id": 3, "Name": 91, "Site", 58}
hash4 : {"_id": 4, "Name": 39, "Site", 32}
hash5 : {"_id": 5, "Name": 27, "Site", 82}
hash6 : {"_id": 6, "Name": 43, "Site", 10}
hash7 : {"_id": 7, "Name": 17, "Site", 55}
hash8 : {"_id": 8, "Name": 14, "Site", 91}
hash9 : {"_id": 9, "Name": 39, "Site", 91}
{"_id": 40, "Name": 6, "Site", 2}
{"_id": 91, "Name": 14, "Site", 8}
{"_id": 55, "Name": 17, "Site", 7}
{"_id": 82, "Name": 27, "Site", 5}
{"_id": 57, "Name": 37, "Site", 1}
{"_id": 32, "Name": 39, "Site", 4}
{"_id": 91, "Name": 39, "Site", 9}
{"_id": 10, "Name": 43, "Site", 6}
{"_id": 60, "Name": 59, "Site", 0}
{"_id": 58, "Name": 91, "Site", 3}


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Làm lại danh sách các khóa lồng nhau

  2. Lợi ích của việc phân cụm Redis trên các máy chủ khác nhau là gì?

  3. Tuần tự hóa Redis có tiền tố là chuỗi bổ sung

  4. muốn chạy máy chủ redis trong nền không ngừng

  5. Khóa hết hạn Spring Data Redis