简单认识 redis -数据类型命令
一.Redis 键(key) 不能存在相同名称的key
//SET KEY_NAME value 设置一个键
127.0.0.1:6379> set runoobkey redis
OK
127.0.0.1:6379> get runoobkey redis
"redis"
//DEL KEY_NAME 删除键
127.0.0.1:6379> DEL redis
(integer) 0
127.0.0.1:6379> DEL runoobkey
(integer) 1
DUMP KEY_NAME 用于序列化给定 key ,并返回被序列化的值。
127.0.0.1:6379> SET greeting "hello, dumping world!"
OK
127.0.0.1:6379> DUMP greeting
"\x00\x15hello, dumping world!\t\x00\x03\xbfc\xcey\xa1\x9e\xfc"
EXISTS KEY_NAM 用于检查给定 key 是否存在。存在返回1
127.0.0.1:6379> exists greeting
(integer) 1
Expire KEY_NAME TIME_IN_SECONDS 用于设置 key 的过期时间,key 过期后将不再可用。单位以秒计。
127.0.0.1:6379> SET runooobkey redis
OK
127.0.0.1:6379> EXPIRE runooobkey 60
(integer) 1
127.0.0.1:6379>
Expireat KEY_NAME TIME_IN_UNIX_TIMESTAMP 用于设置 key 的过期时间,key 过期后将不再可用。单位以时间戳格式。
127.0.0.1:6379> SET runooobkey redis
OK
127.0.0.1:6379> expireat runooobkey 123554332
(integer) 1
KYS PATTERN 找所有符合给定模式 pattern 的 key
RANDOMKEY 从当前数据库中随机返回一个 key 。
127.0.0.1:6379> set run1 redis
OK
127.0.0.1:6379> set run2 redis2
OK
127.0.0.1:6379> set run3 redis3
OK
127.0.0.1:6379> keys run*
1) "run3"
2) "run1"
3) "run2"
127.0.0.1:6379>
127.0.0.1:6379> randomkey
"run2"
127.0.0.1:6379> randomkey
"run2"
127.0.0.1:6379>
127.0.0.1:6379> randomkey
"run3"
127.0.0.1:6379> randomkey
"run3"
127.0.0.1:6379>
MOVE KEY_NAME DESTINATION_DATABASE 将当前数据库的 key 移动到给定的数据库 db 当中。
127.0.0.1:6379> select 0
OK
127.0.0.1:6379> set song "db1"
OK
127.0.0.1:6379> MOVE song 1
(integer) 1
127.0.0.1:6379> exists song
(integer) 0
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> exists song
(integer) 1
PERSIST KEY_NAME 用于移除给定 key 的过期时间,使得 key 永不过期。
TTL KEY_NAME 返回 key 的剩余过期时间。
PTTL KEY_NAME 以毫秒为单位返回 key 的剩余过期时间。当 key 不存在时,返回 -2 。
127.0.0.1:6379> expire run2 50
(integer) 1
127.0.0.1:6379> TTl run2
(integer) 44
127.0.0.1:6379> persist run2
(integer) 1
127.0.0.1:6379> TTl run2
(integer) -1
RENAME OLD_KEY_NAME NEW_KEY_NAME 用于修改 key 的名称 。
127.0.0.1:6379> rename greeting run4
OK
127.0.0.1:6379> keys *
1) "run3"
2) "run4"
3) "run2"
SCAN cursor [MATCH pattern] [COUNT count]
SCAN 命令是一个基于游标的迭代器,每次被调用之后, 都会向用户返回一个新的游标, 用户在下次迭代时需要使用这个新游标作为 SCAN 命令的游标参数, 以此来延续之前的迭代过程。
- cursor - 游标。
- pattern - 匹配的模式。
- count - 可选,用于指定每次迭代返回的 key 的数量,默认值为 10 。
127.0.0.1:6379> scan 1
1) "0"
2) 1) "run4"2) "run2"
127.0.0.1:6379> scan 0
1) "0"
2) 1) "run3"2) "run4"3) "run2"
TYPE KEY_NAME 用于返回 key 所储存的值的类型。返回 key 的数据类型,数据类型有:
- none (key不存在)
- string (字符串)
- list (列表)
- set (集合)
- zset (有序集)
- hash (哈希表)
127.0.0.1:6379> type run2
string
127.0.0.1:6379> set
(error) ERR wrong number of arguments for 'set' command
127.0.0.1:6379> set run1 "ddl"
OK
127.0.0.1:6379> type run2
string
127.0.0.1:6379> type run1
string
127.0.0.1:6379> get run2
"redis2"
127.0.0.1:6379> lpush run5 "a,b,c,d,e,f,g"
(integer) 1
127.0.0.1:6379> type run5
list
127.0.0.1:6379>
二.Redis 字符串(String)
SET KEY_NAME VALUE GET KEY_NAMEGETRANGE KEY_NAME start end 用于获取存储在指定 key 中字符串的子字符串。
127.0.0.1:6379> set run1 "redis"
OK
127.0.0.1:6379> getrange run1 0 2
"red"
127.0.0.1:6379>
GETSET KEY_NAME VALUE 用于设置指定 key 的值,并返回 key 的旧值。GETBIT KEY_NAME OFFSET 用于对 key 所储存的字符串值,获取指定偏移量上的位(bit)。Setbit KEY_NAME OFFSET 用于对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。MGET KEY1 KEY2 .. KEYN 返回所有(一个或多个)给定 key 的值。 如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil 。
127.0.0.1:6379> getset run1 "redis123"
"redis"
127.0.0.1:6379> getbit run1 1
(integer) 1
127.0.0.1:6379> set run2 "redis456"
OK
127.0.0.1:6379> mget run1 run2
1) "redis123"
2) "redis456"
127.0.0.1:6379>
SETEX KEY_NAME TIMEOUT VALUE 指定的 key 设置值及其过期时间。如果 key 已经存在, SETEX 命令将会替换旧的值。
PSETEX key1 EXPIRY_IN_MILLISECONDS value1 以毫秒为单位设置 key 的生存时间。
SETRANGE KEY_NAME OFFSET VALUE 用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始。
SETNX KEY_NAME VALUE 指定的 key 不存在时,为 key 设置指定的值。
STRLEN KEY_NAME 获取指定 key 所储存的字符串值的长度。
MSET key1 value1 key2 value2 .. keyN valueN 用于同时设置一个或多个 key-value 对。MSETNX key1 value1 key2 value2 .. keyN valueN 用于所有给定 key 都不存在时,同时设置一个或多个 key-value 对。
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> set run1 "001"
OK
127.0.0.1:6379[1]> setrange run1 1 "1"
(integer) 3
127.0.0.1:6379[1]> get run1
"011"
127.0.0.1:6379[1]> exists run2
(integer) 0
127.0.0.1:6379[1]> setnx run2 "002"
(integer) 1
127.0.0.1:6379[1]> setnx run1 "002"
(integer) 0
127.0.0.1:6379[1]> get run1
"011"
127.0.0.1:6379[1]> psetex run1 1000 "hello"
OK
127.0.0.1:6379[1]> PTTL run2
(integer) 5509127.0.0.1:6379[1]> mset run1 run2
OK
127.0.0.1:6379[1]> get run1
"run2"127.0.0.1:6379[1]> msetnx run3 "1" run4 "2"
(integer) 1
127.0.0.1:6379[1]> get run3
"1"
127.0.0.1:6379[1]> get run4
"2"
127.0.0.1:6379[1]>127.0.0.1:6379[1]> set run2 "run3"
OK
127.0.0.1:6379[1]> get run2
"run3"127.0.0.1:6379[1]> strlen run1
(integer) 4
127.0.0.1:6379[1]> get run1
"run2"
127.0.0.1:6379[1]>
INCR KEY_NAME 将 key 中储存的数字值增一。key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。
INCRBY KEY_NAME INCR_AMOUNT 将 key 中储存的数字加上指定的增量值。
INCRBYFLOAT KEY_NAME INCR_AMOUNT 为 key 中所储存的值加上指定的浮点数增量值。
DECR KEY_NAME 将 key 中储存的数字值减一。
DECRBY KEY_NAME DECREMENT_AMOUNT key 所储存的值减去指定的减量值。
APPEND KEY_NAME NEW_VALUE 用于为指定的 key 追加值。
127.0.0.1:6379[1]> set run1 1
OK
127.0.0.1:6379[1]> get run1
"1"
127.0.0.1:6379[1]> incr run1
(integer) 2
127.0.0.1:6379[1]> get run6
(nil)
127.0.0.1:6379[1]> incr run6
(integer) 1
1127.0.0.1:6379[1]> incrby run6 10
(integer) 11
127.0.0.1:6379[1]> incrbyfloat run6 1.2
"12.19999999999999929"
127.0.0.1:6379[1]>
127.0.0.1:6379[1]> decr run1
(integer) 0
127.0.0.1:6379[1]> decr run1
(integer) -1127.0.0.1:6379[1]> decrby run1 10
(integer) -11127.0.0.1:6379[1]> get run7
(nil)
127.0.0.1:6379[1]> append run7 "100"
(integer) 3
127.0.0.1:6379[1]> get run7
"100"
127.0.0.1:6379[1]> get run6
"12.19999999999999929"
127.0.0.1:6379[1]> append run6 "100"
(integer) 23
127.0.0.1:6379[1]> get run6
"12.19999999999999929
三.Redis 哈希(Hash)
是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。 可以存储 232 - 1 键值对
HSET KEY_NAME FIELD_NAME "foo" 创建一个哈希键字段
HDEL KEY_NAME FIELD1.. FIELDN 删除哈希表 key 中的一个或多个指定字段,不存在的字段将被忽略。
HGET KEY_NAME FIELD_NAME 令用于返回哈希表中指定字段的值。
HINCRBY KEY_NAME FIELD_NAME INCR_BY_NUMBER 用于为哈希表中的字段值加上指定增量值。
HINCRBYFLOAT KEY_NAME FIELD_NAME increment 用于为哈希表中的字段值加上指定浮点数增量值。
HKEYS KEY_NAME 用于获取哈希表中的所有域(field)。
HMGET KEY_NAME FIELD1...FIELDN 用于返回哈希表中,一个或多个给定字段的值。
HLEN KEY_NAME 用于获取哈希表中字段的数量。
HMSET KEY_NAME FIELD1 VALUE1 ...FIELDN VALUEN 用于同时将多个 field-value (字段-值)对设置到哈希表中。
127.0.0.1:6379[1]> hset run1 field1 "foot"
(integer) 0
127.0.0.1:6379[1]> hget run1 field1
"foot"127.0.0.1:6379[1]> hget run1 cield1
(nil)
127.0.0.1:6379[1]> hsetnx run1 cield1 "qwert"
(integer) 1127.0.0.1:6379[1]> hvals run1
1) "foot"
2) "5"
3) "3.10000000000000009"
4) "1"
5) "qwert"
127.0.0.1:6379[1]>
HSET KEY_NAME FIELD VALUE 用于为哈希表中的字段赋值 。
HSETNX KEY_NAME FIELD VALUE 用于为哈希表中不存在的的字段赋值 。
HVALS KEY_NAME 返回哈希表所有的值。
127.0.0.1:6379[1]> Hset run1 field1 "foo"
(integer) 1
127.0.0.1:6379[1]> Hdel run1 field1
(integer) 1127.0.0.1:6379[1]> hset run1 field1 "foo1"
(integer) 0
127.0.0.1:6379[1]> hset run1 field2 "foo1"
(integer) 1
127.0.0.1:6379[1]> hset run1 field3 "foo1"
(integer) 1127.0.0.1:6379[1]> hexists run1 field1
(integer) 1127.0.0.1:6379[1]> hget run1 field1
"foo1"
127.0.0.1:6379[1]> hset run1 field2 5
(integer) 0
127.0.0.1:6379[1]> hincrby run1 dield2 1
(integer) 1
127.0.0.1:6379[1]> hget run1 field2
"5"
127.0.0.1:6379[1]> hset run1 field3 "1"
(integer) 0
127.0.0.1:6379[1]> hget run1 field3
"1"
127.0.0.1:6379[1]> hincrby run1 field3 2
(integer) 3
127.0.0.1:6379[1]> hget run1 field3
"3"
127.0.0.1:6379[1]> hincrby run1 field3 -2
(integer) 1
127.0.0.1:6379[1]> hget run1 field3
"1"
127.0.0.1:6379[1]> hincrbyfloat run1 field3 2.1
"3.10000000000000009"127.0.0.1:6379[1]> hkeys run1
1) "field1"
2) "field2"
3) "field3"
4) "dield2"127.0.0.1:6379[1]> hlen run1
(integer) 4127.0.0.1:6379[1]> hmget run1 field1 field2 field3 dield2
1) "foo1"
2) "5"
3) "3.10000000000000009"
4) "1"
127.0.0.1:6379[1]> HMSET myhash field1 "Hello" field2 "World"
OK127.0.0.1:6379[1]> hkeys myhash
1) "field1"
2) "field2"
HSCAN KEY_NAME cursor [MATCH pattern] [COUNT count] 用于迭代哈希表中的键值对。
- cursor - 游标。
- pattern - 匹配的模式。
- count - 指定从数据集里返回多少元素,默认值为 10 。
127.0.0.1:6379[1]> HSCAN run1 0
1) "0"
2) 1) "field1"2) "foot"3) "field2"4) "5"5) "field3"6) "3.10000000000000009"7) "dield2"8) "1"9) "cield1"10) "qwert"
四. Redis 列表(List)
lpush kye_mame value 给列表插入键
BLPOP LIST1 LIST2 .. LISTN TIMEOUT 移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
127.0.0.1:6379[3]> lpush run1 "l1"
(integer) 1
127.0.0.1:6379[3]> lpush run1 "l2"
(integer) 2
127.0.0.1:6379[3]> lpush run1 "l3"
(integer) 3
127.0.0.1:6379[3]> blpop run1 run2 run3 10
1) "run1"
2) "l3"
127.0.0.1:6379[3]> blpop run1 100
(nil)
(100.07s)
127.0.0.1:6379[3]> lpush run2 "l1" "l2" "l3"
(integer) 3
127.0.0.1:6379[3]> bRpop run1 10
1) "run1"
2) "l2"
127.0.0.1:6379[3]> bRpop run2 10
1) "run2"
2) "l1"
LINDEX KEY_NAME INDEX_POSITION 用于通过索引获取列表中的元素。你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
BRPOPLPUSH LIST1 ANOTHER_LIST TIMEOUT 从列表中取出最后一个元素,并插入到另外一个列表的头部; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
LINSERT key BEFORE|AFTER pivot value 用于在列表的元素前或者后插入元素。当指定元素不存在于列表中时,不执行任何操作。
LRANGE KEY_NAME START END 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
127.0.0.1:6379[3]> lpush run1 "l1" "l2" "l3"
(integer) 3
127.0.0.1:6379[3]> lindex run1 0
"l3"
127.0.0.1:6379[3]> lindex run1 1
"l2"
127.0.0.1:6379[3]> lindex run1 2
"l1"
127.0.0.1:6379[3]> lindex run1 -2
"l2"
127.0.0.1:6379[3]> lpush run2 "l4" "l5" "l6"
(integer) 3
127.0.0.1:6379[3]> brpoplpush run1 run2 100127.0.0.1:6379[3]> rpush run1 "hello" "word"
(integer) 4
127.0.0.1:6379[3]> linsert run1 after "word" "l5"
(integer) 5
127.0.0.1:6379[3]> lrange run1 0 -1
1) "l3"
2) "l2"
3) "hello"
4) "word"
5) "l5"
127.0.0.1:6379[3]> linsert run1 before "word" "l5"
(integer) 6
127.0.0.1:6379[3]> lrange run1 0 -1
1) "l3"
2) "l2"
3) "hello"
4) "l5"
5) "word"
6) "l5"
127.0.0.1:6379[3]>
LLEN KEY_NAME 用于返回列表的长度。Lpop KEY_NAME 用于移除并返回列表的第一个元素。LPUSH KEY_NAME VALUE1.. VALUEN 将一个或多个值插入到列表头部LPUSH KEY_NAME VALUE1..VALUEN 将一个或多个值插入到列表的尾部(最右边)。LREM key count VALUE 根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素。
- count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT 。
- count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值。
- count = 0 : 移除表中所有与 VALUE 相等的值。
127.0.0.1:6379[3]> llen run1
(integer) 6127.0.0.1:6379[3]> lpop run1
"l3"
127.0.0.1:6379[3]> lrange run1 0 -1
1) "l2"
2) "hello"
3) "l5"
4) "word"
5) "l5"127.0.0.1:6379[3]> lpush run1 "l3"
(integer) 6
127.0.0.1:6379[3]> lrange run1 0 -1
1) "l3"
2) "l2"
3) "hello"
4) "l5"
5) "word"
6) "l5"127.0.0.1:6379[3]> lpush run1 "l5"
(integer) 7
127.0.0.1:6379[3]> lrange run1 0 -1
1) "l5"
2) "l3"
3) "l2"
4) "hello"
5) "l5"
6) "word"
7) "l5"127.0.0.1:6379[3]> lrem run1 -2 "l5"
(integer) 2
127.0.0.1:6379[3]> lrange run1 0 -1
1) "l5"
2) "l3"
3) "l2"
4) "hello"
5) "word"
LSET KEY_NAME INDEX VALUE 通过索引来设置元素的值。
LTRIM KEY_NAME START STOP 让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。
RPOP KEY_NAME 用于移除列表的最后一个元素,返回值为移除的元素。
RPOPLPUSH SOURCE_KEY_NAME DESTINATION_KEY_NAME 用于移除列表的最后一个元素,并将该元素添加到另一个列表并返回。
RPUSHX KEY_NAME VALUE1..VALUEN 将一个值插入到已存在的列表尾部(最右边)。
127.0.0.1:6379[3]> lset run1 0 "change"
OK
127.0.0.1:6379[3]> lrange run1 0 -1
1) "change"
2) "l3"
3) "l2"
4) "hello"
5) "word"127.0.0.1:6379[3]> ltrim run1 0 3
OK
127.0.0.1:6379[3]> lrange run1 0 -1
1) "change"
2) "l3"
3) "l2"
4) "hello"127.0.0.1:6379[3]> rpop run1
"hello"
127.0.0.1:6379[3]> lrange run1 0 -1
1) "change"
2) "l3"
3) "l2"
127.0.0.1:6379[3]> lrange run2 0 -1
1) "l1"
2) "l6"
3) "l5"
4) "l4"127.0.0.1:6379[3]> rpoplpush run1 run2
"l2"
127.0.0.1:6379[3]> lrange run1 0 -1
1) "change"
2) "l3"
127.0.0.1:6379[3]> lrange run2 0 -1
1) "l2"
2) "l1"
3) "l6"
4) "l5"
5) "l4"127.0.0.1:6379[3]> rpushx run1 "l4"
(integer) 3
127.0.0.1:6379[3]> lrange run1 0 -1
1) "change"
2) "l3"
3) "l4"
五.Redis 集合(Set)
Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。集合对象的编码可以是 intset 或者 hashtable。
Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
集合中最大的成员数为 2^32- 1 (4294967295, 每个集合可存储40多亿个成员)。
SADD KEY_NAME VALUE1..VALUEN 将一个或多个成员元素加入到集合中,已经存在于集合的成员元素将被忽略。
SCARD KEY_NAME 返回集合中元素的数量。
SDIFF FIRST_KEY OTHER_KEY1..OTHER_KEYN 返回第一个集合与其他集合之间的差异,也可以认为说第一个集合中独有的元素。不存在的集合 key 将视为空集。
SINTER KEY KEY1..KEYN 返回给定所有给定集合的交集。 不存在的集合 key 被视为空集。 当给定集合当中有一个空集时,结果也为空集(根据集合运算定律)。
SINTERSTORE DESTINATION_KEY KEY KEY1..KEYN 令将给定集合之间的交集存储在指定的集合中。如果指定的集合已经存在,则将其覆盖。
SISMEMBER KEY VALUE 判断成员元素是否是集合的成员。
SMOVE SOURCE DESTINATION MEMBER 将指定成员 member 元素从 source 集合移动到 destination 集合。
SPOP key [count] 于移除集合中的指定 key 的一个或多个随机元素,移除后会返回移除的元素。
127.0.0.1:6379[3]> select 4
OK
//SADD KEY_NAME VALUE1..VALUEN 将一个或多个成员元素加入到集合中,已经存在于集合的成员元素将被忽略。
127.0.0.1:6379[4]> sadd run1 a b c d
(integer) 4
127.0.0.1:6379[4]> sadd run2 a c
(integer) 2
127.0.0.1:6379[4]> sadd run3 c
(integer) 1
//
127.0.0.1:6379[4]> scard run1
(integer) 4
127.0.0.1:6379[4]> scard run2
(integer) 2
//
127.0.0.1:6379[4]> sdiff run1 run2
1) "b"
2) "d"
//
127.0.0.1:6379[4]> sinter run1 run2
1) "c"
2) "a"
//
127.0.0.1:6379[4]> sinterstore run3 run1 run2
(integer) 2
127.0.0.1:6379[4]> sismember run3 a
(integer) 1
127.0.0.1:6379[4]> sismember run3 c
(integer) 1
//
127.0.0.1:6379[4]> smove run1 run3 b
(integer) 1
127.0.0.1:6379[4]> sismember run3 b
(integer) 1
//
127.0.0.1:6379[4]> spop run1 1
1) "c"
SRANDMEMBER KEY [count] 用于返回集合中的一个随机元素。
SREM KEY MEMBER1..MEMBERN 用于移除集合中的一个或多个成员元素,不存在的成员元素会被忽略。
SUNION KEY KEY1..KEYN 返回给定集合的并集。不存在的集合 key 被视为空集。
SUNIONSTORE destination key [key ...] 将给定集合的并集存储在指定的集合 destination 中。如果 destination 已经存在,则将其覆盖。
SSCAN key cursor [MATCH pattern] [COUNT count] 用于迭代集合中键的元素,Sscan 继承自 Scan。
- cursor - 游标。
- pattern - 匹配的模式。
- count - 指定从数据集里返回多少元素,默认值为 10 。
127.0.0.1:6379[4]> srandmember run1
"a"127.0.0.1:6379[4]> srem run1 a
(integer) 1127.0.0.1:6379[4]> sunion run1 run2
1) "d"
2) "a"
3) "c"127.0.0.1:6379[4]> sunionstore run2 run1
(integer) 1127.0.0.1:6379[4]> sscan run1 0
1) "0"
2) 1) "d"
127.0.0.1:6379[4]> sscan run1 0 match r
1) "0"
2) (empty list or set)
六.Redis 有序集合命令
Redis 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。 集合中最大的成员数为 2^32 - 1 。
ZADD KEY_NAME SCORE1 VALUE1.. SCOREN VALUEN 于将一个或多个成员元素及其分数值加入到有序集当中。
ZCOUNT KEY_NAME min max 用于计算有序集合中指定分数区间的成员数量。
ZINCRBY KEY_NAME increment member 对有序集合中指定成员的分数加上增量 increment,可以通过传递一个负数值 increment ,让分数减去相应的值,比如 ZINCRBY key -5 member ,就是让 member 的 score 值减去 5 。
ZSCORE KEY_NAME member 返回有序集中,成员的分数值。
ZREVRANK KEY_NAME member 返回有序集中成员的排名。其中有序集成员按分数值递减(从大到小)排序。排名以 0 为底,也就是说, 分数值最大的成员排名为 0 。
ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count] 返回有序集中指定分数区间内的所有的成员。有序集成员按分数值递减(从大到小)的次序排列。具有相同分数值的成员按字典序的逆序(reverse lexicographical order )排列。
ZREVRANGE KEY_NAME start stop [WITHSCORES] 返回有序集中,指定区间内的成员。成员的位置按分数值递减(从大到小)来排列。有相同分数值的成员按字典序的逆序(reverse lexicographical order)排列。
127.0.0.1:6379[4]> zadd top1 1 a 1 b 2 c 3 d 3 e
(integer) 5127.0.0.1:6379[4]> zcount top1 1 3
(integer) 5127.0.0.1:6379[4]> zincrby top1 -1 a
"0"127.0.0.1:6379[4]> zscore top1 d
"3"127.0.0.1:6379[4]> zrevrank top1 a
(integer) 4127.0.0.1:6379[4]> zrevrangebyscore top1 3 1
1) "e"
2) "d"
3) "c"
4) "b"127.0.0.1:6379[4]> zrevrange top1 1 3
1) "d"
2) "c"
3) "b"
ZINTERSTORE destination numkeys KEY_NAME [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE sum|min|max]
destination
:结果有序集合的名称。numkeys
:要计算交集的有序集合的数量。key
:参与计算的有序集合的名称。WEIGHTS weight [weight ...]
:指定每个有序集合的权重。默认权重为 1。AGGREGATE sum|min|max
:指定交集结果的聚合方式。默认是sum
(求和)。
127.0.0.1:6379[4]> zrange top1 0 -1
1) "a"
2) "b"
3) "j"
4) "c"
5) "g"
6) "d"
7) "e"
8) "h"
127.0.0.1:6379[4]> zrange top2 0 -1
1) "f"
2) "g"
3) "h"
4) "k"
5) "j"
127.0.0.1:6379[4]> zinterstore top 2 top1 top2
(integer) 3
127.0.0.1:6379[4]> zrange top 0 -1
1) "g"
2) "j"
3) "h"
ZLEXCOUNT KEY_NAME MIN MAX 计算有序集合中指定字典区间内成员数量。
ZRANGEBYLEX KEY_NAME min max [LIMIT offset count] 用于在有序集合(sorted set)中按照字典序(lexicographical order)获取指定范围内的成员。
key
:键名,指定要操作的有序集合。min
和max
:字典序范围的边界值。这两个值可以是负无穷大(-
)或正无穷大(+
),也可以是具体的字符串值。字符串值表示有序集合中成员的字典序边界。LIMIT offset count
:可选参数,用于限制返回结果的数量。offset
表示跳过前面多少个元素,count
表示返回多少个元素。
ZRANGEBYSCORE KEY_NAME min max [WITHSCORES] [LIMIT offset count] 返回有序集合中指定分数区间的成员列表。有序集成员按分数值递增(从小到大)次序排列。 &&&& ZRANGEBYSCORE zset (1 5 返回所有符合条件 1 < score <= 5 的成员,而
ZRANGE KEY_NAME start stop [WITHSCORES] 返回有序集中,指定区间内的成员。其中成员的位置按分数值递增(从小到大)来排序。
127.0.0.1:6379[4]> zlexcount top3 - +
(integer) 6127.0.0.1:6379[4]> zrangebylex top3 - +
1) "a"
2) "b"
3) "c"
4) "d"
5) "h"
6) "j"127.0.0.1:6379[4]> zrangebyscore top3 0 4
1) "a"
2) "b"
3) "c"
4) "d"
5) "h"
6) "j"127.0.0.1:6379[4]> zrange top3 0 4
1) "a"
2) "b"
3) "c"
4) "d"
5) "h"
ZREM KEY_NAME member [member ...] 用于移除有序集中的一个或多个成员,不存在的成员将被忽略。
ZREMRANGEBYLEX KEY_NAME min max 用于移除有序集合中给定的字典区间的所有成员。
ZREMRANGEBYRANK KEY_NAME start stop 用于移除有序集中,指定排名(rank)区间内的所有成员。
ZREMRANGEBYSCORE KEY_NAME min max 用于移除有序集中,指定分数(score)区间内的所有成员。
127.0.0.1:6379[4]> zrange top3 0 4
1) "a"
2) "b"
3) "c"
4) "d"
5) "h"
127.0.0.1:6379[4]> zrem top3 j a
(integer) 2
127.0.0.1:6379[4]> zrange top3 0 -1
1) "b"
2) "c"
3) "d"
4) "h"
127.0.0.1:6379[4]> zremrangebylex top3 [b [c
(integer) 2
127.0.0.1:6379[4]> zrange top3 0 -1
1) "d"
2) "h"
127.0.0.1:6379[4]> zremrangebyrank top3 1 3
(integer) 1
127.0.0.1:6379[4]> zrange top3 0 -1
1) "d"
127.0.0.1:6379[4]> zremrangebyscore top3 0 4
(integer) 1
127.0.0.1:6379[4]> zrange top3 0 -1
(empty list or set)
ZSCAN KEY_NAME cursor [MATCH pattern] [COUNT count] 于迭代有序集合中的元素(包括元素成员和元素分值)
- cursor - 游标。
- pattern - 匹配的模式。
- count - 指定从数据集里返回多少元素,默认值为 10 。
127.0.0.1:6379[4]> zscan top2 0
1) "0"
2) 1) "f"2) "1"3) "g"4) "2"5) "h"6) "3"7) "k"8) "3"9) "j"10) "4"
相关文章:
简单认识 redis -数据类型命令
一.Redis 键(key) 不能存在相同名称的key //SET KEY_NAME value 设置一个键 127.0.0.1:6379> set runoobkey redis OK 127.0.0.1:6379> get runoobkey redis "redis" //DEL KEY_NAME 删除键 127.0.0.1:6379> DEL redis (integer) 0 127.0.0.1:6379>…...

Python 语言学习——应用1.2 数字图像处理(第二节,变换)
目录 1.基础知识 1.图像几何变换概念 2.图像几何变换方式 3.插值运算 4.几何变换步骤 2.各类变换 1.位置变换 2.形状变换 3.代数运算 3.实战演练 1.基础知识 1.图像几何变换概念 在图像处理过程中,为了观测需要,常常需要对 图像进行几何变换&am…...
【QT Quick】页面布局:手动定位与坐标系转换
在这篇教程中,我们将详细介绍在 QT Quick 中如何手动定位元素以及坐标系转换的概念和应用。手动定位不仅仅是指定 x、y 坐标,更涉及坐标系的管理。我们会从最基本的手动定位开始,逐步扩展到更复杂的坐标系转换操作。 坐标系 默认坐标系&…...

uniapp自定义导航,全端兼容
我们在用uniapp 开发应用的时候,有的页面需要自定义导航, 1.如果普通的直接使用uni 扩展柜组件的 uni-nav-bar 也基本够用, 2.如果稍微带点自定义的这个值无法支持的,特别在小程序端,胶囊是会压住右边的按钮的 自定…...

[论文阅读] DVQA: Understanding Data Visualizations via Question Answering
原文链接:http://arxiv.org/abs/1801.08163 启发:没太读懂这篇论文,暂时能理解的就是本文提出了一个专门针对条形图问答的数据集DVQA以及一个端到端模型SANDY,模型有两个版本,Oracle和OCR。主要解决的问题是固定词表无…...
【PostgreSQL】实战篇——数据备份和恢复的最佳实践和工具
数据备份和恢复是确保数据安全性和可用性的关键环节。无论是由于硬件故障、软件错误、数据损坏还是人为错误,能够快速恢复数据都是保护业务连续性的重要措施。 PostgreSQL 提供了多种备份和恢复工具和方法,其中最常用的包括 pg_dump、pg_restore 和点时…...
代码随想录算法训练营第二十九天|93.复原IP地址 78.子集 90.子集II
93.复原IP地址 给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。 有效的 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 . 分隔。 例如:"…...
【mysql】使用AbstractRoutingDataSource实现多数据源 与 获取mapper上注解
使用AbstractRoutingDataSource实现多数据源 与 获取mapper上注解 背景 随着业务发展速度越来越快,数据的增长也呈现倍数级别增长,数据库的压力,对于查询和写入等所有操作,都依赖于主库,其实有一些对于时效性要求不高…...
希沃冰点还原
要取消希沃冰点还原,可以按照以下步骤进行: 打开希沃冰点还原的应用或程序。 在应用或程序的界面上,寻找设置选项或菜单。 点击或选择设置选项或菜单,进入设置界面。 在设置界面上,查找“取消”或“停止”等相关选项…...
Hadoop服务端口号、Spark端口号、Hive端口号以及启动命令
文章目录 1. 服务端口号1.1 Hadoop相关的服务端口号1.2 Spark相关的服务端口号1.3 Hive的连接端口 2. 服务启动指令 1. 服务端口号 1.1 Hadoop相关的服务端口号 HDFS的web页面访问端口 9870HDFS 的程序访问端口 8020Yarn的访问端口 8088历史日志访问端口 19888 1.2 Spark相关…...

【C++】--类和对象(3)
🤑个人主页: 起名字真南 🤑个人专栏:【数据结构初阶】 【C语言】 【C】 目录 1 深入构造函数2 类型转换3 static成员4 友元函数5 内部类6 匿名对象 1 深入构造函数 之前我们实现构造函数的时候,初始化成员变量都是在函数体内赋值,…...

国外电商系统开发-运维系统文件上传-高级上传
如果您要上传文件到10台服务器中,有3台服务器的路径不是一样的,那么在这种情况下您就可以使用本功能,单独执行不一样的路径 点击【高级】上传...
【MongoDB】mongodb | 部署 | 常用命令
一、概述 基于mongodb的tcp连接无数据上报,服务器强踢监测。 物联网项目,tcp协议,基于4G卡,设备由于某些原因会断开重连,但是tcp没有断开,导致tcp持续累加,浪费资源。 建立机制: 当t…...

【Chrome浏览器插件--资源嗅探猫抓】
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、资源嗅探插件---猫抓二、使用步骤总结 一、资源嗅探插件—猫抓 猫抓是一个浏览器插件,可以检测当前网页中的一些资源文件,可设置嗅探的…...
2.4Mybatis——缓存机制
2.4Mybatis——缓存机制 缓存配置一二级缓存一级缓存二级缓存 合集总览:Mybatis框架梳理 讲真,Mybatis缓存这块的记忆已经模糊了。刚好此时写测试用例出现一个BUG,就以这个问题作为切入点来梳理一下。 Testpublic void test(){Address ad…...

移动技术开发:文件的读取
1 实验名称 文件的读写 2 实验目的 掌握Android中读写文件的实现方法。 3 实验源代码 布局文件代码: <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android&quo…...
Linux 中的 Makefile 伪目标详解
在 Linux 环境中,Makefile 是构建项目的重要工具,它通过定义规则,指导 make 工具如何编译和链接程序。通常我们会在 Makefile 中定义目标(target),这些目标通常对应文件名。然而,有一种特殊类型…...

Java基础(中)
变量 成员变量与局部变量的区别 语法形式:从语法形式上看,成员变量是属于类的,而局部变量是在代码块或方法中定义的变量或是方法的参数;成员变量可以被 public,private,static 等修饰符所修饰,而局部变量不能被访问控…...
Leetcode热题100-200 岛屿数量
Leetcode热题100-200 岛屿数量 1. 题目描述2. 代码实现1. dfs算法2. bfs算法 1. 题目描述 200 岛屿数量 2. 代码实现 1. dfs算法 class Solution { public:int numIslands(vector<vector<char>>& grid) {int m grid.size(), n grid[0].size();int res 0…...

大数据新视界 --大数据大厂之 GraphQL 在大数据查询中的创新应用:优化数据获取效率
💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...

利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...

docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...

汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

关于easyexcel动态下拉选问题处理
前些日子突然碰到一个问题,说是客户的导入文件模版想支持部分导入内容的下拉选,于是我就找了easyexcel官网寻找解决方案,并没有找到合适的方案,没办法只能自己动手并分享出来,针对Java生成Excel下拉菜单时因选项过多导…...

Chrome 浏览器前端与客户端双向通信实战
Chrome 前端(即页面 JS / Web UI)与客户端(C 后端)的交互机制,是 Chromium 架构中非常核心的一环。下面我将按常见场景,从通道、流程、技术栈几个角度做一套完整的分析,特别适合你这种在分析和改…...
pycharm 设置环境出错
pycharm 设置环境出错 pycharm 新建项目,设置虚拟环境,出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...