redis基礎指令及數據類型

全局指令
redis有5種數據類型,它們是鍵值對中的值,對於鍵來講有些通用的命令。這裏稱之爲全局指令。
set 建立一個鍵值對java

127.0.0.1:6379> set a 1

mset 建立多個鍵值對python

127.0.0.1:6379> mset a 1 b 2 c 3
OK

get 經過鍵來得到值mysql

127.0.0.1:6379> get a

mget 獲取多個鍵值git

127.0.0.1:6379> mget a b c
1) "1"
2) "2"
3) "3"

dbsize 統計鍵的個數
注:dbsize是經過數據庫內置的計數器來實現的,並非將全部鍵遍歷後統計的,沒必要擔憂影響服務器的性能。redis

127.0.0.1:6379> dbsize

exists 檢查某個鍵是否存在,存在返回1,不存在返回0算法

127.0.0.1:6379> exists a   # 鍵 a存在
(integer) 1
127.0.0.1:6379> exists d    # 鍵 d 不存在
(integer) 0

del 刪除指定鍵,成功返回1,沒有指定鍵返回0sql

127.0.0.1:6379> del mylist    # 刪除單個鍵
127.0.0.1:6379> del a b       # 刪除多個鍵

expire 設置鍵過時,以秒爲單位shell

127.0.0.1:6379> set hello world   #設置一個鍵
127.0.0.1:6379> expire hello 50   #設置鍵50秒後過時
(integer) 1
127.0.0.1:6379> get hello   #在過時以前能夠查詢到鍵值
"world"
127.0.0.1:6379> ttl hello     # 使用ttl指令查看鍵的失效時間
(integer) 38
127.0.0.1:6379> ttl hello    # -2:表示鍵不存在
(integer) -2
127.0.0.1:6379> get hello    # 查詢不到鍵值了
(nil)

關於ttl指令查詢的返回值:數據庫

大於0:鍵剩餘的過時時間;
-1:鍵沒設置過時時間;
-2:鍵不存在或已過時;編程

expireat 設置過時時間,以unix時間戳爲單位

127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> expireat hello 1583478533   # 最後爲unix時間戳
(integer) 1
127.0.0.1:6379> ttl hello
(integer) 1056
127.0.0.1:6379> ttl hello
(integer) 1052

rename 更改鍵名

127.0.0.1:6379> set  hello world
OK
127.0.0.1:6379> rename hello abc  # 將鍵名改成abc
OK
127.0.0.1:6379> get hello 
(nil)
127.0.0.1:6379> get abc
"world"

*keys 列出全部鍵**
這個指令生產中不建議使用,忘了就好。

127.0.0.1:6379> keys *

randomkey 隨機返回一個鍵名

127.0.0.1:6379> randomkey 
"c"
127.0.0.1:6379> randomkey 
"user:1_2:sdiff"

type 查詢鍵值的數據類型

127.0.0.1:6379> type a
string

數據類型有:

string:字符串。
hash:哈希。
list:列表。
set:集合。
zset:有序集合。

select 切換庫

redis中默認有16個庫,編號爲:0–15,配置文件中下面配置決定了庫的數量:

databases 16        # 16個庫

默認登陸後處於編號爲0的庫中,使用select指令進行切庫操做。

127.0.0.1:6379> select 12
OK
127.0.0.1:6379[12]> select 0
OK

遷移鍵
move 庫和庫內部遷移
注:move遷移後,源庫將不存在被遷移走的鍵值對。

127.0.0.1:6379> get abc
"world"
127.0.0.1:6379> move abc 12    # 遷移到編號爲12的庫
(integer) 1
127.0.0.1:6379> get abc    # 當前庫就沒有這個鍵值了
(nil)
127.0.0.1:6379> select 12    # 切換到編號爲12的庫
OK
127.0.0.1:6379[12]> get abc    # 能夠查看到鍵值
"world"

dump+restore 多個redis實例上進行遷移鍵值

  • dump:進行序列化備份,格式是rdb。
  • restore:是將dump產生的序列化的值復原,命令格式爲:restore key ttl serialized-value,其中key表示定義的新鍵名;ttl:設置過時時間,設置爲0表示永不過時;serialized-value則爲dump產生的序列化值。
# redis01實例上
127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> dump hello   # 獲取下面的序列化編碼
"\x00\x05world\t\x00\xc9#mH\x84/\x11s"
# redis02實例上
127.0.0.1:6379> restore new_hello 0 "\x00\x05world\t\x00\xc9#mH\x84/\x11s"
OK
127.0.0.1:6379> get new_hello
"world"

注:整個遷移過過程,並不是原子性。

migrate 具備原子性的遷移

命令格式:migrate host port key| destination-db timeout [COPY] [REPLACE]

host:主機IP
port:端口
key:要遷移的鍵
destination-db:要遷移到對端的哪一個編號的庫?
timeout:超時時間,單位爲毫秒
COPY:是否複製,默認爲剪切的方式
replace:migrate無論目標redis是否存在該鍵都會正常遷移進行數據覆蓋。

下面是模擬redis01主機遷移數據到redis02

# 主機redis01上,設置兩個鍵值,以不一樣的方式進行遷移
127.0.0.1:6379> set a move_test  
OK
127.0.0.1:6379> set b move_test_02
OK
127.0.0.1:6379> migrate 192.168.20.4 6379 a 0 2    # 這個不加copy,等同於剪切
OK
127.0.0.1:6379> migrate 192.168.20.4 6379 b 0 2 copy   # 加了copy,等同於複製
OK
127.0.0.1:6379> get a    # 剪切走後,本地就沒有了
(nil)
127.0.0.1:6379> get b    # 但copy的,本地還有
"move_test_02"
# 主機redis02上進行查詢,兩個鍵值對都在
[root@redis03 ~]# redis-cli
127.0.0.1:6379> get a
"move_test"
127.0.0.1:6379> get b
"move_test_02"

info 查看redis實例的詳細信息

127.0.0.1:6379> info

# Server
redis_version:5.0.5
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:94d37e8f5f58aed5
redis_mode:standalone
os:Linux 3.10.0-862.el7.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll
          ............. # 省略部份內容

redis-cli –stat 動態查看資源使用率

[root@redis ~]# redis-cli --stat   #動態刷新redis的資源使用狀況
------- data ------ --------------------- load -------------------- - child -
keys       mem      clients blocked requests            connections          
20         840.41K  1       0       25 (+0)             2           
20         840.41K  1       0       26 (+1)             2           
20         840.41K  1       0       27 (+1)             2

redis的事務

  • 事務的特色:要麼都執行,要麼都不執行。
  • 場景:user_A關注了user_B,那麼user_A的關注列表裏應該有user_B,一樣,user_B的粉絲列表中也須要有user_A,這就須要用到事務。
127.0.0.1:6379> multi   # 開啓一個事務
OK
# 插入兩條數據
127.0.0.1:6379> sadd user:a:follow user:b
QUEUED
127.0.0.1:6379> sadd user:b:follow user:a
QUEUED
# 在事務提交前,是查詢不到上面插入的兩條數據的
127.0.0.1:6379> exec    # 提交事務便可查看對應的數據
1) (integer) 1
2) (integer) 1

若是要中止事務,能夠用discard指令代替exec指令。

數據結構和內部編碼
type命令實際返回的是當前鍵的數據結構類型,但這些只是redis對外的數據結構,實際上每種數據結構都有本身底層的內部編碼實現,並且是多種實現,這樣redis會在合適的場景選擇合適的內部編碼。能夠經過object encoding命令查詢內部編碼。

127.0.0.1:6379> object encoding a
"embstr"

內部編碼以下:

  • sting(字符串)有3種:raw、int、embstr。
  • hash(哈希)有2種:hashtable、ziplist。
  • list(列表)有2種:linkedlist、ziplist。
  • set(集合)有2種:hashtable、intest。
  • zset(有序集合)有2種:skiplist、ziplist。

redis的單線程架構
redis使用單線程架構和I/O多路複用模型來實現高性能的內存數據庫服務。

redis爲何這麼快?

  • 內存型數據庫,這是redis達到每秒萬級別訪問的重要基礎。
  • 非阻塞I/O線程,Redis使用epoll做爲I/O多路複用技術的實現,再加上redis自身的事件處理模型將epoll中的鏈接、讀寫、關閉都轉換爲事件,不在網絡I/O上浪費過多的時間。
  • 單線程避免了因線程切換和競態產生的消耗。

.

單線程的好處:

  • 能夠簡化數據結構和算法的實現。
  • 單線程避免了線程切換和競態產生的消耗。

.

單線程的問題:

  • 當某一個指令執行的時間過長,其餘命令等待時間過長,形成阻塞。

redis數據類型
string 字符串

127.0.0.1:6379> set a 1     #設置a的值爲1

incr 自增(只能對數字自增)
若對值爲字符串的進行自增,則會報錯(error) ERR value is not an integer or out of range。若鍵不存在,按0開始自增。

127.0.0.1:6379> set a 1
OK
127.0.0.1:6379> incr a   # 返回自增後的值
(integer) 2
127.0.0.1:6379> get a   # 自增後a 的值爲2
"2"

incrby 自增指定數字

127.0.0.1:6379> get a
"1"
127.0.0.1:6379> incrby a 5
(integer) 6
127.0.0.1:6379> get a
"6"

incrbyfloat 自增浮點數
注:若當前值爲浮點數,則不能夠自增或自減整數,必須使用incrbyfloat將其改變爲一個整數才能夠自增或自減整數。

127.0.0.1:6379> get a
"2"
127.0.0.1:6379> incrbyfloat a 5.5
"7.5"
127.0.0.1:6379> get a
"7.5"

decr 自減

127.0.0.1:6379> decr a
(integer) 2
127.0.0.1:6379> decr a
(integer) 1
127.0.0.1:6379> get a
"1"

decrby 自減指定數值

127.0.0.1:6379> get a
"6"
127.0.0.1:6379> decrby a 4
(integer) 2
127.0.0.1:6379> get a
"2"

append 追加值
至關於把追加的值合併在原有值後面。若鍵不存在或沒有值,則會生成新的值。

127.0.0.1:6379> set a hello
OK
127.0.0.1:6379> append a " world"  # 在原有值後面追加world。
(integer) 11
127.0.0.1:6379> get a
"hello world"

strlen 統計值的長度

127.0.0.1:6379> get a
"hello world"
127.0.0.1:6379> strlen a
(integer) 11   # 由於值中間有空格,也算一位
127.0.0.1:6379> set a 張三
OK
127.0.0.1:6379> strlen a   # 一箇中文佔三個字節
(integer) 6

setrange 設置指定位置的字符

127.0.0.1:6379> set redis pest
OK
127.0.0.1:6379> setrange redis 0 b   # 0表示值的第一位,將第一位換爲b
(integer) 4
127.0.0.1:6379> get redis
"best"
127.0.0.1:6379> setrange redis 2 d   # 2表示值的第三位,將第三位換爲d
(integer) 4
127.0.0.1:6379> get redis
"bedt"

getrange 獲取部分字符串
起始數字爲0,-1表示最後一位,-2表示倒數第二位…..

127.0.0.1:6379> get redis
"bedt"
127.0.0.1:6379> getrange redis 1 -1   
"edt"
127.0.0.1:6379> getrange redis 1 2
"ed"

關於字符串的內部編碼,redis根據鍵對應的值,用如下規則選擇相應的編碼:

  • int:8字節長度的整數。
  • embstr:小於等於39個字節的字符串。
  • raw:大於39個字節的字符串。

hash 哈希類型
幾乎全部的編程語言都提供了哈希類型,它們的叫法多是哈希、字典、關聯屬組。

在redis中,哈希類型是指鍵值自己又是一種鍵值對結構,例如:value=field1,value1 …. fiedN,valueN。

哈希類型中的映射關係叫作:field-value,這裏的value是指field對應的值,不是鍵對應的值。

hset key field value 建立hash類型的數據類型

127.0.0.1:6379> hset user name tom
(integer) 1   # 返回1表示成功,0表示不成功

hget key field 獲取值

127.0.0.1:6379> hget user name
"tom"

hdel key field 刪除field

127.0.0.1:6379> hdel user name

hmset及hmget批量設置及獲取field

127.0.0.1:6379> hmset user name zhangsan age 18 hobby play city beijing
OK
127.0.0.1:6379> hmget user name age hobby age city
1) "zhangsan"
2) "18"
3) "play"
4) "18"
5) "beijing"

hexists 判斷是否存在
存在返回1,不然返回0。

127.0.0.1:6379> hexists user name
(integer) 1
127.0.0.1:6379> hexists user addr
(integer) 0

hkeys 獲取全部的field

127.0.0.1:6379> hkeys user  
1) "name"
2) "age"
3) "hobby"
4) "city"

hvals 獲取全部的value

127.0.0.1:6379> hvals user
1) "zhangsan"
2) "18"
3) "play"
4) "beijing"

hgetall 獲取全部的field及value值
注:元素越多,越容易形成阻塞。

127.0.0.1:6379> hgetall user
1) "name"
2) "zhangsan"
3) "age"
4) "18"
5) "hobby"
6) "play"
7) "city"
8) "beijing"

hincrby key field 自增數字

127.0.0.1:6379> hincrby user age 2   # age增長2
(integer) 20
127.0.0.1:6379> hget user age   
"20"

hstrlen key field 計算哈希值的長度

127.0.0.1:6379> hget user name
"zhangsan"
127.0.0.1:6379> hstrlen user name
(integer) 8   # 長度爲8

hash內部編碼
當哈希類型元素個數小於 hash-max-ziplist-entries配置(默認512個)、同時全部的值都小於hash-max-ziplist-value配置(默認64字節)時,Redis會使用ziplist做爲哈希的內部實現,ziplist使用更加緊湊的結構實現多個元素的連續存儲,因此在節省內存方面比hashtable更加優秀。

127.0.0.1:6379> hmset hashkey f1 v1 f2 v2
OK
127.0.0.1:6379> object encoding hashkey
"ziplist"

list 列表
列表是用來存儲多個有序的字符串,好比a、b、c、d、e五個元素從左到右組成了一個有序的列表,列表中的每一個字符串稱爲元素,一個列表最多能夠存儲2的32次方-1個元素。在redis中,能夠對列表兩端插入(push)和彈出(pop),還能夠獲取指定範圍的元素列表、獲取指定索引下標的元素等,列表是一種比較靈活的數據結構,能夠充當棧和隊列的角色,在實際開發上有不少應用場景。

列表類型如下有兩個特色:

  • 列表中的元素是有序的,這意味着能夠經過索引下標獲取某個元素或者某個範圍內的元素列表。
  • 列表中的元素是能夠重複的。

rpush、lpush 添加操做

127.0.0.1:6379> rpush listk c b a  # r表示右(right),從右面開始插入
(integer) 3
127.0.0.1:6379> lpush listk d e f  # l表示左(left),從左面開始插入
(integer) 6
127.0.0.1:6379> lrange listk 0 -1  # 從左到右查看第一個到最後一個全部的元素
1) "f"
2) "e"
3) "d"
4) "c"
5) "b"
6) "a"

向某個元素前或者後插入元素

127.0.0.1:6379> lrange listk 0 -1   # 查看原有數據
1) "f"
2) "e"
3) "d"
4) "c"
5) "b"
6) "a"
127.0.0.1:6379> linsert listk before b redis  # 向b後面插入redis
(integer) 7
127.0.0.1:6379> linsert listk after b python   # 向b前面插入python
(integer) 8
127.0.0.1:6379> lrange listk 0 -1   # 查看確認
1) "f"
2) "e"
3) "d"
4) "c"
5) "redis"
6) "b"
7) "python"
8) "a"

lrange 查看某個範圍內的值
下標從前日後0開始,從後往前是從-1開始。

127.0.0.1:6379> lrange listk 0 -3
1) "f"
2) "e"
3) "d"
4) "c"
5) "redis"
6) "b"

lindex 獲取列表指定索引下標的元素

127.0.0.1:6379> lindex listk 0
"f"
127.0.0.1:6379> lindex listk -3
"b"
127.0.0.1:6379> lindex listk -2
"python"

llen 獲取列表的長度

127.0.0.1:6379> llen listk
(integer) 8

lpop、rpop 刪除列表中的元素

127.0.0.1:6379> lrange listk 0 -1    # 查看原有元素
1) "f"
2) "e"
3) "d"
4) "c"
5) "redis"
6) "b"
7) "python"
8) "a"
127.0.0.1:6379> lpop listk   # 從左起,刪除一個
"f"
127.0.0.1:6379> rpop listk    # 從右起,刪除一個
"a"
127.0.0.1:6379> lrange listk 0 -1   # 最後查看數據
1) "e"
2) "d"
3) "c"
4) "redis"
5) "b"
6) "python"

lrem key count value 指定範圍內刪除指定元素

注:

  • count > 0:從左往右刪,刪多少看count的值,若是指定的count範圍內沒有指定的值,則不刪。
  • count < 0:從右往左刪,其他同上。
  • 返回0表示沒有刪除,1表示有刪除操做。
127.0.0.1:6379> lrange listk 0 -1  # 查看現有的集合
1) "e"
2) "d"
3) "c"
4) "redis"
5) "b"
6) "python"
127.0.0.1:6379> lrem listk 4 a   # 從左往右刪4個元素,若是這4個元素中沒有a,則不刪
(integer) 0   
127.0.0.1:6379> lrange listk 0 -1   # 由於從左往右,4個元素內沒有a,因此不執行刪除
1) "e"
2) "d"
3) "c"
4) "redis"
5) "b"
6) "python"
127.0.0.1:6379> lrem listk 4 d   # 換個條件
(integer) 1
127.0.0.1:6379> lrange listk 0 -1   # 由於從左往右,4個元素內有d,因此執行刪除操做
1) "e"
2) "c"
3) "redis"
4) "b"
5) "python"

ltrim key start stop 保留指定下標內的值,其他都刪除

下標:

  • 從左往右,第一個元素的下標爲0,依次爲0、一、2….
  • 從右往左,第一個元素的下標爲-1,依次爲-一、-二、-3….
127.0.0.1:6379> lrange listk 0 -1    # 查看初始值
1) "e"
2) "c"
3) "redis"
4) "b"
5) "python"
127.0.0.1:6379> ltrim listk 1 3   # 保留下標1到3的值
OK
127.0.0.1:6379> lrange listk 0 -1   # 只剩下原來下標1到3的值了
1) "c"
2) "redis"
3) "b"

lset 修改列表中的元素值

127.0.0.1:6379> lrange listk 0 -1
1) "c"
2) "redis"
3) "b"
127.0.0.1:6379> lset listk 2 python   # 修改下標爲2的值爲python
OK
127.0.0.1:6379> lrange listk 0 -1
1) "c"
2) "redis"
3) "python"

list內部編碼

列表的內部編碼有兩種:

  • ziplist:壓縮列表,當列表的元素個數小於list-max-ziplistentries配置(默認512個),同時列表中每一個元素的值都小於list-max-ziplist-value配置時(默認64字節),Redis會選用ziplist來做爲表的內部實現來減小內存的使用。
  • Linkedlist:鏈表,當列表類型沒法知足ziplist的條件時,Redis會使用linkedlist做爲列表的內部實現。

list使用場景:消息隊列、文章列表……

set 集合
集合類型也是用來保存多個字符串元素,但和列表類型不同的是,集合中不容許有重複的元素,而且集合中的元素是無序的,不能經過索引下標獲取元素。一個集合最多能夠存儲2的32次方-1個元素,redis除了支持集合內的增刪改查,同時還支持多個集合取交集、並集、差集。

sadd 插入元素

127.0.0.1:6379> sadd myset a b c   # 建立一個新的集合
(integer) 3
127.0.0.1:6379> sadd myset a b d    # a b 這兩個元素已存在,因此不會添加到集合中
(integer) 1   # 只添加了一個元素

srem 刪除元素

127.0.0.1:6379> srem myset a b
(integer) 2

scard 統計集合中的元素總數

127.0.0.1:6379> scard myset   
(integer) 2    # myset集合中元素總數爲2

sismember 判斷元素是否在這個集合中

127.0.0.1:6379> sismember myset a
(integer) 0   # 0表示不在
127.0.0.1:6379> sismember myset c
(integer) 1    # 1表示在

srandmember 隨機從集合中返回指定個數的元素,默認返回1個

127.0.0.1:6379> srandmember myset 2   # 返回2個
1) "c"
2) "d"
127.0.0.1:6379> srandmember myset     # 不指定則返回1個
"d"

spop 從集合隨機刪除元素(默認刪除1個)

127.0.0.1:6379> spop myset
"d"    # 元素d被刪除

smembers 查看集合內全部元素

127.0.0.1:6379> smembers myset
1) "c"
2) "three"
3) "two"
4) "one"
5) "four"

sinter 求多個集合交集

# 定義兩個集合,這兩個集合在後面會屢次用到
127.0.0.1:6379> sadd user:1 follow it music his sports
(integer) 5
127.0.0.1:6379> sadd user:2 follow it news ent sports
(integer) 5
127.0.0.1:6379> sinter user:1 user:2   # 返回的是兩個集合共有的元素
1) "it"
2) "follow"
3) "sports"

sdiff 求多個集合不一樣的元素
注:在求不一樣的元素時,返回的結果是第一個集合有,而第二個集合中沒有的元素。

127.0.0.1:6379> sdiff user:1 user:2   
1) "music"
2) "his"
127.0.0.1:6379> sdiff user:2 user:1
1) "news"
2) "ent"

sunion 求多個集合之間的並集(至關於去重後顯示)

127.0.0.1:6379> sunion user:1 user:2
1) "sports"
2) "news"
3) "music"
4) "his"
5) "ent"
6) "it"
7) "follow"

xxxxx+store 差集/並集/交集的結果保存

# 將兩個集合中共有的元素保存到集合user:1_2:inter
127.0.0.1:6379> sinterstore user:1_2:inter user:1 user:2
(integer) 3
127.0.0.1:6379> smembers user:1_2:inter
1) "sports"
2) "it"
3) "follow"

# 將兩個集合中不一樣的元素保存到集合user:1_2:sdiff
127.0.0.1:6379> sdiffstore user:1_2:sdiff user:1 user:2
(integer) 2
127.0.0.1:6379> smembers user:1_2:sdiff
1) "his"
2) "music"

# 將兩個集合的並集保存到集合user:1_2:sunion
127.0.0.1:6379> smembers user:1_2:sunion
1) "sports"
2) "news"
3) "music"
4) "his"
5) "ent"
6) "it"
7) "follow"

集合的內部編碼

集合的內部編碼有兩種:

  • intset:整數集合,當集合中的元素都是整數且元素個數小於set-max-intest-entries配置(默認512個)時,Redis會選用intset來做爲集合的內部實現,從而減小內存的使用。
  • hashtable:哈希表,當集合類型沒法知足intset的條件時,Redis會使用hashtable做爲集合的內部實現。
127.0.0.1:6379> sadd setkey 1 2 3 4
(integer) 4
127.0.0.1:6379> object encoding setkey   # 內部編碼爲intset
"intset"
127.0.0.1:6379> sadd setkey a
(integer) 1
127.0.0.1:6379> object encoding setkey     # 內部編碼爲hashtable
"hashtable"

集合的使用場景
集合類型比較典型的使用場景是標籤(tag)。好比一個用戶可能對娛樂、體育比較感興趣,另外一個用戶可能對歷史、新聞比較感興趣,這些興趣點就是標籤。有了這些數據就能夠獲得喜歡同一個標籤的人,以及用戶的共同喜愛的標籤,這些數據對於用戶體驗以及加強用戶黏度比較重要。例如一個電子商務的網站會對不一樣標籤的用戶作不一樣類型的推薦,好比對數碼產品比較感興趣的人,在各個頁面或者經過郵件的形式給他們推存最新的數碼產品,一般會爲網站帶來史多的利益。

有序集合
Redis 有序集合和集合同樣也是string類型元素的集合,且不容許重複的成員。

不一樣的是每一個元素都會關聯一個double類型的分數。redis正是經過分數來爲集合中的成員進行從小到大的排序。

有序集合的成員是惟一的,但分數(score)卻能夠重複。

集合是經過哈希表實現的,因此添加,刪除,查找的複雜度都是O(1)。 集合中最大的成員數爲 232 – 1 (4294967295, 每一個集合可存儲40多億個成員)。

zadd 集合內添加成員
格式爲:ZADD key score1 member1 [score2 member2]…..

127.0.0.1:6379> zadd javapoint 1 redis 4 mysql 2 python 3 shell

zcard 計算集合內成員個數

127.0.0.1:6379> zcard javapoint
(integer) 4

zscore 求某個成員的分數

127.0.0.1:6379> zscore javapoint shell
"3"

zrank 求集合內元素的排名(由低到高,從0開始排名)

127.0.0.1:6379> zrank javapoint mysql
(integer) 3
127.0.0.1:6379> zrank javapoint redis
(integer) 0
127.0.0.1:6379> zrank javapoint shell
(integer) 2

zrevrange 同求排名(由高到低,從0開始排名)

127.0.0.1:6379> zrevrank javapoint mysql
(integer) 0
127.0.0.1:6379> zrevrank javapoint shell
(integer) 1

還有不少我就不舉例了,列個表吧,以下:

序號 命令 描述
1 ZADD key score1 member1 [score2 member2] 向有序集合添加一個或多個成員,或者更新已存在成員的分數
2 ZCARD key 獲取有序集合的成員數
3 ZCOUNT key min max 計算在有序集合中指定區間分數的成員數
4 ZINCRBY key increment member 有序集合中對指定成員的分數加上增量 increment
5 ZINTERSTORE destination numkeys key [key …] 計算給定的一個或多個有序集的交集並將結果集存儲在新的有序集合 key 中
6 ZLEXCOUNT key min max 在有序集合中計算指定字典區間內成員數量
7 ZRANGE key start stop [WITHSCORES] 經過索引區間返回有序集合成指定區間內的成員
8 ZRANGEBYLEX key min max [LIMIT offset count] 經過字典區間返回有序集合的成員
9 ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT] 經過分數返回有序集合指定區間內的成員
10 ZRANK key member 返回有序集合中指定成員的索引
11 ZREM key member [member …] 移除有序集合中的一個或多個成員
12 ZREMRANGEBYLEX key min max 移除有序集合中給定的字典區間的全部成員
13 ZREMRANGEBYRANK key start stop 移除有序集合中給定的排名區間的全部成員
14 ZREMRANGEBYSCORE key min max 移除有序集合中給定的分數區間的全部成員
15 ZREVRANGE key start stop [WITHSCORES] 返回有序集中指定區間內的成員,經過索引,分數從高到底
16 ZREVRANGEBYSCORE key max min [WITHSCORES] 返回有序集中指定分數區間內的成員,分數從高到低排序
17 ZREVRANK key member 返回有序集合中指定成員的排名,有序集成員按分數值遞減(從大到小)排序
18 ZSCORE key member 返回有序集中,成員的分數值
19 ZUNIONSTORE destination numkeys key [key …] 計算給定的一個或多個有序集的並集,並存儲在新的 key 中
20 ZSCAN key cursor [MATCH pattern] [COUNT count] 迭代有序集合中的元素(包括元素成員和元素分值)
相關文章
相關標籤/搜索