新聞推薦系統】(task2)Redis篇(上)

      網友投稿 792 2022-05-29

      學習總結

      (1)LREM將用于從列表 key 中刪除前 count 個值等于 element 的元素。 這個 count 參數通過下面幾種方式影響這個操作,如果count > 0, 從頭到尾刪除值為 value 的元素;如果

      count < 0,將從尾到頭刪除值為 value 的元素

      如果 count = 0 將移除所有值為 value 的元素

      (2)如果在打開redis(redis-cli)后操作的時候,報錯(error) NOAUTH Authentication required.則大概率需要填密碼,輸入127.0.0.1:6379> auth "密碼"即可。

      文章目錄

      學習總結

      一、redis簡介:

      1.0 redis特點

      (1)所有的數據都以 Key-value 的形式存儲。

      (2)所有的數據都存儲在內存中

      1.1 安裝:

      (1)安裝Redis服務器:

      (2)啟動Redis服務:

      1.2 命令:

      1、基本操作命令:

      (1)啟動Redis

      (2)連接Redis

      (3)停止Redis

      (4)切換庫指令

      (5)刪除當前庫的數據

      (6)刪除所有庫的數據

      (7)查看key的數量

      2、Key的操作命令:

      (1)查找符合模板的Key

      (2)查找存在key的數量

      (3)設置過期時間

      (4)Key所屬類型

      (5)刪除Key

      3、字符串類型—string命令:

      (1)基礎命令

      (2)常用命令

      4、列表—list命令:

      (1)基本命令

      (2)常用命令

      5、哈希類型—hash命令:

      (1)基本命令

      (2)常用命令

      6、集合類型—set命令:

      (1)基本命令

      (2)常用命令

      7、有序集合類型—sortedset命令:

      (1)基本命令

      (2)常用命令

      1.3 使用Redis DeskTop Manager

      Reference

      一、redis簡介:

      1.0 redis特點

      Redis(Remote Dictionary Server ),即遠程字典服務,是一個開源的使用ANSI C語言編寫、支持網絡、可基于內存亦可持久化的日志型、Key-Value數據庫。由于是

      內存數據庫,讀寫非常高速

      ,可達10w/s的評率,所以一般應用于數據變化快、實時通訊、緩存等。但內存數據庫通常要考慮機器的內存大小。Redis 是完全開源免費的,遵守 BSD 協議,是一個靈活的高性能 key-value 數據結構存儲,可以

      用來作為數據庫、緩存和消息隊列

      。相比于其他的 key-value 緩存產品有以下三個特點:

      Redis 支持數據的持久化,可以將內存中的數據保存在磁盤中,重啟的時候可以再次加載到內存使用。

      Redis 不僅支持簡單的 key-value 類型的數據,同時還提供 list,set,zset,hash 等數據結構的存儲。

      Redis 支持主從復制,即 master-slave 模式的數據備份。

      Redis 是當今業界最主流的內存數據庫。

      (1)所有的數據都以 Key-value 的形式存儲。

      Key 只能是字符串,value 可支持的數據結構包括 string(字符串)、list(鏈表)、set(集合)、zset(有序集合) 和 hash(哈希)。這個特點決定了 Redis 的使用方式,無論是存儲還是獲取,都應該以鍵值對的形式進行,并且根據你的數據特點,設計值的數據結構。

      (2)所有的數據都存儲在內存中

      磁盤只在持久化備份或恢復數據時起作用。

      這個特點決定了 Redis 的特性:一是 QPS 峰值可以很高,二是數據易丟失,所以我們在維護 Redis 時要充分考慮數據的備份問題,或者說,不應該把關鍵的業務數據唯一地放到 Redis 中。但對于可恢復,不關乎關鍵業務邏輯的推薦特征數據,就非常適合利用 Redis 提供高效的存儲和查詢服務。

      QPS:每秒查詢率QPS是對一個特定的查詢服務器在規定時間內所處理流量多少的衡量標準,在因特網上,作為域名系統服務器的機器的性能經常用每秒查詢率來衡量。

      1.1 安裝:

      本項目是基于Ubuntu環境進行開發,因此接下來都以Ubuntu的環境為基礎,對于其他開發環境,大家可以參考相關的資料進行學習。

      (1)安裝Redis服務器:

      sudo apt-get install redis-server

      1

      下載完成的結果

      (2)啟動Redis服務:

      一般來說,當安裝完成后,Redis服務器會自動啟動,可以通過以下命令檢查是否啟動成功。(ps:如果Active顯示為 active(running) 狀態:表示redis已在運行,啟動成功)

      service redis-server status

      1

      檢查當前進程,查看redis是否啟動。(ps: 可以看到redis服務正在監聽6379端口)

      ps -aux|grep redis-server

      1

      或者進入redis客戶端,與服務器進行通信,當輸入ping命令,如果返回 PONG 表示Redis已成功安裝。

      redis-cli

      1

      上面的127.0.0.1 是redis服務器的 IP 地址,6379 是 Redis 服務器運行的端口。

      1.2 命令:

      下面簡單介紹一些常用的Redis命令:

      1、基本操作命令:

      redis-server [--daemonize yes][--port 6379]

      1

      可以通過帶參數方式來啟動,如果參數過多,可以使用/etc/redis/redis.conf下面的配置文件來啟動Redis。

      redis-server /etc/redis/redis.conf

      1

      redis-cli [-h host -p port -a password]

      1

      其中上面參數默認的是redis-server的默認地址和端口號,password可以在服務啟動時采用參數的方式或者配置文件方式都可進行設置。因此可以通過redis-cli,可以連上我們服務器端的redis服務。

      停止Redis有兩種方法,一種是通過 redis-cli 停止,另一種是通過殺掉redis服務進程

      > redis-cli shutdown > kill redis-pid

      1

      2

      3

      redis.conf配置中默認16個庫,下標從0~15。進入客服端默認選中第0個庫,可以通過select命令進行切換,index表示庫的小標。

      127.0.0.1:6379> SELECT index

      1

      刪除當前選擇的數據庫中的所有數據,這個命令永遠不會出現失敗。

      127.0.0.1:6379[1]> FLUSHDB

      1

      刪除所有數據庫里面的數據,注意是所有數據庫,這個命令永遠不會出現失敗。

      127.0.0.1:6379[1]> FLUSHALL

      1

      查看當前選擇的庫中key的數量

      127.0.0.1:6379> DBSIZE

      1

      測試以上命令

      neu@neu:~$ redis-server --daemonize yes --port 6378 --requirepass 123456 28518:C 26 Oct 20:52:56.389 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 28518:C 26 Oct 20:52:56.389 # Redis version=4.0.9, bits=64, commit=00000000, modified=0, pid=28518, just started 28518:C 26 Oct 20:52:56.389 # Configuration loaded neu@neu:~$ redis-cli -p 6378 -a 123456 127.0.0.1:6378> set name jiangyou # 在第0個數據庫插入一個值 OK 127.0.0.1:6378> select 1 # 選擇第1個數據庫 OK 127.0.0.1:6378[1]> set age 26 # 在第1個數據庫插入一個值 OK 127.0.0.1:6378[1]> DBSIZE # 第1個數據庫當前的key值數量 (integer) 1 127.0.0.1:6378[1]> FLUSHDB # 刪除第1個數據庫的所有值 OK 127.0.0.1:6378[1]> DBSIZE # 刪除后數據庫中沒有值 (integer) 0 127.0.0.1:6378[1]> SELECT 0 # 切換到第0個數據庫 OK 127.0.0.1:6378> DBSIZE # 第1個數據庫的值存在,因此FLUSHDB只刪除第1個數據庫的所有值 (integer) 1 127.0.0.1:6378> SELECT 1 OK 127.0.0.1:6378[1]> FLUSHALL # 切換到第1個數據庫,使用FLUSHALL刪除所有數據庫的值 OK 127.0.0.1:6378[1]> SELECT 0 OK 127.0.0.1:6378> DBSIZE # 切換到第0個數據庫,發現所有的值已被刪除 (integer) 0

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      2、Key的操作命令:

      該部分指令主要是為了對數據庫中的key進行增刪改查等一些列操作,下面主要介紹幾個常用的命令。

      KEYS pattern

      1

      該指令查找數據庫所有符合pattern的key,其中pattern可以為?、* 、[abc…]、[a-d]等方式。其中?代表一個任意一個字符,*代表任意0個或多個字符,[abc…]代表只能是[]中的值,[a-d]代表a到d范圍內總的值。

      127.0.0.1:6378> keys * 1) "age" 2) "school" 3) "home" 4) "name" 127.0.0.1:6378> keys *e 1) "age" 2) "home" 3) "name" 127.0.0.1:6378> keys a?e 1) "age" 127.0.0.1:6378> keys [a-n][ao]me 1) "home" 2) "name" 127.0.0.1:6378> keys [a-n][a]me 1) "name"

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      EXISTS key or [key…]

      1

      該指令為了查找一個或多個key,返回存在key值的數量。

      127.0.0.1:6378> exists name (integer) 1 127.0.0.1:6378> exists name home id (integer) 2

      1

      2

      3

      4

      EXPIRE key seconds

      1

      expire 設置 key 的過期時間,時間過期后,key 會被自動刪除,設置成功返回1,key不存在返回0。

      TTL key

      1

      ttl 命令以秒為單位返回key的剩余過期時間,如果key不存在返回 -2 key 存在但沒有關聯超時時間則返回 -1 。

      127.0.0.1:6378> expire name 30 (integer) 1 127.0.0.1:6378> ttl name (integer) 26 127.0.0.1:6378> ttl name (integer) -2 127.0.0.1:6378> ttl age (integer) -1 127.0.0.1:6378> ttl id (integer) -2

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      TYPE key

      1

      type命令以字符串的形式返回存儲在 key 中的值的類型,可返回的類型有:string, list, set, zset,hash 和 stream,如果key值不存在返回none。

      127.0.0.1:6378> set key1 "value" OK 127.0.0.1:6378> lpush key2 "value" (integer) 1 127.0.0.1:6378> SADD key3 "value" (integer) 1 127.0.0.1:6378> type key1 string 127.0.0.1:6378> type key2 list 127.0.0.1:6378> type key3 set 127.0.0.1:6378> type key none

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      DEL key or [key…]

      1

      del命令刪除指定的key,不存在的key忽略,返回0,如果key存在,返回刪除的key的個數。

      127.0.0.1:6378> del key (integer) 0 127.0.0.1:6378> del key1 key2 (integer) 2

      1

      2

      3

      4

      3、字符串類型—string命令:

      字符串是Redis中最常見的數據類型,它能夠存儲任何形式的字符串,其中包括二進制格式,JSON格式,序列化格式等數據。而string相關的命令則是用于管理redis字符串值,下面介紹一些常見命令。

      SET

      set命令將key是定為指定的字符串,如果key存在,則會覆蓋原來的值。

      SET key value [EX seconds] [PX milliseconds] [NX|XX]

      1

      其中set可以為設定的值設置過期時間,EX表示秒數,PX表示毫秒。參數NX表示只有鍵key不存在的時候才會設置key的值,XX表示只有鍵key存在的時候才會設置key的值。

      GET

      get命令返回與鍵 key 相關聯的字符串值。

      GET key

      1

      如果key不存在,返回nil,如果key的值是非字符串類型,那么返回一個錯誤。

      APPEND

      append命令將指定的key追加值。如果key存在,并且是字符串,則會將value追加到key原值的末尾,如果key值是非字符串則會報錯,當key不存在時候,改命令類似于set,簡單將key設定為value。

      APPEND KEY_NAME NEW_VALUE

      1

      INCR

      incr 命令將 key 中儲存的數字值增一。如果key不存在,key值會被初始化為0,在進行incr操作。如果字符串類型的值不能表示為數字,則會報錯。

      INCR KEY_NAME

      1

      DECR

      decr命令將 key 中儲存的數字值減一,和incr命令相似。

      DECR KEY_NAME

      1

      STRLEN

      Strlen 命令將獲取指定 key 所儲存的字符串值的長度,如果key存儲的不是字符串類型或不存在時,返回錯誤。

      STRLEN KEY_NAME

      1

      SETRANG

      Setrange命令是將從偏移量 offset 開始, 用 value 參數覆蓋鍵 key 儲存的字符串值。

      SETRANGE key offset value

      1

      不存在的鍵 key 當作空白字符串處理,如果鍵 key 原來儲存的字符串長度比偏移量小,那么原字符和偏移量之間的空白將用零字節("\x00" )進行填充。

      GETRANG

      Getrange命令返回存儲在 key 中的字符串的子串,由 start 和 end 偏移決定(都包括在內)。負數偏移提供相對字符串結尾的偏移。并且該命令會通過將結果范圍限制為字符串的實際長度來處理超出范圍的請求。

      GETRANGE key start end

      1

      當key不存在返回空字符串。

      MSET

      命令設置多個 key 的值為各自對應的 value。如果key存在,則會用新值替換舊值,如果key不存在,會重新創建,該命令總是返回“OK”,因為 MSET不會失敗。

      MSET key value [key value ...]

      1

      MGET

      命令返回所有(一個或多個)給定 key 的值,值的類型是字符串。 如果給定的 key 里面有某個 key 不存在或者值不是字符串,那么這個 key 返回特殊值 nil 。

      MGET key [key ...]

      1

      測試以上命令

      127.0.0.1:6379> set name jiang XX # XX表示只有鍵key存在的時候才會設置key的值 (nil) 127.0.0.1:6379> set name jiang NX # NX表示只有鍵key不存在的時候才會設置key的值 OK 127.0.0.1:6379> get name # 返回與鍵 `key` 相關聯的字符串值。 "jiangyou" 127.0.0.1:6379> get age # 鍵key不存在的時候返回nil (nil)

      1

      2

      3

      4

      5

      6

      7

      8

      使用append可以將value追加到對應key的value尾部,并返回加上后的value的長度:

      127.0.0.1:6379> EXISTS mykey1 (integer) 1 127.0.0.1:6379> APPEND mykey1 "Hello" (integer) 19 127.0.0.1:6379> get mykey1 "I am the best!Hello" 127.0.0.1:6379> APPEND mykey1

      1

      2

      3

      4

      5

      6

      7

      設置age 的值,并設置了過期時間 EX表示秒:

      127.0.0.1:6379> set age 24 EX 30 # 設置age 的值,并設置了過期時間 EX表示秒 OK 127.0.0.1:6379> incr age # 在age上進行增 1 (integer) 25 127.0.0.1:6379> get age "25" 127.0.0.1:6379> decr age # 在age上進行減 1 (integer) 24 127.0.0.1:6379> get age "24" 127.0.0.1:6379> incr name # 由于name值不能表示數字,無法增1 (error) ERR value is not an integer or out of range 127.0.0.1:6379> STRLEN name # name對應的string的長度 (integer) 8

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      Setrange命令是將從偏移量 offset 開始, 用 value 參數覆蓋鍵 key 儲存的字符串值。

      Getrange命令返回存儲在 key 中的字符串的子串,由 start 和 end 偏移決定(都包括在內)。負數偏移提供相對字符串結尾的偏移。并且該命令會通過將結果范圍限制為字符串的實際長度來處理超出范圍的請求。

      127.0.0.1:6379> SETRANGE name 10 hahaha # 從偏移量為10 的位置開始加入hahaha (integer) 16 127.0.0.1:6379> get name # 不足的用\x00 補充 "jiangyou\x00\x00hahaha" 127.0.0.1:6379> GETRANGE name 0 -1 # 獲取name的值,改方式類似于python的數組查找 "jiangyou\x00\x00hahaha" 127.0.0.1:6379> MSET age 26 home liaoning # 為多個key賦值 OK 127.0.0.1:6379> MGET age home addr # 查找多個key對應的值,不存在的key返回nil。 1) "26" 2) "liaoning" 3) (nil)

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      4、列表—list命令:

      LPUSH

      Lpush 將一個或多個值插入到列表key 的頭部。如果 key 不存在,那么在進行 push 操作前會創建一個空列表。如果 key 對應的值不是 list 類型,那么會返回一個錯誤。可以使用一個命令把多個元素 push 進入列表。

      LPUSH key value [value ...]

      1

      RPUSH

      Rpush 將向存儲在 key 中的列表的尾部插入所有指定的值。如果 key 不存在,那么會創建一個空的列表然后再進行 push 操作。 當 key 保存的不是列表,那么會返回一個錯誤。

      RPUSH key value [value ...]

      1

      LRANGE

      Lrange將返回列表中指定區間內的元素(閉區間),區間以偏移量 START 和 END 指定。 其中 0 表示列表的第一個元素, 1 表示列表的第二個元素,以此類推。 你也可以使用負數下標,以 -1 表示列表的最后一個元素, -2 表示列表的倒數第二個元素,以此類推。如果start大于最大小標,那么叫返回空列表。

      LRANGE key start stop

      1

      LINDEX

      Lindex 將返回列表 key 里索引 index 位置存儲的元素。 index 下標是從 0 開始索引的,所以 0 是表示第一個元素, 1 表示第二個元素,并以此類推。 負數索引用于指定從列表尾部開始索引的元素,在這種方法下,-1 表示最后一個元素,-2 表示倒數第二個元素,并以此往前推。當 key 值不是列表的時候,會返回錯誤。

      LINDEX key index

      1

      LLEN

      Llen 將用于返回存儲在 key 中的列表長度。 如果 key 不存在,則 key 被解釋為一個空列表,返回 0 。 如果 key 不是列表類型,返回一個錯誤。

      LLEN key

      1

      LREM

      Lrem將用于從列表 key 中刪除前 count 個值等于 element 的元素。 這個 count 參數通過下面幾種方式影響這個操作,如果count > 0, 從頭到尾刪除值為 value 的元素;如果count < 0,將從尾到頭刪除值為 value 的元素;如果 count = 0 將移除所有值為 value 的元素

      LREM key count value

      1

      LSET

      Lset 將用于設置列表 key 中 index 位置的元素值為 element。

      LSET key index value

      1

      LINSERT

      Linsert 將用于把 element 插入到列表 key 的前面或后面。當 key 不存在時,這個list會被看作是空list,什么都不執行;當 key 存在,值不是列表類型時,返回錯誤。

      LINSERT key BEFORE|AFTER pivot value

      1

      測試上面命令:

      127.0.0.1:6379> RPUSH myarrs 1 1 1 1 2 2 # 從list的右邊開始往myarrs里面添加值 (integer) 6 127.0.0.1:6379> LRANGE myarrs 0 -1 # 返回myarrs的List中所有值 1) "1" 2) "1" 3) "1" 4) "1" 5) "2" 6) "2" 127.0.0.1:6379> LPUSH myarrs 0 0 -1 # 從list的左邊開始往myarrs里面添加值 (integer) 9 127.0.0.1:6379> LRANGE myarrs 0 -1 1) "-1" 2) "0" 3) "0" 4) "1" 5) "1" 6) "1" 7) "1" 8) "2" 9) "2" 127.0.0.1:6379> LINDEX myarrs -2 # 根據索引返回List中的值 "2" 127.0.0.1:6379> LLEN myarrs # 返回List中元素個數 (integer) 9

      1

      2

      【新聞推薦系統】(task2)Redis篇(上)

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      LREM將用于從列表 key 中刪除前 count 個值等于 element 的元素。 這個 count 參數通過下面幾種方式影響這個操作,如果count > 0, 從頭到尾刪除值為 value 的元素;如果

      count < 0,將從尾到頭刪除值為 value 的元素

      如果 count = 0 將移除所有值為 value 的元素

      LREM key count value

      1

      如下第一句即從頭開始算,刪除前2個value值為1的鍵值對:

      127.0.0.1:6379> LREM myarrs 2 1 # 刪除myarrs中的1 count為2 所以從頭往尾刪除兩個1 (integer) 2 127.0.0.1:6379> LRANGE myarrs 0 -1 1) "-1" 2) "0" 3) "0" 4) "1" 5) "1" 6) "2" 7) "2" 127.0.0.1:6379> LREM myarrs -1 1 # 刪除myarrs中的1 count為-1 所以從尾往頭刪除1個1 (integer) 1 127.0.0.1:6379> LRANGE myarrs 0 -1 1) "-1" 2) "0" 3) "0" 4) "1" 5) "2" 6) "2"

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      如果 count = 0 將移除所有值為 value 的元素:

      127.0.0.1:6379> LREM myarrs 0 2 # 刪除myarrs中的2 count為0 刪除所有等于2的元素 (integer) 2 127.0.0.1:6379> LRANGE myarrs 0 -1 1) "-1" 2) "0" 3) "0" 4) "1" 127.0.0.1:6379> LSET myarrs 2 5 # 根據索引設置myarrs的值,將索引為2 的位置賦值為5 OK 127.0.0.1:6379> LRANGE myarrs 0 -1 1) "-1" 2) "0" 3) "5" 4) "1" 127.0.0.1:6379> LINSERT myarrs before 5 4 # 在第一個值為5的位置的前面插入一個4 (integer) 5 127.0.0.1:6379> LRANGE myarrs 0 -1 1) "-1" 2) "0" 3) "4" 4) "5" 5) "1"

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      5、哈希類型—hash命令:

      hash類似于java中的HashMap,在Reids中做了更多的優化。此外hash是一個string類型的field和value的映射表,特別適合用于存儲對象。例如我們可以借用hash數據結構來存儲用戶信息,商品信息等。

      HSET

      Hset 命令用于為存儲在 key 中的哈希表的 field 字段賦值 value 。如果哈希表不存在,一個新的哈希表被創建并進行 HSET 操作。如果字段(field)已經存在于哈希表中,舊值將被覆蓋。

      HSET key field value

      1

      HGET

      Hget 命令用于返回哈希表中指定字段 field 的值。如果給定的字段或 key 不存在時,返回 nil 。

      HGET key field

      1

      HMSET

      Hmset 命令用于同時將多個 field-value (字段-值)對設置到哈希表中。此命令會覆蓋哈希表中已存在的字段,如果哈希表不存在,會創建一個空哈希表,并執行 HMSET 操作。

      HMSET key field value [field value ...]

      1

      HGETALL

      Hgetall 命令用于返回存儲在 key 中的哈希表中所有的域和值。返回值以列表形式返回哈希表的字段及字段值,若 key 不存在,返回空列表。

      HGETALL key

      1

      HDEL

      Hdel 命令用于刪除哈希表 key 中的一個或多個指定域,不存在的域將被忽略。 如果 key 不存在,會被當作空哈希表處理并返回 0 。

      HDEL key field [field ...]

      1

      HEXISTS

      Hexists 命令用于查看哈希表的指定字段field 是否存在。如果表含有給定字段field會返回1,否則返回0。

      HEXISTS key field

      1

      HKEYS

      Hkeys返回存儲在 key 中哈希表的所有域。當 key 不存在時,返回空表。

      HKEYS key

      1

      HVALS

      Hvals 命令返回哈希表所有域(field)的值。當 key 不存在時,返回空表。

      HVALS key

      1

      測試以上命令

      127.0.0.1:6379> HSET userinfo name jiangyou # 創建新的hash表,并存入對象userinfo的name屬性 (integer) 1 # 返回賦值成功域的個數 127.0.0.1:6379> HSET userinfo age 26 home liaoming school neu # 設置userinfo對象的多個域的值 (integer) 3 # 返回賦值成功域的個數 127.0.0.1:6379> HKEYS userinfo # 查看userinfo的所有域的名 1) "name" 2) "age" 3) "home" 4) "school" 127.0.0.1:6379> HKEYS users # 當key不存在時,返回空 (empty list or set) 127.0.0.1:6379> HVALS userinfo # 返回key值的所有域的值 1) "jiangyou" 2) "26" 3) "liaoming" 4) "neu" 127.0.0.1:6379> HEXISTS userinfo name # 查看哈希表的指定字段`name` 該字段存在,返回1 (integer) 1 127.0.0.1:6379> HEXISTS userinfo addr # 查看哈希表的指定字段`addr` 該字段存在,返回0 (integer) 0 127.0.0.1:6379> HGETALL userinfo # 查看哈希表中存儲在 `key` 中的所有的域和值 1) "name" 2) "jiangyou" 3) "age" 4) "26" 5) "home" 6) "liaoming" 7) "school" 8) "neu" 127.0.0.1:6379> HGETALL users # `key` 不存在,會被當作空哈希表處理并返回。 (empty list or set) 127.0.0.1:6379> HDEL userinfo school home # 刪除哈希表 key 中的一個或多個指定域,返回的為成功刪除的域的個數。 (integer) 2 127.0.0.1:6379> HGETALL userinfo 1) "name" 2) "jiangyou" 3) "age" 4) "26"

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      30

      31

      32

      33

      34

      35

      36

      37

      38

      6、集合類型—set命令:

      SADD

      Sadd 將命令將一個或多個成員元素加入到集合中,已經存在于集合的成員元素將被忽略。假如集合 key 不存在,則創建一個只包含被添加的元素作為成員的集合。當集合 key 不是集合類型時,返回一個錯誤。

      SADD key member [member ...]

      1

      SMEMBERS

      Smembers 將返回存儲在 key 中的集合的所有的成員。 不存在的集合被視為空集合。

      SMEMBERS key

      1

      SISMEMBER

      Sismember 將用于判斷元素 member 是否集合 key 的成員。如果成員元素是集合的成員,返回 1 ;如果成員元素不是集合的成員,或 key 不存在,返回0。

      SISMEMBER key member

      1

      SCARD

      Scard 將返回集合中元素的數量。

      SCARD key

      1

      SREM

      Srem將在集合中刪除指定的元素。如果指定的元素不是集合成員則被忽略。如果集合 key 不存在則被視為一個空的集合,該命令返回0。如果key的類型不是一個集合,則返回錯誤。

      SCARD key member [member ...]

      1

      SRANDMEMBER

      Srandmember 將僅使用key 參數,那么隨機返回集合key 中的一個隨機元素。如果count是整數且小于元素的個數,返回含有 count 個不同的元素的數組,如果count是個整數且大于集合中元素的個數時,返回整個集合的所有元素,當count是負數,則會返回一個包含count的絕對值的個數元素的數組,如果count的絕對值大于元素的個數,則返回的結果集里會出現一個元素出現多次的情況。

      SRANDMEMBER key [count]

      1

      SPOP

      Spop 將從集合 key中刪除并返回一個或多個隨機元素。這個命令和 SRANDMEMBER相似, SRANDMEMBER 只返回隨機成員但是不刪除這些返回的成員。

      SRANDMEMBER key [count]

      1

      測試以上命令

      127.0.0.1:6379> SADD name zhangsan lisi wangwu # 賦值key為name的set集合,返回賦值成功的個數 (integer) 3 127.0.0.1:6379> SMEMBERS name # 查看存儲在name中的集合的所有的成員。 1) "zhangsan" 2) "lisi" 3) "wangwu" 127.0.0.1:6379> SISMEMBER name zhangsan # 判斷元素 zhangsan 是否集合 name 的成員,如果是 返回1 (integer) 1 127.0.0.1:6379> SISMEMBER name xuliu # 判斷元素 xuliu 是否集合 name 的成員,如果不是 返回0 (integer) 0 127.0.0.1:6379> SCARD name (integer) 3 127.0.0.1:6379> SREM name zhangsan xuliu # 刪除 name 的成員,如果存在直接刪除,否則忽略。返回刪除成功的元素個數 (integer) 1 127.0.0.1:6379> SMEMBERS name 1) "lisi" 2) "wangwu" 127.0.0.1:6379> SRANDMEMBER name 5 # 隨機返回集合name中的一個隨機元素,count為5 大于集合個數,返回整個集合元素 1) "lisi" 2) "wangwu" 127.0.0.1:6379> SRANDMEMBER name 1 # 隨機返回集合name中的一個隨機元素,count為1 隨機返回集合中任意一個元素 1) "wangwu" 127.0.0.1:6379> SRANDMEMBER name -5 # 隨機返回集合name中的一個隨機元素,count為-5 返回的結果集里會出現一個元素出現多次 1) "wangwu" 2) "lisi" 3) "lisi" 4) "lisi" 5) "wangwu" 127.0.0.1:6379> SPOP name 0 # 隨機刪除并返回集合name中的一個或多個隨機元素,count為0 返回的結果集里不會出現任何元素 (empty array) 127.0.0.1:6379> SPOP name 1 # 隨機刪除并返回集合name中的一個或多個隨機元素,count為1 返回的結果集里會出現一個元素出現多次 1) "lisi" 127.0.0.1:6379> SPOP name -5 # 隨機刪除并返回集合name中的一個或多個隨機元素,count 不能為負數。 (error) ERR value is out of range, must be positive

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      30

      31

      32

      33

      34

      7、有序集合類型—sortedset命令:

      ZADD

      Zadd 將一個或多個 member 元素及其 score 值加入到有序集 key 當中。如果某個 member 已經是有序集的成員,那么更新這個 member 的 score 值,并通過重新插入這個 member 元素,來保證該 member 在正確的位置上。如果有序集合 key 不存在,則創建一個空的有序集并執行 ZADD操作。當 key 存在但不是有序集類型時,返回一個錯誤。score 值可以是整數值或雙精度浮點數,score 可為正也可以為負。

      ZADD key [NX|XX] [CH] [INCR] score member [score member ...]

      1

      XX: 僅更新存在的成員,不添加新成員。

      NX: 不更新存在的成員。只添加新成員。

      LT: 更新新的分值比當前分值小的成員,不存在則新增。

      GT: 更新新的分值比當前分值大的成員,不存在則新增。

      CH: 返回變更成員的數量。變更的成員是指 新增成員 和 score值更新的成員,命令指明的和之前score值相同的成員不計在內。 注意: 在通常情況下,ZADD返回值只計算新添加成員的數量。

      INCR: ZADD 使用該參數與 ZINCRBY 功能一樣。一次只能操作一個score-element對。

      ZRANG

      Zrange將返回有序集中,指定區間內(閉區間)的成員,其中成員的按分數值遞增(從小到大)來排序,具有相同分數值的成員按字典序(lexicographical order )來排列。如果你需要成員按值遞減(從大到小)來排列,可以使用 ZREVRANGE命令。下標參數 start 和 stop 都以 0 為底,也就是說,以 0 表示有序集第一個成員,以 1 表示有序集第二個成員,以此類推。其中 start和stop參數的細節同 ZRANG命令。

      ZRANGE key start stop [WITHSCORES]

      1

      ZREVRANGE

      Zervrange 將返回有序集key中,指定區間內的成員。其中成員的位置按score值遞減(從高到低)來排列。具有相同score值的成員按字典序的反序排列。 除了成員排序相反外,ZREVRANGE命令的其他方面和ZRANGE命令一樣。

      ZREVRANGE key start stop [WITHSCORES]

      1

      ZREM

      Zrem 將從有序集合key中刪除指定的成員member。如果member不存在則被忽略。當key存在,但是不是有序集合類型時,返回類型錯誤。返回的是從有序集合中刪除的成員個數,不包括不存在的成員。

      ZREM key member [member ...]

      1

      ZCARD

      Zcard 將返回有序集的成員個數。 當 key 不存在時,返回 0 。

      ZCARD key

      1

      ZRANGEBYSCORE

      該指令將返回有序集 key 中,所有 score 值介于 min 和 max 之間(包括等于 min 或 max )的成員。有序集成員按 score 值遞增(從小到大)次序排列。具有相同 score 值的成員按字典序來排列(該屬性是有序集提供的,不需要額外的計算)。可選的 LIMIT 參數指定返回結果的數量及區間(就像SQL中的 SELECT LIMIT offset, count ),注意當 offset 很大時,定位 offset 的操作可能需要遍歷整個有序集,此過程最壞復雜度為 O(N) 時間。可選的 WITHSCORES 參數決定結果集是單單返回有序集的成員,還是將有序集成員及其 score 值一起返回。

      ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

      1

      ZREVRANGEBYSCORE

      該指令將返回有序集合中指定分數區間的成員列表。有序集成員按分數值遞增(從小到大)次序排列。具有相同分數值的成員按字典序來排列(該屬性是有序集提供的,不需要額外的計算)。默認情況下,區間的取值使用閉區間 (小于等于或大于等于),你也可以通過給參數前增加 ( 符號來使用可選的開區間 (小于或大于)。可選的LIMIT參數指定返回結果的數量及區間(類似SQL中SELECT LIMIT offset, count)。注意,如果offset太大,定位offset就可能遍歷整個有序集合,這會增加O(N)的復雜度。可選參數WITHSCORES會返回元素和其分數,而不只是元素。

      ZREVRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

      1

      ZCOUNT

      Zcount 將返回有序集 key 中, score 值在 min 和 max 之間(默認包括 score 值等于 min 或 max )的成員的數量。

      ZCOUNT key min max

      1

      1.3 使用Redis DeskTop Manager

      啟動Redis服務端的時候會有默認端口6379,這里用默認端口配置連接。

      配置如下:

      1)定一個名稱,

      隨意

      2)服務端地址,域名或ID,

      3)Redis 端口,默認 6379

      4)如果設置了連接密碼,那么需要設置密碼

      配置好之后點擊 Test Connection 按鈕,看是否可以連接成功,如果失敗請檢查一下配置信息。登錄后是這樣的界面:

      Reference

      (1)datawhale notebook

      (2)window下redis的基本操作命令

      (3)Redis DeskTop Manager 使用教程

      (4)redis中文官方文檔:http://www.redis.cn/commands/hset.html

      Redis 推薦系統

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:華為物聯網行業應用于解決方案之智慧園區&智能電網解決方案介紹
      下一篇:編寫高性能Java代碼的最佳實踐
      相關文章
      亚洲爆乳无码专区www| 亚洲一区在线免费观看| jzzijzzij在线观看亚洲熟妇| 亚洲日本va在线观看| 亚洲小视频在线播放| 亚洲精品91在线| 亚洲欧洲日本国产| 亚洲成电影在线观看青青| 亚洲人成依人成综合网| 亚洲产国偷V产偷V自拍色戒| 亚洲动漫精品无码av天堂| 亚洲国产精品成人精品无码区在线 | 国产成人亚洲精品电影| 亚洲AV无码国产一区二区三区 | 亚洲人成网站色7799| 亚洲乱码无限2021芒果| xxx毛茸茸的亚洲| 最新亚洲卡一卡二卡三新区| 亚洲国产日韩综合久久精品| 亚洲综合在线一区二区三区| 亚洲人成色99999在线观看| 亚洲国产一区二区三区在线观看 | 亚洲一区二区三区电影| 亚洲视频网站在线观看| 亚洲成年人免费网站| 波多野结衣亚洲一级| 亚洲色一区二区三区四区| 亚洲成a∧人片在线观看无码| 欧洲亚洲国产精华液| 亚洲AV日韩精品一区二区三区| 亚洲精品国产综合久久一线| 久久久久亚洲AV无码专区网站| 亚洲乱码国产乱码精品精| 久久久亚洲精品视频| 亚洲激情视频网站| 中文字幕亚洲情99在线| 在线观看亚洲免费视频| 成人午夜亚洲精品无码网站| 亚洲AV日韩精品久久久久久久| 亚洲欧洲日本天天堂在线观看| 亚洲乱亚洲乱妇无码|