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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Docker使用redis

發布時間:2023/12/9 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Docker使用redis 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • Docker使用redis
    • 1.拉取鏡像
    • 2.Redis基本命令使用
      • a.鍵key
      • b.String命令
        • GETRANGE
        • GETSET
        • Append
        • Decrby
        • Incrby
        • Incrbyfloat
        • Strlen
        • GetBit SETBIT
        • DUMP
      • c.Hash命令
        • Hget
        • Hkeys
        • Hlen
        • Hvals
      • d.LIST命令
        • Lpush
        • Rpop
        • Rpush
        • Lset
        • Lrem
      • e.SET命令
        • Sunion
        • Sismember
        • Sdiff
        • Spop
        • Srem
      • f.ZSET命令
      • g.HyperLogLog命令
      • h.發布與訂閱
    • 3.其他功能
      • a.數據備份與恢復
        • Redis 數據備份與恢復
        • 語法
        • 實例
        • 恢復數據
        • Bgsave
        • 實例
      • b.Redis安全
      • c.Redis 性能測試
        • 語法
      • d.Redis 分區
        • 分區的優勢
        • 分區的不足
        • 分區類型
          • 范圍分區
          • 哈希分區
      • e.Redis 管道技術
        • 實例
      • f.Redis GEO

Docker使用redis

1.拉取鏡像

docker search redis # 查詢redis鏡像 docker pull redis # 默認拉取最新版鏡像 docekr pull redis:tag 指定版本 docker iamges # 查看是否拉取成功docker run -p 6379:6379 --name myredis -d redis # 指定映射端口,后臺啟動redis容器docker ps -a # 查看容器是否啟動成功docker exec -it myredis redis-cli #進入redis客戶端> PING #PING 命令,該命令用于檢測 redis 服務是否啟動。

2.Redis基本命令使用

Redis的命令大小寫不敏感,但是key和value大小寫敏感。

命令提供tab補全

a.鍵key

  • DEL KEY

存在則刪除key,返回 (integer) 1 ,否則 (integer) 0

  • EXISTS key

檢查給定 key 是否存在。

  • **keys *** 獲取所有key

  • set key value 設置鍵和值,若已存在則會覆蓋
  • get key 獲取key的值,不存在返回nil
  • mset key1 value1 key2 value2 key3 value3 同時設置多個key-value
  • mget key1 key2 key3 同時獲取多個key 的值

  • expire key 10 10秒過期,到期后會自動刪除key

  • PEXPIRE key 1000 以毫秒為單位,設置過期時間,到期自動刪除。

  • PERSIST key 移除給定 key 的過期時間,使得 key 永不過期。當過期時間移除成功時,返回 1 。 如果 key 不存在或 key 沒有設置過期時間,返回 0

  • TTL key 當 key 不存在時,返回 -2 。 當 key 存在但沒有設置剩余生存時間時,返回 -1 。 否則,以秒為單位,返回 key 的剩余生存時間。

  • PTTL key 當 key 不存在時,返回 -2 。 當 key 存在但沒有設置剩余生存時間時,返回 -1 。 否則,以毫秒為單位,返回 key 的剩余生存時間。

  • RANDOMKEY 當數據庫不為空時,返回一個 key 。 當數據庫為空時,返回 nil (windows 系統返回 null)。

  • RENAME OLD_KEY_NAME NEW_KEY_NAME

    改名成功時提示 OK ,失敗時候返回一個錯誤。

    當 OLD_KEY_NAME 和 NEW_KEY_NAME 相同,或者 OLD_KEY_NAME 不存在時,返回一個錯誤。 當 NEW_KEY_NAME 已經存在時, RENAME 命令將覆蓋舊值。

  • type key

    返回 key 的數據類型,數據類型有:

    • none (key不存在)
    • string (字符串)
    • list (列表)
    • set (集合)
    • zset (有序集)
    • hash (哈希表)
  • renamenx old_key new_key 命令用于在新的 key 不存在時修改 key 的名稱,修改成功時,返回 1 。 如果 NEW_KEY_NAME 已經存在,返回 0 。

  • MOVE KEY_NAME DESTINATION_DATABASE 將當前數據庫的 key 移動到給定的數據庫 db 當中,移動成功返回 1 ,失敗則返回 0 。

若key在原庫中不存在 移動失敗

若存在相同key,移動失敗。

  • KEYS PATTERN 用于查找所有符合給定模式 pattern 的 key 。符合給定模式的 key 列表 (Array)。

  • expireat key_name TIME_IN_UNIX_TIMESTAMP 用于以 UNIX 時間戳(unix timestamp)格式設置 key 的過期時間。key 過期后將不再可用。

  • SCAN cursor [MATCH pattern] [COUNT count]

SCAN 命令是一個基于游標的迭代器,每次被調用之后, 都會向用戶返回一個新的游標, 用戶在下次迭代時需要使用這個新游標作為 SCAN 命令的游標參數, 以此來延續之前的迭代過程。

SCAN 返回一個包含兩個元素的數組, 第一個元素是用于進行下一次迭代的新游標, 而第二個元素則是一個數組, 這個數組中包含了所有被迭代的元素。如果新游標返回 0 表示迭代已結束。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-FxZfZwLL-1646916295021)(C:\Users\HeHao\AppData\Roaming\Typora\typora-user-images\image-20220310193742197.png)]

  • select 0 選擇第一個庫(默認選擇0)
flush db 清除指定庫

b.String命令

GETRANGE

GETRANGE KEY_NAME start end

截取得到的子字符串。

redis 127.0.0.1:6379> SET mykey "This is my test key" OK redis 127.0.0.1:6379> GETRANGE mykey 0 3 "This" redis 127.0.0.1:6379> GETRANGE mykey 0 -1 "This is my test key"

GETSET

GETSET KEY_NAME VALUE

返回給定 key 的舊值。 當 key 沒有舊值時,即 key 不存在時,返回 nil 。

當 key 存在但不是字符串類型時,返回一個錯誤。

redis> GETSET db mongodb # 沒有舊值,返回 nil (nil)redis> GET db "mongodb"redis> GETSET db redis # 返回舊值 mongodb "mongodb"redis> GET db "redis"

Setnx(SET if Not eXists) 命令在指定的 key 不存在時,為 key 設置指定的值。

SETNX KEY_NAME VALUE

Append

命令用于為指定的 key 追加值。

如果 key 已經存在并且是一個字符串, APPEND 命令將 value 追加到 key 原來的值的末尾。

如果 key 不存在, APPEND 就簡單地將給定 key 設為 value ,就像執行 SET key value 一樣。

# 對不存在的 key 執行 APPENDredis> EXISTS myphone # 確保 myphone 不存在 (integer) 0redis> APPEND myphone "nokia" # 對不存在的 key 進行 APPEND ,等同于 SET myphone "nokia" (integer) 5 # 字符長度# 對已存在的字符串進行 APPENDredis> APPEND myphone " - 1110" # 長度從 5 個字符增加到 12 個字符 (integer) 12redis> GET myphone "nokia - 1110"

Decrby

命令將 key 所儲存的值減去指定的減量值。

如果 key 不存在,那么 key 的值會先被初始化為 0 ,然后再執行 DECRBY 操作。

如果值包含錯誤的類型,或字符串類型的值不能表示為數字,那么返回一個錯誤。

本操作的值限制在 64 位(bit)有符號數字表示之內。

減去指定減量值之后, key 的值。

# 對已存在的 key 進行 DECRBYredis> SET count 100 OKredis> DECRBY count 20 (integer) 80# 對不存在的 key 進行DECRBYredis> EXISTS pages (integer) 0redis> DECRBY pages 10 (integer) -10

Incrby

命令將 key 中儲存的數字加上指定的增量值。

如果 key 不存在,那么 key 的值會先被初始化為 0 ,然后再執行 INCRBY 命令。

如果值包含錯誤的類型,或字符串類型的值不能表示為數字,那么返回一個錯誤。

本操作的值限制在 64 位(bit)有符號數字表示之內。


Incrbyfloat

命令為 key 中所儲存的值加上指定的浮點數增量值。

如果 key 不存在,那么 INCRBYFLOAT 會先將 key 的值設為 0 ,再執行加法操作。

執行命令之后 key 的值。

# 值和增量都不是指數符號redis> SET mykey 10.50 OKredis> INCRBYFLOAT mykey 0.1 "10.6"# 值和增量都是指數符號redis> SET mykey 314e-2 OKredis> GET mykey # 用 SET 設置的值可以是指數符號 "314e-2"redis> INCRBYFLOAT mykey 0 # 但執行 INCRBYFLOAT 之后格式會被改成非指數符號 "3.14"# 可以對整數類型執行redis> SET mykey 3 OKredis> INCRBYFLOAT mykey 1.1 "4.1"# 后跟的 0 會被移除redis> SET mykey 3.0 OKredis> GET mykey # SET 設置的值小數部分可以是 0 "3.0"redis> INCRBYFLOAT mykey 1.000000000000000000000 # 但 INCRBYFLOAT 會將無用的 0 忽略掉,有需要的話,將浮點變為整數 "4"redis> GET mykey "4"

Strlen

命令用于獲取指定 key 所儲存的字符串值的長度。當 key 儲存的不是字符串值時,返回一個錯誤。

字符串值的長度。 當 key 不存在時,返回 0。


GetBit SETBIT

怎么理解呢?什么是指定偏移量?
在計算機里所有的數據都是以二進制的形式存儲的,每一個非中文字符占一個字節(Byte),中文字符占兩個字節,而一個字節又是占8bit。
我們先設置一個key-value對:

在Redis中的存儲形式轉換成二進制就是:011000100110000101110010,而偏移量實際上指的就是從左往右數,偏移量是幾就是第幾位,偏移量0就是第0位。
言歸正傳,GETBIT的用法就是獲取指定偏移量的bit,就很容易理解了吧,為了看清楚把上面的二進制換行一下

01100010 01100001 01110010

而第一個字符‘b’的每一位如下圖所示:

相信看到這里大家應該就明白了GETBIT的用法,那么SETBIT也就不言而喻了。
設置或清除指定偏移量上的位(bit),指的就是修改指定偏移量的值,當然在二進制中只有0和1,如果設置其他的值就會報錯:

那我們現在操作一下,把偏移量為2的bit修改成0,再打印出來:(01100010→01000010)

原來的‘b’就變成了’B’。

以上就是GETBIT和SETBIT的用法理解。


DUMP

命令用于序列化給定 key ,并返回被序列化的值。

序列化就是轉化成計算機可理解的形式儲存。


c.Hash命令

Redis hash 是一個 string 類型的 field(字段) 和 value(值) 的映射表,hash 特別適合用于存儲對象。

Redis 中每個 hash 可以存儲 232 - 1 鍵值對(40多億)。

127.0.0.1:6379> HMSET runoobkey name "redis tutorial" description "redis basic commands for caching" likes 20 visitors 23000 OK 127.0.0.1:6379> HGETALL runoobkey 1) "name" 2) "redis tutorial" 3) "description" 4) "redis basic commands for caching" 5) "likes" 6) "20" 7) "visitors" 8) "23000"

在以上實例中,我們設置了 redis 的一些描述信息(name, description, likes, visitors) 到哈希表的 runoobkey 中。

Hget

命令用于返回哈希表中指定字段的值。

返回給定字段的值。如果給定的字段或 key 不存在時,返回 nil 。

> HSET site redis redis.com 1 > HGET site redis "redis.com" > HGET site mysql (nil)

Hkeys

命令用于獲取哈希表中的所有域(field)。

包含哈希表中所有域(field)列表。 當 key 不存在時,返回一個空列表。

redis 127.0.0.1:6379> HSET myhash field1 "foo" (integer) 1 redis 127.0.0.1:6379> HSET myhash field2 "bar" (integer) 1 redis 127.0.0.1:6379> HKEYS myhash 1) "field1" 2) "field2"

Hlen

命令用于獲取哈希表中字段的數量。

redis 127.0.0.1:6379> HSET myhash field1 "foo" (integer) 1 redis 127.0.0.1:6379> HSET myhash field2 "bar" (integer) 1 redis 127.0.0.1:6379> HLEN myhash (integer) 2

Hvals

命令返回哈希表所有的值。


d.LIST命令

Lpush

命令將一個或多個值插入到列表頭部。 如果 key 不存在,一個空列表會被創建并執行 LPUSH 操作。 當 key 存在但不是列表類型時,返回一個錯誤。

127.0.0.1:6379> LPUSH list1 "foo" (integer) 1 127.0.0.1:6379> LPUSH list1 "bar" (integer) 2 127.0.0.1:6379> LRANGE list1 0 -1 1) "bar" 2) "foo"

Rpop

命令用于移除列表的最后一個元素,返回值為移除的元素。

redis> RPUSH mylist "one" (integer) 1 redis> RPUSH mylist "two" (integer) 2 redis> RPUSH mylist "three" (integer) 3 redis> RPOP mylist "three" redis> LRANGE mylist 0 -1 1) "one" 2) "two" redis>

Rpush

命令用于將一個或多個值插入到列表的尾部(最右邊)。

如果列表不存在,一個空列表會被創建并執行 RPUSH 操作。 當列表存在但不是列表類型時,返回一個錯誤。

Lset

通過索引來設置元素的值。

當索引參數超出范圍,或對一個空列表進行 LSET 時,返回一個錯誤。

redis 127.0.0.1:6379> RPUSH mylist "hello" (integer) 1 redis 127.0.0.1:6379> RPUSH mylist "hello" (integer) 2 redis 127.0.0.1:6379> RPUSH mylist "foo" (integer) 3 redis 127.0.0.1:6379> RPUSH mylist "hello" (integer) 4 redis 127.0.0.1:6379> LSET mylist 0 "bar" OK redis 127.0.0.1:6379> LRANGE mylist 0 -1 1: "bar" 2) "hello" 3) "foo" 4) "hello"

Lrem

根據參數 COUNT 的值,移除列表中與參數 VALUE 相等的元素。

COUNT 的值可以是以下幾種:

  • count > 0 : 從表頭開始向表尾搜索,移除與 VALUE 相等的元素,數量為 COUNT 。
  • count < 0 : 從表尾開始向表頭搜索,移除與 VALUE 相等的元素,數量為 COUNT 的絕對值。
  • count = 0 : 移除表中所有與 VALUE 相等的值。
redis> RPUSH mylist "hello" (integer) 1 redis> RPUSH mylist "hello" (integer) 2 redis> RPUSH mylist "foo" (integer) 3 redis> RPUSH mylist "hello" (integer) 4 redis> LREM mylist -2 "hello" (integer) 2 redis> LRANGE mylist 0 -1 1) "hello" 2) "foo" redis>

e.SET命令

Redis 的 Set 是 String 類型的無序集合。集合成員是唯一的,這就意味著集合中不能出現重復的數據。

集合對象的編碼可以是 intset 或者 hashtable。

Redis 中集合是通過哈希表實現的,所以添加,刪除,查找的復雜度都是 O(1)。

集合中最大的成員數為 232 - 1 (4294967295, 每個集合可存儲40多億個成員)。

redis 127.0.0.1:6379> SADD runoobkey redis (integer) 1 redis 127.0.0.1:6379> SADD runoobkey mongodb (integer) 1 redis 127.0.0.1:6379> SADD runoobkey mysql (integer) 1 redis 127.0.0.1:6379> SADD runoobkey mysql (integer) 0 redis 127.0.0.1:6379> SMEMBERS runoobkey1) "mysql" 2) "mongodb" 3) "redis"

Sunion

命令返回給定集合的并集。不存在的集合 key 被視為空集。

redis> SADD key1 "a" (integer) 1 redis> SADD key1 "b" (integer) 1 redis> SADD key1 "c" (integer) 1 redis> SADD key2 "c" (integer) 1 redis> SADD key2 "d" (integer) 1 redis> SADD key2 "e" (integer) 1 redis> SUNION key1 key2 1) "a" 2) "c" 3) "b" 4) "e" 5) "d" redis>

Sismember

命令判斷成員元素是否是集合的成員。

如果成員元素是集合的成員,返回 1 。 如果成員元素不是集合的成員,或 key 不存在,返回 0 。

redis 127.0.0.1:6379> SADD myset1 "hello" (integer) 1 redis 127.0.0.1:6379> SISMEMBER myset1 "hello" (integer) 1 redis 127.0.0.1:6379> SISMEMBER myset1 "world" (integer) 0

Sdiff

命令返回第一個集合與其他集合之間的差異,也可以認為說第一個集合中獨有的元素。不存在的集合 key 將視為空集。

差集的結果來自前面的 FIRST_KEY ,而不是后面的 OTHER_KEY1,也不是整個 FIRST_KEY OTHER_KEY1…OTHER_KEYN 的差集。

實例:

redis> SADD key1 "a" (integer) 1 redis> SADD key1 "b" (integer) 1 redis> SADD key1 "c" (integer) 1 redis> SADD key2 "c" (integer) 1 redis> SADD key2 "d" (integer) 1 redis> SADD key2 "e" (integer) 1 redis> SDIFF key1 key2 1) "a" 2) "b" redis>

Spop

命令用于移除集合中的指定 key 的一個或多個隨機元素,移除后會返回移除的元素。

該命令類似 Srandmember 命令,但 SPOP 將隨機元素從集合中移除并返回,而 Srandmember 則僅僅返回隨機元素,而不對集合進行任何改動。

redis> SADD myset "one" (integer) 1 redis> SADD myset "two" (integer) 1 redis> SADD myset "three" (integer) 1 redis> SPOP myset "one" redis> SMEMBERS myset 1) "three" 2) "two" redis> SADD myset "four" (integer) 1 redis> SADD myset "five" (integer) 1 redis> SPOP myset 3 1) "five" 2) "four" 3) "two" redis> SMEMBERS myset 1) "three" redis>

Srem

命令用于移除集合中的一個或多個成員元素,不存在的成員元素會被忽略。

當 key 不是集合類型,返回一個錯誤。

redis 127.0.0.1:6379> SADD myset1 "hello" (integer) 1 redis 127.0.0.1:6379> SADD myset1 "world" (integer) 1 redis 127.0.0.1:6379> SADD myset1 "bar" (integer) 1 redis 127.0.0.1:6379> SREM myset1 "hello" (integer) 1 redis 127.0.0.1:6379> SREM myset1 "foo" (integer) 0 redis 127.0.0.1:6379> SMEMBERS myset1 1) "bar" 2) "world"

f.ZSET命令

Redis Zadd 命令用于將一個或多個成員元素及其分數值加入到有序集當中。

如果某個成員已經是有序集的成員,那么更新這個成員的分數值,并通過重新插入這個成員元素,來保證該成員在正確的位置上。

分數值可以是整數值或雙精度浮點數。

如果有序集合 key 不存在,則創建一個空的有序集并執行 ZADD 操作。

當 key 存在但不是有序集類型時,返回一個錯誤。

redis> ZADD myzset 1 "one" (integer) 1 redis> ZADD myzset 1 "uno" (integer) 1 redis> ZADD myzset 2 "two" 3 "three" (integer) 2 redis> ZRANGE myzset 0 -1 WITHSCORES 1) "one" 2) "1" 3) "uno" 4) "1" 5) "two" 6) "2" 7) "three" 8) "3" redis>

g.HyperLogLog命令

Redis HyperLogLog 是用來做基數統計的算法,HyperLogLog 的優點是,在輸入元素的數量或者體積非常非常大時,計算基數所需的空間總是固定 的、并且是很小的。

在 Redis 里面,每個 HyperLogLog 鍵只需要花費 12 KB 內存,就可以計算接近 2^64 個不同元素的基 數。這和計算基數時,元素越多耗費內存就越多的集合形成鮮明對比。

但是,因為 HyperLogLog 只會根據輸入元素來計算基數,而不會儲存輸入元素本身,所以 HyperLogLog 不能像集合那樣,返回輸入的各個元素。

什么是基數?

比如數據集 {1, 3, 5, 7, 5, 7, 8}, 那么這個數據集的基數集為 {1, 3, 5 ,7, 8}, 基數(不重復元素)為5。 基數估計就是在誤差可接受的范圍內,快速計算基數。

redis 127.0.0.1:6379> PFADD runoobkey "redis"1) (integer) 1redis 127.0.0.1:6379> PFADD runoobkey "mongodb"1) (integer) 1redis 127.0.0.1:6379> PFADD runoobkey "mysql"1) (integer) 1redis 127.0.0.1:6379> PFCOUNT runoobkey(integer) 3

h.發布與訂閱

Redis 發布訂閱 (pub/sub) 是一種消息通信模式:發送者 (pub) 發送消息,訂閱者 (sub) 接收消息。

Redis 客戶端可以訂閱任意數量的頻道。

下圖展示了頻道 channel1 , 以及訂閱這個頻道的三個客戶端 —— client2 、 client5 和 client1 之間的關系:

當有新消息通過 PUBLISH 命令發送給頻道 channel1 時, 這個消息就會被發送給訂閱它的三個客戶端:


3.其他功能

a.數據備份與恢復

Redis 數據備份與恢復

Redis SAVE 命令用于創建當前數據庫的備份。

語法

redis Save 命令基本語法如下:

redis 127.0.0.1:6379> SAVE

實例

redis 127.0.0.1:6379> SAVE OK

該命令將在 redis 安裝目錄中創建dump.rdb文件。


恢復數據

如果需要恢復數據,只需將備份文件 (dump.rdb) 移動到 redis 安裝目錄并啟動服務即可。獲取 redis 目錄可以使用 CONFIG 命令,如下所示:

redis 127.0.0.1:6379> CONFIG GET dir 1) "dir" 2) "/usr/local/redis/bin"

以上命令 CONFIG GET dir 輸出的 redis 安裝目錄為 /usr/local/redis/bin。


Bgsave

創建 redis 備份文件也可以使用命令 BGSAVE,該命令在后臺執行。

實例

127.0.0.1:6379> BGSAVEBackground saving started

b.Redis安全

我們可以通過以下命令查看是否設置了密碼驗證:

127.0.0.1:6379> CONFIG get requirepass 1) "requirepass" 2) ""

默認情況下 requirepass 參數是空的,這就意味著你無需通過密碼驗證就可以連接到 redis 服務。

你可以通過以下命令來修改該參數:

127.0.0.1:6379> CONFIG set requirepass "runoob" OK 127.0.0.1:6379> CONFIG get requirepass 1) "requirepass" 2) "runoob"

AUTH 命令基本語法格式如下:

127.0.0.1:6379> AUTH password

c.Redis 性能測試

是通過同時執行多個命令實現的。

語法

redis 性能測試的基本命令如下:

redis-benchmark [option] [option value]

注意:該命令是在 redis 的目錄下執行的,而不是 redis 客戶端的內部指令。

以下實例我們使用了多個參數來測試 redis 性能:

$ redis-benchmark -h 127.0.0.1 -p 6379 -t set,lpush -n 10000 -qSET: 146198.83 requests per second LPUSH: 145560.41 requests per second

以上實例中主機為 127.0.0.1,端口號為 6379,執行的命令為 set,lpush,請求數為 10000,通過 -q 參數讓結果只顯示每秒執行的請求數。


d.Redis 分區

分區是分割數據到多個Redis實例的處理過程,因此每個實例只保存key的一個子集。

分區的優勢

  • 通過利用多臺計算機內存的和值,允許我們構造更大的數據庫。
  • 通過多核和多臺計算機,允許我們擴展計算能力;通過多臺計算機和網絡適配器,允許我們擴展網絡帶寬。

分區的不足

redis的一些特性在分區方面表現的不是很好:

  • 涉及多個key的操作通常是不被支持的。舉例來說,當兩個set映射到不同的redis實例上時,你就不能對這兩個set執行交集操作。
  • 涉及多個key的redis事務不能使用。
  • 當使用分區時,數據處理較為復雜,比如你需要處理多個rdb/aof文件,并且從多個實例和主機備份持久化文件。
  • 增加或刪除容量也比較復雜。redis集群大多數支持在運行時增加、刪除節點的透明數據平衡的能力,但是類似于客戶端分區、代理等其他系統則不支持這項特性。然而,一種叫做presharding的技術對此是有幫助的。

分區類型

Redis 有兩種類型分區。 假設有4個Redis實例 R0,R1,R2,R3,和類似user:1,user:2這樣的表示用戶的多個key,對既定的key有多種不同方式來選擇這個key存放在哪個實例中。也就是說,有不同的系統來映射某個key到某個Redis服務。

范圍分區

最簡單的分區方式是按范圍分區,就是映射一定范圍的對象到特定的Redis實例。

比如,ID從0到10000的用戶會保存到實例R0,ID從10001到 20000的用戶會保存到R1,以此類推。

這種方式是可行的,并且在實際中使用,不足就是要有一個區間范圍到實例的映射表。這個表要被管理,同時還需要各 種對象的映射表,通常對Redis來說并非是好的方法。

哈希分區

另外一種分區方法是hash分區。這對任何key都適用,也無需是object_name:這種形式,像下面描述的一樣簡單:

  • 用一個hash函數將key轉換為一個數字,比如使用crc32 hash函數。對key foobar執行crc32(foobar)會輸出類似93024922的整數。
  • 對這個整數取模,將其轉化為0-3之間的數字,就可以將這個整數映射到4個Redis實例中的一個了。93024922 % 4 = 2,就是說key foobar應該被存到R2實例中。注意:取模操作是取除的余數,通常在多種編程語言中用%操作符實現。

e.Redis 管道技術

Redis是一種基于客戶端-服務端模型以及請求/響應協議的TCP服務。這意味著通常情況下一個請求會遵循以下步驟:

  • 客戶端向服務端發送一個查詢請求,并監聽Socket返回,通常是以阻塞模式,等待服務端響應。
  • 服務端處理命令,并將結果返回給客戶端。

Redis 管道技術可以在服務端未響應時,客戶端可以繼續向服務端發送請求,并最終一次性讀取所有服務端的響應。

實例

查看 redis 管道,只需要啟動 redis 實例并輸入以下命令:

$(echo -en "PING\r\n SET runoobkey redis\r\nGET runoobkey\r\nINCR visitor\r\nINCR visitor\r\nINCR visitor\r\n"; sleep 10) | nc localhost 6379+PONG +OK redis :1 :2 :3

以上實例中我們通過使用 PING 命令查看redis服務是否可用, 之后我們設置了 runoobkey 的值為 redis,然后我們獲取 runoobkey 的值并使得 visitor 自增 3 次。

在返回的結果中我們可以看到這些命令一次性向 redis 服務提交,并最終一次性讀取所有服務端的響應


f.Redis GEO

Redis GEO 主要用于存儲地理位置信息,并對存儲的信息進行操作,該功能在 Redis 3.2 版本新增。

Redis GEO 操作方法有:

  • geoadd:添加地理位置的坐標。
  • geopos:獲取地理位置的坐標。
  • geodist:計算兩個位置之間的距離。
  • georadius:根據用戶給定的經緯度坐標來獲取指定范圍內的地理位置集合。
  • georadiusbymember:根據儲存在位置集合里面的某個地點獲取指定范圍內的地理位置集合。
  • geohash:返回一個或多個位置對象的 geohash 值。
redis> GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania" (integer) 2 redis> GEODIST Sicily Palermo Catania "166274.1516" redis> GEORADIUS Sicily 15 37 100 km 1) "Catania" redis> GEORADIUS Sicily 15 37 200 km 1) "Palermo" 2) "Catania" redis>

總結

以上是生活随笔為你收集整理的Docker使用redis的全部內容,希望文章能夠幫你解決所遇到的問題。

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