redis 有序集合(sorted set)(redis學習七)
集合命令
基本命令
入門
localhost:6379> zadd test 1 redis
(integer) 1
localhost:6379> zadd test 2 mysql
(integer) 1
localhost:6379> zadd test 3 oracle
(integer) 1
localhost:6379> zadd test 4 mysql
(integer) 0
localhost:6379> zrange test 0 10
1) "redis"
2) "oracle"
3) "mysql"
localhost:6379> zrange test 0 10 withscores
1) "redis"
2) "1"
3) "oracle"
4) "3"
5) "mysql"
6) "4"
Zadd 命令
用於將一個或多個成員元素及其分數值加入到有序集當中。
如果某個成員已經是有序集的成員,那麼更新這個成員的分數值,並通過重新插入這個成員元素,來保證該成員在正確的位置上。
分數值可以是整數值或雙精度浮點數。
如果有序集合 key 不存在,則建立一個空的有序集並執行 ZADD 操作。
當 key 存在但不是有序集型別時,返回一個錯誤。
localhost:6379> zadd test 2 java
(integer) 1
localhost:6379> zrange test 0 -1 withscores
1) "redis"
2) "1"
3) "java"
4) "2"
5) "oracle"
6) "3"
7) "mysql"
8) "4"
Zcard 命令
用於計算集合中元素的數量。
localhost:6379> zcard test
(integer) 4
Zcount 命令
用於計算有序集合中指定分數區間的成員數量。
localhost:6379> zcount test 1 3
(integer) 3
localhost:6379> zcount test 2 3
(integer) 2
Zincrby 命令
對有序集合中指定成員的分數加上增量 increment
可以通過傳遞一個負數值 increment ,讓分數減去相應的值,比如 ZINCRBY key -5 member ,就是讓 member 的 score 值減去 5 。
當 key 不存在,或分數不是 key 的成員時, ZINCRBY key increment member 等同於 ZADD key increment member 。
當 key 不是有序集型別時,返回一個錯誤。
分數值可以是整數值或雙精度浮點數。
localhost:6379> zrange test 0 -1 withscores
1) "redis"
2) "1"
3) "java"
4) "2"
5) "oracle"
6) "3"
7) "mysql"
8) "4"
localhost:6379> zincrby test 2 oracle
"5"
localhost:6379> zrange test 0 -1 withscores
1) "redis"
2) "1"
3) "java"
4) "2"
5) "mysql"
6) "4"
7) "oracle"
8) "5"
Zinterstore 命令
計算給定的一個或多個有序集的交集,其中給定 key 的數量必須以 numkeys 引數指定,並將該交集(結果集)儲存到 destination 。
預設情況下,結果集中某個成員的分數值是所有給定集下該成員分數值之和。
localhost:6379> zrange test 0 -1 withscores
1) "redis"
2) "1"
3) "java"
4) "2"
5) "mysql"
6) "4"
7) "oracle"
8) "5"
localhost:6379> zrange test2 0 -1 withscores
1) "java"
2) "1"
3) "mysql"
4) "1"
5) "redis"
6) "1"
localhost:6379> zinterstore teststore 2 test test2
(integer) 3
localhost:6379> zrange teststore 0 -1 withscores
1) "redis"
2) "2"
3) "java"
4) "3"
5) "mysql"
6) "5"
Zlexcount 命令
在計算有序集合中指定字典區間內成員數量。
localhost:6379> zrange test 0 -1 withscores
1) "redis"
2) "1"
3) "java"
4) "2"
5) "mysql"
6) "4"
7) "oracle"
8) "5"
localhost:6379> zlexcount test - +
(integer) 4
Zrange
返回有序集中,指定區間內的成員。
其中成員的位置按分數值遞增(從小到大)來排序。
具有相同分數值的成員按字典序(lexicographical order )來排列。
如果你需要成員按
值遞減(從大到小)來排列,請使用 ZREVRANGE 命令。
下標引數 start 和 stop 都以 0 為底,也就是說,以 0 表示有序集第一個成員,以 1 表示有序集第二個成員,以此類推。
你也可以使用負數下標,以 -1 表示最後一個成員, -2 表示倒數第二個成員,以此類推。
localhost:6379> zrange test 0 -1 withscores
1) "redis"
2) "1"
3) "java"
4) "2"
5) "mysql"
6) "4"
7) "oracle"
8) "5"
Zrangebylex
通過字典區間返回有序集合的成員。
localhost:6379> zrange myzset 0 -1 withscores
1) "a"
2) "0"
3) "b"
4) "0"
5) "c"
6) "0"
7) "d"
8) "0"
9) "e"
10) "0"
11) "f"
12) "0"
13) "g"
14) "0"
localhost:6379> zrangebylex myzset 0 -1 - [c
(error) ERR min or max not valid string range item
localhost:6379> zrangebylex myzset - [c
1) "a"
2) "b"
3) "c"
localhost:6379> zrangebylex myzset - (c
1) "a"
2) "b"
localhost:6379> zrangebylex myzset [c (g
1) "c"
2) "d"
3) "e"
4) "f"
localhost:6379> zadd myzset 1 h
(integer) 1
localhost:6379> zrangebylex myzset [e [h
1) "e"
2) "f"
3) "g"
4) "h"
localhost:6379>
Zrangebyscore
返回有序集合中指定分數區間的成員列表。有序整合員按分數值遞增(從小到大)次序排列。
具有相同分數值的成員按字典序來排列(該屬性是有序集提供的,不需要額外的計算)。
預設情況下,區間的取值使用閉區間 (小於等於或大於等於),你也可以通過給引數前增加 ( 符號來使用可選的開區間 (小於或大於)。
localhost:6379> zrange test 0 -1 withscores
1) "redis"
2) "1"
3) "java"
4) "2"
5) "mysql"
6) "4"
7) "oracle"
8) "5"
localhost:6379> zrangebyscore test (2 5
1) "mysql"
2) "oracle"
localhost:6379> zrangebyscore test (2 (5
1) "mysql"
Zrank
返回有序集中指定成員的排名。其中有序整合員按分數值遞增(從小到大)順序排列。
localhost:6379> zrange test 0 -1 withscores
1) "redis"
2) "1"
3) "java"
4) "2"
5) "mysql"
6) "4"
7) "oracle"
8) "5"
localhost:6379> zrank test java
(integer) 1
localhost:6379> zrank test oracle
(integer) 3
Zrem 命令
用於移除有序集中的一個或多個成員,不存在的成員將被忽略。
當 key 存在但不是有序集型別時,返回一個錯誤。
localhost:6379> zrange myzset 0 -1 withscores
1) "a"
2) "0"
3) "b"
4) "0"
5) "c"
6) "0"
7) "d"
8) "0"
9) "e"
10) "0"
11) "f"
12) "0"
13) "g"
14) "0"
15) "h"
16) "1"
localhost:6379> zrem myzset a e
(integer) 2
localhost:6379> zrange myzset 0 -1 withscores
1) "b"
2) "0"
3) "c"
4) "0"
5) "d"
6) "0"
7) "f"
8) "0"
9) "g"
10) "0"
11) "h"
12) "1"
Zremrangebylex 命令
用於移除有序集合中給定的字典區間的所有成員。
localhost:6379> zrange myzset 0 -1
1) "b"
2) "c"
3) "d"
4) "f"
5) "g"
6) "h"
localhost:6379> zremrangebylex myzset [b [f
(integer) 4
localhost:6379> zrange myzset 0 -1
1) "g"
2) "h"
Zremrangebyrank 命令
用於移除有序集中,指定排名(rank)區間內的所有成員。
localhost:6379> zrange myzset 0 -1
1) "a"
2) "b"
3) "c"
4) "g"
5) "h"
localhost:6379> zrank myzset b
(integer) 1
localhost:6379> zrank myzset g
(integer) 3
localhost:6379> zremrangebyrank myzset 1 3
(integer) 3
localhost:6379> zrange myzset 0 -1
1) "a"
2) "h"
Zremrangebyscore 命令
用於移除有序集中,指定分數(score)區間內的所有成員。
localhost:6379> zrange myzset 0 -1
1) "a"
2) "h"
localhost:6379> zremrangebyscore myzset 0 0
(integer) 1
localhost:6379> zrange myzset 0 -1
1) "h"
Zrevrange 命令
返回有序集中,指定區間內的成員。
其中成員的位置按分數值遞減(從大到小)來排列。
具有相同分數值的成員按字典序的逆序(reverse lexicographical order)排列。
除了成員按分數值遞減的次序排列這一點外, ZREVRANGE 命令的其他方面和 ZRANGE 命令一樣。
localhost:6379> zrange test 0 -1 withscores
1) "redis"
2) "1"
3) "java"
4) "2"
5) "mysql"
6) "4"
7) "oracle"
8) "5"
localhost:6379> zrevrange test 0 -1 withscores
1) "oracle"
2) "5"
3) "mysql"
4) "4"
5) "java"
6) "2"
7) "redis"
8) "1"
Zrevrangebyscore
返回有序集中指定分數區間內的所有的成員。有序整合員按分數值遞減(從大到小)的次序排列。
具有相同分數值的成員按字典序的逆序(reverse lexicographical order )排列。
localhost:6379> zrevrangebyscore test 4 2 withscores
1) "mysql"
2) "4"
3) "java"
4) "2"
Zrevrank 命令
返回有序集中成員的排名。其中有序整合員按分數值遞減(從大到小)排序。
排名以 0 為底,也就是說, 分數值最大的成員排名為 0 。
使用 ZRANK 命令可以獲得成員按分數值遞增(從小到大)排列的排名。
localhost:6379> zrevrange test 0 -1 withscores
1) "oracle"
2) "5"
3) "mysql"
4) "4"
5) "java"
6) "2"
7) "redis"
8) "1"
localhost:6379> zrevrank test mysql
(integer) 1
Zscore 命令
返回有序集中,成員的分數值。 如果成員元素不是有序集 key 的成員,或 key 不存在,返回 nil 。
localhost:6379> zrange test 0 -1 withscores
1) "redis"
2) "1"
3) "java"
4) "2"
5) "mysql"
6) "4"
7) "oracle"
8) "5"
localhost:6379> zscore test mysql
"4"
Zunionstore 命令
計算給定的一個或多個有序集的並集,其中給定 key 的數量必須以 numkeys 引數指定,並將該並集(結果集)儲存到 destination 。
預設情況下,結果集中某個成員的分數值是所有給定集下該成員分數值之和 。
localhost:6379> zrange programmer 0 -1 WITHSCORES
1) "peter"
2) "2000"
3) "jack"
4) "3500"
5) "tom"
6) "5000"
localhost:6379> zrange manager 0 -1 WITHSCORES
1) "peter"
2) "1500"
3) "herry"
4) "2000"
5) "mary"
6) "3500"
7) "bob"
8) "4000"
localhost:6379> zunionstore salary 2 programmer manager weights 0 2
(integer) 6
localhost:6379> ZRANGE salary 0 -1 WITHSCORES
1) "jack"
2) "0"
3) "tom"
4) "0"
5) "peter"
6) "3000"
7) "herry"
8) "4000"
9) "mary"
10) "7000"
11) "bob"
12) "8000"
spring呼叫redis
pom.xml配置 核心依賴
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
<!-- slf4j日誌統一管理 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
</dependency>
<!-- spring中的redis -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>1.8.4.RELEASE</version>
</dependency>
zset-redis.xml spring配置檔案
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd"
default-lazy-init="false">
<!-- 佔位符配置檔案 -->
<!-- <context:property-placeholder location="classpath:redis.properties" /> -->
<!-- redis 連線池配置-->
<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxIdle" value="50" />
<property name="maxTotal" value="100" />
<property name="maxWaitMillis" value="20000" />
</bean>
<!-- Spring-redis連線池工廠配置 -->
<bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<property name="hostName" value="127.0.0.1" />
<property name="port" value="6379" />
<property name="timeout" value="2000" />
<property name="poolConfig" ref="poolConfig" />
</bean>
<!-- 序列化 String型別 -->
<bean id="stringRedisSerializer" class="org.springframework.data.redis.serializer.StringRedisSerializer" />
<!-- 序列化 物件 -->
<!-- <bean id="jdkSerializationRedisSerializer" class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" /> -->
<!-- redisTemplate 定義 -->
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
<property name="connectionFactory" ref="jedisConnectionFactory" />
<property name="keySerializer" ref="stringRedisSerializer" />
<property name="valueSerializer" ref="stringRedisSerializer" />
</bean>
</beans>
測試程式碼1
package redis.zset;
import java.util.HashSet;
import java.util.Set;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.data.redis.core.DefaultTypedTuple;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.data.redis.core.ZSetOperations.TypedTuple;
public class RedisZsetTest {
private static final Logger logger = LoggerFactory.getLogger(RedisZsetTest.class);
public static void main(String[] args) {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("redis-conf/zset/zset-redis.xml");
RedisTemplate redisTemplate = applicationContext.getBean(RedisTemplate.class);
ZSetOperations opsForZSet = redisTemplate.opsForZSet();
Set<TypedTuple<String>> set1 = new HashSet<>();
Set<TypedTuple<String>> set2 = new HashSet<>();
int j = 9;
for (int i = 1; i < 10; i++) {
j--;
Double score1 = Double.valueOf(i);
String value1 = "x" + i;
Double score2 = Double.valueOf(j);
String value2 = j % 2 == 1 ? "y" + j : "x" + j;
TypedTuple<String> typedTuple1 = new DefaultTypedTuple<String>(value1, score1);
TypedTuple<String> typedTuple2 = new DefaultTypedTuple<String>(value2, score2);
set1.add(typedTuple1);
set2.add(typedTuple2);
}
// 1.新增
opsForZSet.add("zset1", set1);
opsForZSet.add("zset2", set2);
// 2.讀取元素,但是不返回分數
Set zset1 = opsForZSet.range("zset1", 0, -1);
Set zset2 = opsForZSet.range("zset2", 0, -1);
logger.debug("zset1所有值值:{}", zset1);
logger.debug("zset1所有值值:{}", zset2);
// 3.求元素個數
Long zCard = opsForZSet.zCard("zset1");
logger.debug("zset1的元素個數:{}", zCard);
// 4.求分數在3-6之間的元素個數
Long count = opsForZSet.count("zset1", 6, 9);
logger.debug("zset1數在3-6之間的元素個數:{}", count);
// 5.讀取元素,並返回分數
Set<TypedTuple<String>> rangeWithScores1 = opsForZSet.rangeWithScores("zset1", 0, -1);
Set<TypedTuple<String>> rangeWithScores2 = opsForZSet.rangeWithScores("zset2", 0, -1);
logger.debug("zset1所有值值:{}", rangeWithScores1);
for (TypedTuple<String> object : rangeWithScores1) {
Double score = object.getScore();
String value = object.getValue();
logger.debug("值:{}, 分數:{}", value, score);
}
logger.debug("zset1所有值值:{}", rangeWithScores2);
for (TypedTuple<String> object : rangeWithScores2) {
Double score = object.getScore();
String value = object.getValue();
logger.debug("值:{}, 分數:{}", value, score);
}
// 6.交集,分數相加
opsForZSet.intersectAndStore("zset1", "zset2", "inter_zset");
Set<TypedTuple<String>> inter_zset = opsForZSet.rangeWithScores("inter_zset", 0, -1);
logger.debug("zset1所有值值:{}", inter_zset);
for (TypedTuple<String> object : inter_zset) {
Double score = object.getScore();
String value = object.getValue();
logger.debug("值:{}, 分數:{}", value, score);
}
}
}
視覺化工具 redis-desktop-manager下載
redis-desktop-manager-0.9.99.zip工具下載:
連結:https://pan.baidu.com/s/1BB-MvTfx6T1SDD_eq5tq5w
提取碼:snby
視覺化工具觀察
相關文章
- redis原始碼分析(七)、redis命令學習總結—Redis 有序集合(sorted set)Redis原始碼
- Redis 有序集合(sorted set)Redis
- Redis的有序集合(sorted set)Redis
- Redis 入門指南九:Redis 有序集合(sorted set)Redis
- Redis有序集合學習Redis
- [Redis 系列]redis 學習四,set 集合,hash 雜湊,zset 有序集合初步認知Redis
- 【Redis 系列】redis 學習四,set 集合,hash 雜湊,zset 有序集合初步認知Redis
- redis學習之有序集合Redis
- Redis 入門 - 3(集合 set、有序集合 sort set)Redis
- redis有序集合型別sort setRedis型別
- 【Redis 系列】redis 學習十四,sorted_set 初步探究梳理Redis
- redis有序集合Redis
- Redis 有序集合Redis
- (免費領取紅包封面)【Redis 系列】redis 學習四,set 集合,hash 雜湊,zset 有序集合初步認知Redis
- (免費領取紅包封面)[Redis 系列]redis 學習四,set 集合,hash 雜湊,zset 有序集合初步認知Redis
- redis原始碼分析(六)、redis命令學習總結—Redis 集合(Set)Redis原始碼
- Python&Redis 無序集合set、有序集合zset操作PythonRedis
- Redis有序集合命令Redis
- Redis有序集合物件Redis物件
- Redis有序集合操作Redis
- Redis有序集合原理Redis
- Redis-Redis實戰(有序集合)Redis
- Redis有序集合詳解Redis
- Redis物件——有序集合(ZSet)Redis物件
- 《Redis實戰》筆記-Redis的有序集合Redis筆記
- redis 簡單使用(Sorted-Set)Redis
- redis-10.sorted_set型別Redis型別
- php操作redis,有序集合zsetPHPRedis
- Redis雜湊與有序集合Redis
- Redis 有序集合(zset)命令詳解Redis
- 【Redis實戰】有序集合型別Redis型別
- go操作redis的有序集合(zset)GoRedis
- Redis的集合型別(Set)Redis型別
- 《閒扯Redis十一》Redis 有序集合物件底層實現Redis物件
- redis有序集合實現實時排名Redis
- Redis 資料庫之有序集合(zset)Redis資料庫
- Redis 學習筆記(篇七):Redis 持久化Redis筆記持久化
- Redis探索之旅(10)- Redis資料結構之有序集合Redis資料結構