日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Redis 五大数据类型的基本命令使用

發(fā)布時間:2023/12/10 数据库 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Redis 五大数据类型的基本命令使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • Docker安裝redis
    • redis-benchmark 性能測試
    • 基礎知識
    • 五大數據類型
      • Redis-key
      • String(字符串)
      • List(列表)
      • Set(集合)
      • Hash(哈希)
      • Zset(有序集合)

Docker安裝redis

  • 拉取redis鏡像
  • docker pull redis:latest

  • 運行redis
  • docker run -itd --name redis -p 6379:6379 redis

  • 通過 redis-cli 連接測試使用 redis 服務
  • docker exec -it redis /bin/bash

    CAIKE3>docker exec -it redis /bin/bash root@9764b0a9bb1c:/data# redis-cli 127.0.0.1:6379> PING PONG

    redis-benchmark 性能測試

    root@9764b0a9bb1c:/data# redis-benchmark # 測試:100個并發(fā)連接 100000請求 redis-benchmark -h localhost -p 6379 -c 100 -n 100000

    結果如下:

    root@9764b0a9bb1c:/data# redis-benchmark -h localhost -p 6379 -c 100 -n 100000 ====== PING_INLINE ======100000 requests completed in 1.01 seconds100 parallel clients3 bytes payloadkeep alive: 1host configuration "save": 3600 1 300 100 60 10000host configuration "appendonly": nomulti-thread: no0.00% <= 0.1 milliseconds 0.00% <= 0.2 milliseconds 0.14% <= 0.3 milliseconds 1.47% <= 0.4 milliseconds 49.53% <= 0.5 milliseconds 86.89% <= 0.6 milliseconds 94.19% <= 0.7 milliseconds 96.63% <= 0.8 milliseconds 98.08% <= 0.9 milliseconds 98.93% <= 1.0 milliseconds 99.34% <= 1.1 milliseconds 99.64% <= 1.2 milliseconds 99.77% <= 1.3 milliseconds 99.82% <= 1.4 milliseconds 99.83% <= 1.5 milliseconds 99.85% <= 1.6 milliseconds 99.85% <= 1.7 milliseconds 99.86% <= 1.8 milliseconds 99.87% <= 1.9 milliseconds 99.88% <= 2 milliseconds 99.90% <= 3 milliseconds 99.92% <= 4 milliseconds 99.99% <= 5 milliseconds 100.00% <= 5 milliseconds 98522.17 requests per second====== PING_BULK ======100000 requests completed in 1.03 seconds100 parallel clients3 bytes payloadkeep alive: 1host configuration "save": 3600 1 300 100 60 10000host configuration "appendonly": nomulti-thread: no99.34% <= 1 milliseconds 99.97% <= 2 milliseconds 100.00% <= 2 milliseconds 96711.80 requests per second====== SET ======100000 requests completed in 1.02 seconds100 parallel clients3 bytes payloadkeep alive: 1host configuration "save": 3600 1 300 100 60 10000host configuration "appendonly": nomulti-thread: no98.72% <= 1 milliseconds 99.90% <= 2 milliseconds 100.00% <= 2 milliseconds 98425.20 requests per second====== GET ======100000 requests completed in 1.15 seconds100 parallel clients3 bytes payloadkeep alive: 1host configuration "save": 3600 1 300 100 60 10000host configuration "appendonly": nomulti-thread: no93.00% <= 1 milliseconds 98.74% <= 2 milliseconds 99.79% <= 3 milliseconds 99.94% <= 4 milliseconds 100.00% <= 5 milliseconds 100.00% <= 5 milliseconds 86805.56 requests per second====== INCR ======100000 requests completed in 1.41 seconds100 parallel clients3 bytes payloadkeep alive: 1host configuration "save": 3600 1 300 100 60 10000host configuration "appendonly": nomulti-thread: no84.55% <= 1 milliseconds 93.73% <= 2 milliseconds 96.63% <= 3 milliseconds 97.85% <= 4 milliseconds 98.33% <= 5 milliseconds 98.82% <= 6 milliseconds 99.18% <= 7 milliseconds 99.43% <= 8 milliseconds 99.61% <= 9 milliseconds 99.69% <= 10 milliseconds 99.75% <= 11 milliseconds 99.82% <= 13 milliseconds 99.87% <= 14 milliseconds 99.93% <= 15 milliseconds 99.98% <= 16 milliseconds 100.00% <= 17 milliseconds 70972.32 requests per second====== LPUSH ======100000 requests completed in 0.98 seconds100 parallel clients3 bytes payloadkeep alive: 1host configuration "save": 3600 1 300 100 60 10000host configuration "appendonly": nomulti-thread: no99.07% <= 1 milliseconds 100.00% <= 2 milliseconds 100.00% <= 2 milliseconds 102249.49 requests per second====== RPUSH ======100000 requests completed in 0.98 seconds100 parallel clients3 bytes payloadkeep alive: 1host configuration "save": 3600 1 300 100 60 10000host configuration "appendonly": nomulti-thread: no99.44% <= 1 milliseconds 99.99% <= 2 milliseconds 100.00% <= 2 milliseconds 102459.02 requests per second====== LPOP ======100000 requests completed in 1.07 seconds100 parallel clients3 bytes payloadkeep alive: 1host configuration "save": 3600 1 300 100 60 10000host configuration "appendonly": nomulti-thread: no96.74% <= 1 milliseconds 99.79% <= 2 milliseconds 99.90% <= 3 milliseconds 99.90% <= 4 milliseconds 99.90% <= 5 milliseconds 99.91% <= 6 milliseconds 99.94% <= 7 milliseconds 100.00% <= 7 milliseconds 93370.68 requests per second====== RPOP ======100000 requests completed in 1.04 seconds100 parallel clients3 bytes payloadkeep alive: 1host configuration "save": 3600 1 300 100 60 10000host configuration "appendonly": nomulti-thread: no97.61% <= 1 milliseconds 99.64% <= 2 milliseconds 99.87% <= 3 milliseconds 99.97% <= 4 milliseconds 100.00% <= 4 milliseconds 95969.28 requests per second====== SADD ======100000 requests completed in 1.01 seconds100 parallel clients3 bytes payloadkeep alive: 1host configuration "save": 3600 1 300 100 60 10000host configuration "appendonly": nomulti-thread: no98.97% <= 1 milliseconds 99.91% <= 2 milliseconds 99.96% <= 3 milliseconds 99.97% <= 4 milliseconds 99.99% <= 5 milliseconds 100.00% <= 6 milliseconds 100.00% <= 6 milliseconds 99403.58 requests per second====== HSET ======100000 requests completed in 1.08 seconds100 parallel clients3 bytes payloadkeep alive: 1host configuration "save": 3600 1 300 100 60 10000host configuration "appendonly": nomulti-thread: no92.35% <= 1 milliseconds 98.18% <= 2 milliseconds 99.59% <= 3 milliseconds 99.88% <= 4 milliseconds 99.91% <= 5 milliseconds 99.92% <= 8 milliseconds 99.99% <= 9 milliseconds 100.00% <= 9 milliseconds 92592.59 requests per second====== SPOP ======100000 requests completed in 1.06 seconds100 parallel clients3 bytes payloadkeep alive: 1host configuration "save": 3600 1 300 100 60 10000host configuration "appendonly": nomulti-thread: no98.43% <= 1 milliseconds 99.88% <= 2 milliseconds 100.00% <= 2 milliseconds 94428.70 requests per second====== ZADD ======100000 requests completed in 1.14 seconds100 parallel clients3 bytes payloadkeep alive: 1host configuration "save": 3600 1 300 100 60 10000host configuration "appendonly": nomulti-thread: no92.07% <= 1 milliseconds 98.76% <= 2 milliseconds 99.72% <= 3 milliseconds 99.90% <= 4 milliseconds 99.97% <= 5 milliseconds 99.98% <= 6 milliseconds 99.99% <= 7 milliseconds 100.00% <= 8 milliseconds 87565.68 requests per second====== ZPOPMIN ======100000 requests completed in 1.02 seconds100 parallel clients3 bytes payloadkeep alive: 1host configuration "save": 3600 1 300 100 60 10000host configuration "appendonly": nomulti-thread: no99.24% <= 1 milliseconds 100.00% <= 2 milliseconds 100.00% <= 2 milliseconds 97943.19 requests per second====== LPUSH (needed to benchmark LRANGE) ======100000 requests completed in 1.01 seconds100 parallel clients3 bytes payloadkeep alive: 1host configuration "save": 3600 1 300 100 60 10000host configuration "appendonly": nomulti-thread: no98.45% <= 1 milliseconds 99.80% <= 2 milliseconds 99.97% <= 3 milliseconds 99.98% <= 4 milliseconds 100.00% <= 5 milliseconds 100.00% <= 5 milliseconds 99009.90 requests per second====== LRANGE_100 (first 100 elements) ======100000 requests completed in 2.19 seconds100 parallel clients3 bytes payloadkeep alive: 1host configuration "save": 3600 1 300 100 60 10000host configuration "appendonly": nomulti-thread: no38.81% <= 1 milliseconds 96.56% <= 2 milliseconds 98.46% <= 3 milliseconds 99.21% <= 4 milliseconds 99.50% <= 5 milliseconds 99.61% <= 6 milliseconds 99.62% <= 7 milliseconds 99.67% <= 8 milliseconds 99.78% <= 9 milliseconds 99.88% <= 10 milliseconds 99.91% <= 11 milliseconds 100.00% <= 12 milliseconds 45745.65 requests per second====== LRANGE_300 (first 300 elements) ======100000 requests completed in 4.91 seconds100 parallel clients3 bytes payloadkeep alive: 1host configuration "save": 3600 1 300 100 60 10000host configuration "appendonly": nomulti-thread: no0.07% <= 1 milliseconds 13.22% <= 2 milliseconds 91.21% <= 3 milliseconds 96.73% <= 4 milliseconds 97.76% <= 5 milliseconds 98.36% <= 6 milliseconds 98.82% <= 7 milliseconds 99.23% <= 8 milliseconds 99.52% <= 9 milliseconds 99.67% <= 10 milliseconds 99.73% <= 11 milliseconds 99.78% <= 12 milliseconds 99.81% <= 13 milliseconds 99.86% <= 14 milliseconds 99.91% <= 15 milliseconds 99.94% <= 16 milliseconds 99.96% <= 17 milliseconds 99.97% <= 18 milliseconds 99.99% <= 19 milliseconds 100.00% <= 19 milliseconds 20354.16 requests per second====== LRANGE_500 (first 450 elements) ======100000 requests completed in 6.28 seconds100 parallel clients3 bytes payloadkeep alive: 1host configuration "save": 3600 1 300 100 60 10000host configuration "appendonly": nomulti-thread: no0.03% <= 1 milliseconds 0.74% <= 2 milliseconds 39.01% <= 3 milliseconds 93.95% <= 4 milliseconds 98.13% <= 5 milliseconds 99.05% <= 6 milliseconds 99.37% <= 7 milliseconds 99.52% <= 8 milliseconds 99.63% <= 9 milliseconds 99.74% <= 10 milliseconds 99.83% <= 11 milliseconds 99.86% <= 12 milliseconds 99.89% <= 13 milliseconds 99.91% <= 14 milliseconds 99.92% <= 15 milliseconds 99.92% <= 16 milliseconds 99.93% <= 17 milliseconds 99.95% <= 18 milliseconds 99.96% <= 19 milliseconds 99.98% <= 20 milliseconds 99.99% <= 21 milliseconds 100.00% <= 21 milliseconds 15936.25 requests per second====== LRANGE_600 (first 600 elements) ======100000 requests completed in 7.71 seconds100 parallel clients3 bytes payloadkeep alive: 1host configuration "save": 3600 1 300 100 60 10000host configuration "appendonly": nomulti-thread: no0.02% <= 1 milliseconds 0.22% <= 2 milliseconds 4.87% <= 3 milliseconds 63.60% <= 4 milliseconds 95.25% <= 5 milliseconds 98.17% <= 6 milliseconds 98.78% <= 7 milliseconds 99.11% <= 8 milliseconds 99.34% <= 9 milliseconds 99.46% <= 10 milliseconds 99.57% <= 11 milliseconds 99.66% <= 12 milliseconds 99.74% <= 13 milliseconds 99.81% <= 14 milliseconds 99.87% <= 15 milliseconds 99.91% <= 16 milliseconds 99.95% <= 17 milliseconds 99.96% <= 18 milliseconds 99.97% <= 19 milliseconds 99.98% <= 20 milliseconds 99.99% <= 21 milliseconds 100.00% <= 22 milliseconds 100.00% <= 22 milliseconds 12973.53 requests per second====== MSET (10 keys) ======100000 requests completed in 1.18 seconds100 parallel clients3 bytes payloadkeep alive: 1host configuration "save": 3600 1 300 100 60 10000host configuration "appendonly": nomulti-thread: no88.55% <= 1 milliseconds 97.72% <= 2 milliseconds 99.04% <= 3 milliseconds 99.34% <= 4 milliseconds 99.55% <= 5 milliseconds 99.64% <= 7 milliseconds 99.64% <= 9 milliseconds 99.69% <= 10 milliseconds 99.87% <= 11 milliseconds 99.90% <= 18 milliseconds 100.00% <= 19 milliseconds 100.00% <= 19 milliseconds 84674.01 requests per second

    redis 性能測試工具可選參數如下所示:


    基礎知識

    redis默認有16個數據庫

    127.0.0.1:6379> config get databases # 命令行查看數據庫數量databases 1) "databases" 2) "16"

    16個數據庫為:DB 0~DB 15

    默認使用DB 0 ,可以使用select n切換到DB n,dbsize可以查看當前數據庫的大小,與key數量相關。

    127.0.0.1:6379> SELECT 8 # 切換數據庫 DB8 OK 127.0.0.1:6379[8]> DBSIZE # 查看數據庫大小 (integer) 0 # 不同數據庫之間 數據是不能互通的,并且dbsize 是根據庫中key的個數。 127.0.0.1:6379[8]> SET name kevin OK 127.0.0.1:6379[8]> GET name "kevin" 127.0.0.1:6379[8]> DBSIZE (integer) 1 127.0.0.1:6379[8]> KEYS * 1) "name" 127.0.0.1:6379[8]> SELECT 0 OK 127.0.0.1:6379> DBSIZE (integer) 0 127.0.0.1:6379> GET NAME # DB0 中并不能獲取DB8 中的鍵值對。 (nil)

    keys * :查看當前數據庫中所有的key。

    flushdb:清空當前數據庫中的鍵值對。

    flushall:清空所有數據庫的鍵值對。

    五大數據類型

    Redis是一個開源(BSD許可),內存存儲的數據結構服務器,可用作數據庫,高速緩存和消息隊列代理。它支持字符串、哈希表、列表、集合、有序集合,位圖,hyperloglogs等數據類型。內置復制、Lua腳本、LRU收回、事務以及不同級別磁盤持久化功能,同時通過Redis Sentinel提供高可用,通過Redis Cluster提供自動分區(qū)。

    Redis-key

    在redis中無論什么數據類型,在數據庫中都是以key-value形式保存,通過進行對Redis-key的操作,來完成對數據庫中數據的操作。

    • exists key:判斷鍵是否存在
    • del key:刪除鍵值對
    • move key db:將鍵值對移動到指定數據庫
    • expire key second:設置鍵值對的過期時間
    • persist key: 取消鍵值對的過期時間設置
    • type key:查看value的數據類型
    127.0.0.1:6379> keys * # 查看當前數據庫所有key (empty array) 127.0.0.1:6379> set name kevin OK 127.0.0.1:6379> set age 20 OK 127.0.0.1:6379> keys * 1) "age" 2) "name" 127.0.0.1:6379> move age 1 # 將鍵值對移動到指定數據庫 (integer) 1 127.0.0.1:6379> EXISTS age # 判斷鍵是否存在 (integer) 0 # 不存在 127.0.0.1:6379> SELECT 1 OK 127.0.0.1:6379[1]> EXISTS age (integer) 1 # 存在 127.0.0.1:6379[1]> keys * 1) "age" 127.0.0.1:6379[1]> del age # 刪除鍵值對 (integer) 1 # 刪除個數 127.0.0.1:6379[1]> keys * (empty array) 127.0.0.1:6379[1]> select 0 OK 127.0.0.1:6379> FLUSHALL OK 127.0.0.1:6379> set age 20 OK 127.0.0.1:6379> EXPIRE age 15 # 設置鍵值對的過期時間 (integer) 1 127.0.0.1:6379> ttl age # 查看key的過期剩余時間 (integer) 12 127.0.0.1:6379> ttl age (integer) 10 127.0.0.1:6379> ttl age (integer) 9 127.0.0.1:6379> 127.0.0.1:6379> ttl age (integer) 6 127.0.0.1:6379> ttl age (integer) 2 127.0.0.1:6379> ttl age (integer) 1 127.0.0.1:6379> ttl age # -2 表示key過期 (integer) -2 127.0.0.1:6379> get age (nil) 127.0.0.1:6379> keys * (empty array) 127.0.0.1:6379> set name kevin OK 127.0.0.1:6379> ttl name (integer) -1 # -1表示key未設置過期時間 127.0.0.1:6379> type name # 查看value的數據類型 string 127.0.0.1:6379> EXPIRE name 30 (integer) 1 127.0.0.1:6379> ttl name (integer) 28 127.0.0.1:6379> persist name # 取消key的過期時間設置 (integer) 1 127.0.0.1:6379> ttl name (integer) -1

    關于TTL命令

    Redis的key,通過TTL命令返回key的過期時間,一般來說有3種:

  • 當前key沒有設置過期時間,所以會返回-1.
  • 當前key有設置過期時間,而且key已經過期,所以會返回-2.
  • 當前key有設置過期時間,且key還沒有過期,故會返回key的正常剩余時間.
  • 重命名RENAME和RENAMENX

  • RENAME key newkey:修改 key 的名稱
  • RENAMENX key newkey:僅當 newkey 不存在時,將 key 改名為 newkey 。
  • RENAME key newkey的測試:

    127.0.0.1:6379> set name kevin OK 127.0.0.1:6379> set name2 cc OK 127.0.0.1:6379> RENAME name name2 # 如果newKey已經存在,則會覆蓋 OK 127.0.0.1:6379> keys * 1) "name2" 127.0.0.1:6379> get name2 "kevin" 127.0.0.1:6379> set age1 20 OK 127.0.0.1:6379> RENAME age1 age2 OK 127.0.0.1:6379> get age2 "20"

    RENAMENX key newkey的測試

    127.0.0.1:6379> FLUSHALL OK 127.0.0.1:6379> set name1 kevin OK 127.0.0.1:6379> set name2 cc OK 127.0.0.1:6379> RENAMENX name1 name2 # 如果newKey已經存在,則不會進行rename操作 (integer) 0 127.0.0.1:6379> keys * 1) "name1" 2) "name2" 127.0.0.1:6379> set age1 20 OK 127.0.0.1:6379> RENAMENX age1 age2 (integer) 1 127.0.0.1:6379> keys * 1) "age2" 2) "name1" 3) "name2" 127.0.0.1:6379> get age2 "20"

    String(字符串)

  • SET key value: 設置指定 key 的值
  • GET key: 獲取指定 key 的值。
  • 這兩個命令就不進行測試了。

  • APPEND key value: 如果 key 已經存在并且是一個字符串, APPEND 命令將指定的 value 追加到該 key 原來值(value)的末尾。
  • 127.0.0.1:6379> SET msg hello OK 127.0.0.1:6379> APPEND msg world # 如果存在這個key,就在末尾進行append (integer) 10 127.0.0.1:6379> get msg "helloworld" 127.0.0.1:6379> keys * 1) "msg" 127.0.0.1:6379> APPEND msg2 aaa # 如果不存在,相當于set key (integer) 3 127.0.0.1:6379> keys * 1) "msg" 2) "msg2" 127.0.0.1:6379> get msg2 "aaa"
  • DECR/INCR key: 將key中儲存的數字值進行加減。只是針對于數值
  • 127.0.0.1:6379> set number 1 OK 127.0.0.1:6379> INCR number (integer) 2 127.0.0.1:6379> get number "2" 127.0.0.1:6379> DECR number (integer) 1 127.0.0.1:6379> get number "1" 127.0.0.1:6379> set msg test OK 127.0.0.1:6379> INCR msg (error) ERR value is not an integer or out of range
  • INCRBY/DECRBY key n: 按指定的步長對數值進行加減
  • 127.0.0.1:6379> FLUSHALL OK 127.0.0.1:6379> set number 1 OK 127.0.0.1:6379> INCRBY number 2 (integer) 3 127.0.0.1:6379> get number "3" 127.0.0.1:6379> DECRBY number 2 (integer) 1 127.0.0.1:6379> get number "1"
  • INCRBYFLOAT key n: 為數值加上浮點型數值
  • 127.0.0.1:6379> FLUSHALL OK 127.0.0.1:6379> set number 1 OK 127.0.0.1:6379> INCRBYFLOAT number 0.2 "1.2" 127.0.0.1:6379> get number "1.2"
  • STRLEN key: 獲取key保存值的字符串長度
  • 127.0.0.1:6379> set msg hello OK 127.0.0.1:6379> STRLEN msg (integer) 5
  • GETRANGE key start end: 按起止位置獲取字符串(閉區(qū)間,起止位置都取)
  • 127.0.0.1:6379> FLUSHALL OK 127.0.0.1:6379> set msg "hello world" OK 127.0.0.1:6379> get msg "hello world" 127.0.0.1:6379> GETRANGE msg 3 9 "lo worl"
  • SETRANGE key offset value: 用指定的value 替換key中 offset開始的值
  • 127.0.0.1:6379> set msg "hello world" OK 127.0.0.1:6379> SETRANGE msg 2 test (integer) 11 127.0.0.1:6379> get msg "hetestworld"
  • GETSET key value: 將給定 key 的值設為value ,并返回 key的舊值(old value)。
  • 127.0.0.1:6379> set msg "hello world" OK 127.0.0.1:6379> GETSET msg test
  • SETNX key value: 僅當key不存在時進行set
  • 127.0.0.1:6379> FLUSHALL OK 127.0.0.1:6379> set msg "hello world" OK 127.0.0.1:6379> SETNX msg test (integer) 0 127.0.0.1:6379> get msg "hello world" 127.0.0.1:6379> SETNX msg2 test (integer) 1 127.0.0.1:6379> get msg2 "test"
  • SETEX key seconds value: set 鍵值對并設置過期時間
  • 127.0.0.1:6379> SETEX msg 10 "hello world" OK 127.0.0.1:6379> ttl msg (integer) 7 127.0.0.1:6379> ttl msg (integer) 6 127.0.0.1:6379> ttl msg (integer) 4 127.0.0.1:6379> ttl msg (integer) -2
  • MSET key1 value1 [key2 value2..]: 批量set鍵值對
  • 127.0.0.1:6379> FLUSHALL OK 127.0.0.1:6379> MSET msg1 test1 msg2 test2 msg3 test3 OK 127.0.0.1:6379> get msg1 "test1" 127.0.0.1:6379> get msg2 "test2" 127.0.0.1:6379> get msg3 "test3"
  • MSETNX key1 value1 [key2 value2..]: 批量設置鍵值對,僅當參數中所有的key都不存在時執(zhí)行.
  • 127.0.0.1:6379> FLUSHALL OK 127.0.0.1:6379> MSETNX msg1 test1 msg2 test2 msg3 test3 (integer) 1
  • MGET key1 [key2..]: 批量獲取多個key保存的值
  • 127.0.0.1:6379> MGET msg1 msg2 msg3 1) "test1" 2) "test2" 3) "test3"
  • PSETEX key milliseconds value 和 SETEX 命令相似,但它以毫秒為單位設置 key 的生存時間
  • 127.0.0.1:6379> PSETEX msg 50000 "hello wolrd" OK 127.0.0.1:6379> ttl msg (integer) 47 127.0.0.1:6379> get msg "hello wolrd" 127.0.0.1:6379> ttl msg (integer) 42 127.0.0.1:6379> ttl msg (integer) 41 127.0.0.1:6379> get msg "hello wolrd"

    List(列表)

    • Redis列表是簡單的字符串列表,按照插入順序排序。你可以添加一個元素到列表的頭部(左邊)或者尾部(右邊)
    • 一個列表最多可以包含 2^32 - 1 個元素 (4294967295, 每個列表超過40億個元素)。
  • LPUSH/RPUSH key value1[value2..]: 從左邊/右邊向列表中PUSH值(一個或者多個)。 如果 key 不存在,一個空列表會被創(chuàng)建并執(zhí)行 LPUSH 操作。 當 key 存在但不是列表類型時,返回一個錯誤。
  • 127.0.0.1:6379> FLUSHALL OK 127.0.0.1:6379> LPUSH list v1 v2 v3 v4 # 從左到右的順序依次插入到表頭,列表的值將是 v4,v3,v2,v1 (integer) 4 127.0.0.1:6379> LRANGE list 0 -1 1) "v4" 2) "v3" 3) "v2" 4) "v1" 127.0.0.1:6379> FLUSHALL OK 127.0.0.1:6379> LPUSH list v1 (integer) 1 127.0.0.1:6379> LPUSH list v2 (integer) 2 127.0.0.1:6379> LPUSH list v3 (integer) 3 127.0.0.1:6379> LPUSH list v4 (integer) 4 127.0.0.1:6379> LRANGE list 0 -1 # 從左到右遍歷list的數據 1) "v4" 2) "v3" 3) "v2" 4) "v1" 127.0.0.1:6379> FLUSHALL OK 127.0.0.1:6379> RPUSH list v1 v2 v3 v4 #從右到左的順序依次插入到表頭,列表的值將是 v1,v2,v3,v4 (integer) 4 127.0.0.1:6379> LRANGE list 0 -1 # get list ---> 普通的get是無法獲取list值的 1) "v1" 2) "v2" 3) "v3" 4) "v4"
  • LRANGE key start end: 返回列表中指定區(qū)間內的元素,區(qū)間以偏移量 start 和 end 指定。 其中 0 表示列表的第一個元素, 1 表示列表的第二個元素,以此類推。 你也可以使用負數下標,以 -1 表示列表的最后一個元素, -2 表示列表的倒數第二個元素。
  • 127.0.0.1:6379> RPUSH list v1 v2 v3 v4 (integer) 4 127.0.0.1:6379> LRANGE list 0 -1 # 獲取全部元素 1) "v1" 2) "v2" 3) "v3" 4) "v4" 127.0.0.1:6379> LRANGE list 0 -2 1) "v1" 2) "v2" 3) "v3"
  • LPUSHX/RPUSHX key value: 向已存在的列名中push值(一個或者多個),列表不存在時操作無效。
  • 127.0.0.1:6379> FLUSHALL OK 127.0.0.1:6379> LPUSHX list v1 # 列表不存在時操作無效 (integer) 0 127.0.0.1:6379> LRANGE list 0 -1 (empty array) 127.0.0.1:6379> RPUSHX list v2 (integer) 0 127.0.0.1:6379> LRANGE list 0 -1 (empty array) 127.0.0.1:6379> FLUSHALL OK 127.0.0.1:6379> LPUSH list v1 (integer) 1 127.0.0.1:6379> LPUSHX list v2 # 列表存在時,操作有效 (integer) 2 127.0.0.1:6379> LRANGE list 0 -1 1) "v2" 2) "v1"
  • LINSERT key BEFORE|AFTER pivot value: 在列表的元素前或者后插入元素。當指定元素不存在于列表中時,不執(zhí)行任何操作。當列表不存在時,被視為空列表,不執(zhí)行任何操作。如果 key 不是列表類型,返回一個錯誤。
  • 127.0.0.1:6379> FLUSHALL OK 127.0.0.1:6379> LPUSH list v1 v2 v3 v4 (integer) 4 127.0.0.1:6379> LRANGE list 0 -1 1) "v4" 2) "v3" 3) "v2" 4) "v1" 127.0.0.1:6379> LINSERT list after v2 v5 # 在v2元素后插入v5 (integer) 5 127.0.0.1:6379> LRANGE list 0 -1 1) "v4" 2) "v3" 3) "v2" 4) "v5" 5) "v1" 127.0.0.1:6379> LINSERT list before v2 v6 # 在v2元素前插入v6 (integer) 6 127.0.0.1:6379> LRANGE list 0 -1 1) "v4" 2) "v3" 3) "v6" 4) "v2" 5) "v5" 6) "v1" 127.0.0.1:6379>
  • LLEN key: 查看列表長度, 返回列表的長度。 如果列表 key 不存在,則 key 被解釋為一個空列表,返回 0。 如果 key 不是列表類型,返回一個錯誤。
  • 127.0.0.1:6379> FLUSHALL OK 127.0.0.1:6379> LPUSH list v1 v2 v3 v4 (integer) 4 127.0.0.1:6379> LLEN list (integer) 4 127.0.0.1:6379> LLEN list1 # 如果key不存在,則返回0 (integer) 0
  • LINDEX key index: 通過索引獲取列表中的元素。你也可以使用負數下標,以 -1 表示列表的最后一個元素, -2 表示列表的倒數第二個元素,以此類推。
  • 127.0.0.1:6379> FLUSHALL OK 127.0.0.1:6379> LPUSH list v1 v2 v3 v4 (integer) 4 127.0.0.1:6379> LRANGE list 0 -1 1) "v4" 2) "v3" 3) "v2" 4) "v1" 127.0.0.1:6379> LINDEX list 0 "v4" 127.0.0.1:6379> LINDEX list -1 "v1" 127.0.0.1:6379> LINDEX list -2 "v2"
  • LSET key index value 通過索引為元素設值
  • 127.0.0.1:6379> FLUSHALL OK 127.0.0.1:6379> LPUSH list v1 v2 v3 v4 v5 (integer) 5 127.0.0.1:6379> LRANGE list 0 -1 1) "v5" 2) "v4" 3) "v3" 4) "v2" 5) "v1" 127.0.0.1:6379> LSET list 2 v6 OK 127.0.0.1:6379> LRANGE list 0 -1 1) "v5" 2) "v4" 3) "v6" 4) "v2" 5) "v1"
  • LPOP/RPOP key: 從最左邊/最右邊移除值 并返回
  • 127.0.0.1:6379> FLUSHALL OK 127.0.0.1:6379> LPUSH list v1 v2 (integer) 2 127.0.0.1:6379> LPOP list # 左側(頭部)彈出 "v2" 127.0.0.1:6379> FLUSHALL OK 127.0.0.1:6379> LPUSH list v1 v2 (integer) 2 127.0.0.1:6379> RPOP list # 右側(尾部)彈出 "v1"
  • RPOPLPUSH source destination: 將列表的尾部(右)最后一個值彈出,并返回,然后加到另一個列表的頭部.
  • 127.0.0.1:6379> FLUSHALL OK 127.0.0.1:6379> LPUSH list v1 v2 v3 v4 (integer) 4 127.0.0.1:6379> LRANGE list 0 -1 1) "v4" 2) "v3" 3) "v2" 4) "v1" 127.0.0.1:6379> RPOPLPUSH list newlist # 將mylist的最后一個值(k1)彈出,加入到newlist的頭部 "v1" 127.0.0.1:6379> LRANGE newlist 0 -1 1) "v1"
  • LTRIM key start end: 通過下標截取指定范圍內的列表
  • 127.0.0.1:6379> FLUSHALL OK 127.0.0.1:6379> LPUSH list v1 v2 v3 v4 (integer) 4 127.0.0.1:6379> LRANGE list 0 -1 1) "v4" 2) "v3" 3) "v2" 4) "v1" 127.0.0.1:6379> LTRIM list 0 1 # 截取list中的 0~1部分 OK 127.0.0.1:6379> LRANGE list 0 -1 1) "v4" 2) "v3"
  • LREM key count value: List中是允許value重復的 count > 0:從頭部開始搜索 然后刪除指定的value 至多刪除count個 count < 0:從尾部開始搜索… count = 0:刪除列表中所有的指定value。
  • 127.0.0.1:6379> LPUSH list v1 v2 v3 v4 v4 (integer) 5 127.0.0.1:6379> LREM list 1 v4 (integer) 1 127.0.0.1:6379> LRANGE list 0 -1 1) "v4" 2) "v3" 3) "v2" 4) "v1" 127.0.0.1:6379> FLUSHALL OK 127.0.0.1:6379> LPUSH list v1 v2 v3 v2 v4 (integer) 5 127.0.0.1:6379> LRANGE list 0 -1 1) "v4" 2) "v2" 3) "v3" 4) "v2" 5) "v1" 127.0.0.1:6379> LREM list -1 v2 (integer) 1 127.0.0.1:6379> LRANGE list 0 -1 1) "v4" 2) "v2" 3) "v3" 4) "v1" 127.0.0.1:6379> FLUSHALL OK 127.0.0.1:6379> LPUSH list v1 v2 v3 v3 v4 (integer) 5 127.0.0.1:6379> LRANGE list 0 -1 1) "v4" 2) "v3" 3) "v3" 4) "v2" 5) "v1" 127.0.0.1:6379> LREM list 0 v3 (integer) 2 127.0.0.1:6379> LRANGE list 0 -1 1) "v4" 2) "v2" 3) "v1"
  • BLPOP/BRPOP key1[key2] timout: 移出并獲取列表的第一個/最后一個元素, 如果列表沒有元素會阻塞列表直到等待超時或發(fā)現可彈出元素為止。
  • 127.0.0.1:6379> FLUSHALL OK 127.0.0.1:6379> LPUSH mylist k2 k2 k4 k2 k2 k2 (integer) 6 127.0.0.1:6379> LPUSH newlist k1 (integer) 1 127.0.0.1:6379> BLPOP newlist mylist 30 # 從newlist中彈出第一個值,mylist作為候選 1) "newlist" # newlist有值, 所以彈出newlist 2) "k1" 127.0.0.1:6379> BLPOP newlist mylist 30 1) "mylist" # 由于newlist空了 從mylist中彈出 2) "k2" 127.0.0.1:6379> BLPOP newlist 30 (nil) (30.07s) # 超時了 127.0.0.1:6379> BLPOP newlist 30 # 我們連接另一個客戶端向newlist中push了test, 阻塞被解決。 1) "newlist" 2) "test" (2.86s)

    總結:

  • list實際上是一個鏈表
  • 如果key不存在,則創(chuàng)建新的鏈表;如果key存在,新增內容
  • 如果移除了所有值,空鏈表,也代表不存在
  • 在兩邊插入或者改動值,效率最高!修改中間元素,效率相對較低
  • 應用:消息排隊!消息隊列(Lpush Rpop),棧(Lpush Lpop)
  • Set(集合)

    Redis的Set是string類型的無序集合。集合成員是唯一的,這就意味著集合中不能出現重復的數據。
    Redis中集合是通過哈希表實現的,所以添加,刪除,查找的復雜度都是O(1)。集合中最大的成員數為 2^32 - 1 (4294967295, 每個集合可存儲40多億個成員)。

  • SADD key member1[member2..]: 向集合中無序增加一個/多個成員
  • 127.0.0.1:6379> LPUSH newlist test (integer) 1 127.0.0.1:6379> SADD myset m1 m2 m3 m4 m4 (integer) 4
  • SCARD key: 獲取集合的成員數
  • 127.0.0.1:6379> SCARD myset (integer) 4
  • SMEMBERS key: 返回集合中所有的成員
  • 127.0.0.1:6379> SMEMBERS myset 1) "m4" 2) "m2" 3) "m3" 4) "m1"
  • SISMEMBER key member: 查詢member元素是否是集合的成員,如果成員元素是集合的成員,返回 1 。 如果成員元素不是集合的成員,或 key 不存在,返回 0。
  • 127.0.0.1:6379> SISMEMBER myset m1 (integer) 1 127.0.0.1:6379> SISMEMBER myset m5 (integer) 0
  • SRANDMEMBER key [count]: 隨機返回集合中count個成員,count缺省值為1
  • 127.0.0.1:6379> SRANDMEMBER myset "m3" 127.0.0.1:6379> SRANDMEMBER myset 2 1) "m4" 2) "m2"
  • SPOP key [count]: 隨機移除并返回集合中count個成員,count缺省值為1
  • 127.0.0.1:6379> SMEMBERS myset 1) "m2" 2) "m4" 3) "m3" 4) "m1" 127.0.0.1:6379> SPOP myset "m4" 127.0.0.1:6379> SPOP myset 2 1) "m2" 2) "m1" 127.0.0.1:6379> SMEMBERS myset 1) "m3"
  • SMOVE source destination member: 將source集合的成員member移動到destination集合
  • 127.0.0.1:6379> FLUSHALL OK 127.0.0.1:6379> SADD myset m1 m2 m3 m4 (integer) 4 127.0.0.1:6379> SADD newset m5 m6 (integer) 2 127.0.0.1:6379> SMOVE myset newset m1 # 將myset中m1成員移動到newset集合 (integer) 1 127.0.0.1:6379> SMEMBERS myset 1) "m3" 2) "m2" 3) "m4" 127.0.0.1:6379> SMEMBERS newset 1) "m5" 2) "m1" 3) "m6"
  • SREM key member1[member2..]: 移除集合中一個/多個成員
  • 127.0.0.1:6379> FLUSHALL OK 127.0.0.1:6379> SADD myset m1 m2 m3 m4 (integer) 4 127.0.0.1:6379> SREM myset m1 m2 # myset中移除m1, m2元素 (integer) 2 127.0.0.1:6379> SMEMBERS myset 1) "m3" 2) "m4"
  • SDIFF key1[key2..]: 返回第一個集合與其他集合之間的差異,也可以認為說第一個集合中獨有的元素。不存在的集合 key 將視為空集。
    例如:
  • key1 = {a,b,c,d} key2 = {c} key3 = {a,c,e} SDIFF key1 key2 key3 = {b,d} 127.0.0.1:6379> FLUSHALL OK 127.0.0.1:6379> SADD key1 a b c d (integer) 4 127.0.0.1:6379> SADD key2 c (integer) 1 127.0.0.1:6379> SADD key3 a c e (integer) 3 127.0.0.1:6379> SDIFF key1 key2 key3 1) "b" 2) "d"
  • SDIFFSTORE destination key1[key2..]: 將給定集合之間的差集存儲在指定的集合中。如果指定的集合 key 已存在,則會被覆蓋。
  • 127.0.0.1:6379> FLUSHALL OK 127.0.0.1:6379> SADD key1 a b c d (integer) 4 127.0.0.1:6379> SADD key2 c (integer) 1 127.0.0.1:6379> SADD key3 a c e (integer) 3 127.0.0.1:6379> SDIFFSTORE newset key1 key2 key3 (integer) 2 127.0.0.1:6379> SMEMBERS newset 1) "b" 2) "d"
  • SINTER key1 [key2..]: 返回給定所有給定集合的交集。 不存在的集合 key 被視為空集。 當給定集合當中有一個空集時,結果也為空集(根據集合運算定律)。
  • 127.0.0.1:6379> FLUSHALL OK 127.0.0.1:6379> SADD setx m1 m2 m4 m6 (integer) 4 127.0.0.1:6379> SADD sety m2 m5 m6 (integer) 3 127.0.0.1:6379> SADD setz m1 m3 m6 (integer) 3 127.0.0.1:6379> SINTER setx sety setz # 求 setx、sety、setx的交集 1) "m6" 127.0.0.1:6379> SINTER setx sety # 求setx sety的交集 1) "m2" 2) "m6"
  • SINTERSTORE destination key1[key2..]:將給定集合之間的交集存儲在指定的集合中。如果指定的集合已經存在,則將其覆蓋。
  • 127.0.0.1:6379> FLUSHALL OK 127.0.0.1:6379> SADD setx m1 m2 m4 m6 (integer) 4 127.0.0.1:6379> SADD sety m2 m5 m6 (integer) 3 127.0.0.1:6379> SADD setz m1 m3 m6 (integer) 3 127.0.0.1:6379> SINTERSTORE newset setx sety setz (integer) 1 127.0.0.1:6379> SMEMBERS newset 1) "m6"
  • SUNION key1 [key2..]: 返回給定集合的并集。不存在的集合 key 被視為空集。
  • 127.0.0.1:6379> FLUSHALL OK 127.0.0.1:6379> SADD setx m1 m2 m4 m6 (integer) 4 127.0.0.1:6379> SADD sety m2 m5 m6 (integer) 3 127.0.0.1:6379> SADD setz m1 m3 m6 (integer) 3 127.0.0.1:6379> SUNION setx sety setz 1) "m3" 2) "m2" 3) "m5" 4) "m6" 5) "m4" 6) "m1" 127.0.0.1:6379> SUNION setx sety 1) "m2" 2) "m5" 3) "m6" 4) "m4" 5) "m1" 127.0.0.1:6379>
  • SUNIONSTORE destination key1 [key2..]:將給定集合的并集存儲在指定的集合 destination 中。如果 destination 已經存在,則將其覆蓋。
  • 127.0.0.1:6379> FLUSHALL OK 127.0.0.1:6379> SADD setx m1 m2 m4 m6 (integer) 4 127.0.0.1:6379> SADD sety m2 m5 m6 (integer) 3 127.0.0.1:6379> SADD setz m1 m3 m6 (integer) 3 127.0.0.1:6379> SUNIONSTORE newset setx sety (integer) 5 127.0.0.1:6379> SMEMBERS newset 1) "m2" 2) "m5" 3) "m6" 4) "m4" 5) "m1"
  • SSCAN KEY [MATCH pattern] [COUNT count]: 在大量數據環(huán)境下,使用此命令遍歷集合中元素,每次遍歷部分
  • Hash(哈希)

    Redis hash 是一個string類型的field和value的映射表,hash特別適合用于存儲對象。可以將一個Hash表作為一個對象進行存儲,表中存放對象的信息。

  • HSET key field value: 將哈希表 key 中的字段 field 的值設為 value 。重復設置同一個field會覆蓋,返回0
  • 127.0.0.1:6379> FLUSHALL OK 127.0.0.1:6379> HSET studentx name kevin # 將studentx哈希表作為一個對象,設置name為kevin (integer) 1 127.0.0.1:6379> HSET studentx name cai # 重復設置field進行覆蓋,并返回0 (integer) 0 127.0.0.1:6379> HSET studentx age 20 # 設置studentx的age為20 (integer) 1
  • HMSET key field1 value1 [field2 value2..]: 同時將多個 field-value (域-值)對設置到哈希表 key 中。
  • 127.0.0.1:6379> HMSET studentx sex 1 tel 123456789 OK
  • HSETNX key field value:只有在字段 field 不存在時,設置哈希表字段的值。
  • 127.0.0.1:6379> HSETNX studentx name kkk # HSETNX 設置已存在的field (integer) 0 # 失敗 127.0.0.1:6379> HSETNX studentx email test@qq.com (integer) 1 # 成功
  • HEXISTS key field:查看哈希表 key 中,指定的字段是否存在。
  • 127.0.0.1:6379> HEXISTS studentx name # name字段在studentx中是否存在 (integer) 1 # 存在 127.0.0.1:6379> HEXISTS studentx addr (integer) 0 # 不存在
  • HGET key field value: 獲取存儲在哈希表中指定字段的值
  • 127.0.0.1:6379> HGET studentx name "cai" 127.0.0.1:6379> HGET studentx age "20"
  • HMGET key field1 [field2..]: 獲取所有給定字段的值
  • 127.0.0.1:6379> HMGET studentx name age sex email 1) "cai" 2) "20" 3) "1" 4) "test@qq.com"
  • HGETALL key:獲取在哈希表key的所有字段和值
  • 127.0.0.1:6379> HGETALL studentx1) "name"2) "cai"3) "age"4) "20"5) "sex"6) "1"7) "tel"8) "123456789"9) "email" 10) "test@qq.com"
  • HKEYS key: 獲取哈希表key中所有的字段
  • 127.0.0.1:6379> HKEYS studentx 1) "name" 2) "age" 3) "sex" 4) "tel" 5) "email"
  • HLEN key: 獲取哈希表中字段的數量
  • 127.0.0.1:6379> HLEN studentx (integer) 5
  • HVALS key: 獲取哈希表中所有值
  • 127.0.0.1:6379> HVALS studentx 1) "cai" 2) "20" 3) "1" 4) "123456789" 5) "test@qq.com"
  • HDEL key field1 [field2..]: 刪除哈希表key中一個/多個field字段
  • 127.0.0.1:6379> HDEL studentx name age (integer) 2 127.0.0.1:6379> HGETALL studentx 1) "sex" 2) "1" 3) "tel" 4) "123456789" 5) "email" 6) "test@qq.com"
  • HINCRBY key field n: 為哈希表 key 中的指定字段的整數值加上增量n,并返回增量后結果 一樣只適用于整數型字段。
  • 127.0.0.1:6379> FLUSHALL OK 127.0.0.1:6379> HSET studentx age 11 (integer) 1 127.0.0.1:6379> HSET studentx name kevin (integer) 1 127.0.0.1:6379> HINCRBY studentx age 1 (integer) 12 127.0.0.1:6379> HINCRBY studentx name 1 (error) ERR hash value is not an integer
  • HINCRBYFLOAT key field n: 為哈希表 key 中的指定字段的浮點數值加上增量 n。
  • 127.0.0.1:6379> HSET studentx weight 50 (integer) 1 127.0.0.1:6379> HINCRBYFLOAT studentx weight 0.6 "50.6"
  • HSCAN key cursor [MATCH pattern] [COUNT count]:迭代哈希表中的鍵值對。
  • Zset(有序集合)

    不同的是每個元素都會關聯(lián)一個double類型的分數(score)。redis正是通過分數來為集合中的成員進行從小到大的排序。

    score相同:按字典順序排序

    有序集合的成員是唯一的,但分數(score)卻可以重復。

  • ZADD key score member1 [score2 member2]: 向有序集合添加一個或多個成員,或者更新已存在成員的分數
  • 127.0.0.1:6379> ZADD myzset 1 m1 2 m2 3 m3 (integer) 3
  • ZCARD key: 獲取有序集合的成員數
  • 127.0.0.1:6379> ZCARD myzset (integer) 3
  • ZCOUNT key min max:計算在有序集合中指定區(qū)間score的成員數
  • 127.0.0.1:6379> ZCOUNT myzset 0 1 # 獲取score在 [0,1]區(qū)間的成員數量 (integer) 1 127.0.0.1:6379> ZCOUNT myzset 0 2 # 獲取score在 [0,2]區(qū)間的成員數量 (integer) 2
  • ZINCRBY key n member:有序集合中對指定成員的分數加上增量 n
  • 127.0.0.1:6379> FLUSHALL OK 127.0.0.1:6379> ZADD myzset 1 m1 2 m2 3 m3 (integer) 3 127.0.0.1:6379> ZINCRBY myzset 1 m1 "2"
  • ZSCORE key member: 返回有序集中,成員的分數值
  • 127.0.0.1:6379> ZSCORE myzset m1 "2"
  • ZRANK key member: 返回有序集合中指定成員的索引
  • 127.0.0.1:6379> ZRANK myzset m1 (integer) 0 127.0.0.1:6379> ZRANK myzset m2 (integer) 1
  • ZRANGE key start end: 通過索引區(qū)間返回有序集合成指定區(qū)間內的成員
  • 127.0.0.1:6379> ZRANGE myzset 0 -1 # 獲取全部成員 1) "m1" 2) "m2" 3) "m3" 127.0.0.1:6379> ZRANGE myzset 0 1 # 獲取索引在 0~1的成員 1) "m1" 2) "m2"
  • ZRANGEBYLEX key min max:通過字典區(qū)間返回有序集合的成員
  • 127.0.0.1:6379> ZRANGEBYLEX myzset - + 1) "m1" 2) "m2" 3) "m3" 127.0.0.1:6379> ZRANGEBYLEX myzset - + LIMIT 0 2 1) "m1" 2) "m2" 127.0.0.1:6379> ZRANGEBYLEX myzset - + LIMIT 1 2 1) "m2" 2) "m3"
  • ZRANGEBYSCORE key min max:通過分數返回有序集合指定區(qū)間內的成員
  • 127.0.0.1:6379> FLUSHALL OK 127.0.0.1:6379> ZADD myzset 1 m1 2 m2 3 m3 (integer) 3 127.0.0.1:6379> ZRANGEBYSCORE myzset 1 3 1) "m1" 2) "m2" 3) "m3" 127.0.0.1:6379> ZRANGEBYSCORE myzset 1 4 1) "m1" 2) "m2" 3) "m3" 127.0.0.1:6379> ZRANGEBYSCORE myzset 2 4 1) "m2" 2) "m3" 127.0.0.1:6379> ZRANGEBYSCORE myzset -inf +inf 1) "m1" 2) "m2" 3) "m3" 127.0.0.1:6379> ZRANGEBYSCORE myzset -inf +inf WITHSCORES 1) "m1" 2) "1" 3) "m2" 4) "2" 5) "m3" 6) "3"
  • ZLEXCOUNT key min max: 在有序集合中計算指定字典區(qū)間內成員數量
  • 127.0.0.1:6379> ZLEXCOUNT myzset - + (integer) 3 127.0.0.1:6379> ZLEXCOUNT myzset [m2 [m3 (integer) 2 127.0.0.1:6379> ZLEXCOUNT myzset [m1 [m3 (integer) 3 127.0.0.1:6379> ZLEXCOUNT myzset (m1 [m3 (integer) 2 127.0.0.1:6379> ZLEXCOUNT myzset (m1 (m3 (integer) 1
  • ZREM key member1 [member2..]: 移除有序集合中一個/多個成員
  • 127.0.0.1:6379> ZREM myzset m1 m2 (integer) 2 127.0.0.1:6379> ZCARD myzset (integer) 1 127.0.0.1:6379> ZRANGE myzset 0 -1 1) "m3"
  • ZREMRANGEBYLEX key min max: 移除有序集合中給定的字典區(qū)間的所有成員
  • 127.0.0.1:6379> FLUSHALL OK 127.0.0.1:6379> ZADD myzset 1 m1 2 m2 3 m3 (integer) 3 127.0.0.1:6379> ZREMRANGEBYLEX myzset [m1 [m2 # 移除字典區(qū)間[m1,m2]中的所有成員 (integer) 2 127.0.0.1:6379> ZRANGE myzset 0 -1 1) "m3"
  • ZREMRANGEBYRANK key start stop: 移除有序集合中給定的排名區(qū)間的所有成員
  • 127.0.0.1:6379> FLUSHALL OK 127.0.0.1:6379> ZADD myzset 1 m1 2 m2 3 m3 (integer) 3 127.0.0.1:6379> ZREMRANGEBYRANK myzset 0 1 # 移除排名0~1的所有成員 (integer) 2 127.0.0.1:6379> ZRANGE myzset 0 -1 1) "m3"
  • ZREMRANGEBYSCORE key min max: 移除有序集合中給定的分數區(qū)間的所有成員
  • 127.0.0.1:6379> FLUSHALL OK 127.0.0.1:6379> ZADD myzset 1 m1 2 m2 3 m3 (integer) 3 127.0.0.1:6379> ZREMRANGEBYSCORE myzset 0 2 # 移除score在 [0,2]的成員 (integer) 2 127.0.0.1:6379> ZRANGE myzset 0 -1 1) "m3"
  • ZREVRANGE key start end: 返回有序集中指定區(qū)間內的成員,通過索引,分數從高到底
  • 127.0.0.1:6379> FLUSHALL OK 127.0.0.1:6379> ZADD myzset 1 m1 2 m2 3 m3 (integer) 3 127.0.0.1:6379> ZREVRANGE myzset 0 3 # 按score遞減排序,然后按索引,返回結果的 0~3 1) "m3" 2) "m2" 3) "m1" 127.0.0.1:6379> ZREVRANGE myzset 1 3 # 按score遞減排序,然后按索引,返回結果的 1~3 1) "m2" 2) "m1"
  • ZREVRANGEBYSCORRE key max min: 返回有序集中指定分數區(qū)間內的成員,分數從高到低排序
  • 127.0.0.1:6379> ZREVRANGEBYSCORE myzset 3 1 1) "m3" 2) "m2" 3) "m1" 127.0.0.1:6379> ZREVRANGEBYSCORE myzset 3 2 1) "m3" 2) "m2" 127.0.0.1:6379> ZREVRANGEBYSCORE myzset 3 2 WITHSCORES 1) "m3" 2) "3" 3) "m2" 4) "2"
  • ZREVRANGEBYLEX key max min: 返回有序集中指定字典區(qū)間內的成員,按字典順序倒序
  • 127.0.0.1:6379> ZRANGE myzset 0 -1 1) "m1" 2) "m2" 3) "m3" 127.0.0.1:6379> ZREVRANGEBYLEX myzset [m2 (m1 1) "m2" 127.0.0.1:6379> ZREVRANGEBYLEX myzset [m2 [m1 1) "m2" 2) "m1"
  • ZREVRANK key member: 返回有序集合中指定成員的排名,有序集成員按分數值遞減(從大到小)排序
  • 127.0.0.1:6379> ZREVRANK myzset m1 (integer) 2 127.0.0.1:6379> ZREVRANK myzset m3 (integer) 0 127.0.0.1:6379> ZREVRANK myzset m2 (integer) 1
  • ZINTERSTORE destination numkeys key1 [key2 ..]: 計算給定的一個或多個有序集的交集并將結果集存儲在新的有序集合 key 中,numkeys:表示參與運算的集合數,將score相加作為結果的score
  • 127.0.0.1:6379> FLUSHALL OK 127.0.0.1:6379> ZADD zset1 1 m1 2 m2 3 m3 (integer) 3 127.0.0.1:6379> ZADD zset2 1 m1 2 m2 3 m3 (integer) 3 127.0.0.1:6379> ZINTERSTORE newzset 2 zset1 zset2 (integer) 3 127.0.0.1:6379> ZRANGE newzset 0 -1 WITHSCORES 1) "m1" 2) "2" 3) "m2" 4) "4" 5) "m3" 6) "6"
  • ZUNIONSTORE destination numkeys key1 [key2..]: 計算給定的一個或多個有序集的交集并將結果集存儲在新的有序集合 key 中.
  • 127.0.0.1:6379> FLUSHALL OK 127.0.0.1:6379> ZADD zset1 1 m1 2 m2 3 m3 (integer) 3 127.0.0.1:6379> ZADD zset2 3 m1 4 m2 5 m3 (integer) 3 127.0.0.1:6379> ZUNIONSTORE newzset 2 zset1 zset2 AGGREGATE MIN (integer) 3 127.0.0.1:6379> ZRANGE newzset 0 -1 WITHSCORES 1) "m1" 2) "1" 3) "m2" 4) "2" 5) "m3" 6) "3"
  • ZSCAN key cursor [MATCH pattern\] [COUNT count]: 迭代有序集合中的元素(包括元素成員和元素分值)
  • 應用案例:

    • set排序 存儲班級成績表 工資表排序!
    • 普通消息,1.重要消息 2.帶權重進行判斷
    • 排行榜應用實現,取Top N測試

    總結

    以上是生活随笔為你收集整理的Redis 五大数据类型的基本命令使用的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。