Redis-經常使用操做詳解

Redis鏈接

Redis安裝配置,參考上一篇博文redis

redis數據是以key-value方式存儲,key永遠都是string類型,value能夠是String、List、Set、Sorted-Sets、Hash,鏈接redis服務器,默認是第一個數據庫數據庫

進入目錄cd /usr/local/redis/bin/服務器

鏈接redis./redis-cli,出現127.0.0.1:6379>則鏈接成功app

默認有16個數據庫,db0~15dom

切換數據庫select index select 1 索引從0開始測試

顯示全部的key鍵keys *,能夠用tab鍵補全命令,補全命令爲大寫ui

Redis基本命令 String

  • set,設置鍵 set name test1spa

  • get,獲取鍵值get nameunix

  • exist,判斷鍵是否存在,返回1存在和0不存在exist namecode

  • append,若是鍵不存在則建立該鍵,返回鍵的值長度;若是鍵存在則追加,返回追加後值長度append name test1

    • 若是值有空格,則須要加引號append name "zhang san"

  • strlen,獲取key的長度strlen name

  • EX、PX表示失效時間,單位爲秒和毫秒,不能同時使用,NX表示數據庫中不存在時才能設置,XX表示存在時才能設置set key value [expiration EX seconds|PX milliseconds] [NX|XX]

  • ttl查看過時剩餘時間,-2表示過時

    127.0.0.1:6379> set job tester1 EX 10 NX
    OK
    127.0.0.1:6379> ttl job
    (integer) 6
    127.0.0.1:6379> ttl job
    (integer) 5
    127.0.0.1:6379> ttl job
    (integer) 4
    127.0.0.1:6379> ttl job
    (integer) 3
    127.0.0.1:6379> ttl job
    (integer) 2
    127.0.0.1:6379> ttl job
    (integer) 2
    127.0.0.1:6379> ttl job
    (integer) 1
    127.0.0.1:6379> ttl job
    (integer) -2
    127.0.0.1:6379> ttl job

    進行第二次set設置,ttl值會顯示-1

    127.0.0.1:6379> set job tester1
    OK
    127.0.0.1:6379> set job tester1 EX 10 NX
    (nil)
    127.0.0.1:6379> ttl job
    (integer) -1
  • flushdb,清空數據庫flushdb 查看全部key鍵則會顯示(empty list or set)

  • incr,遞增1

    127.0.0.1:6379> set age 22
    OK
    127.0.0.1:6379> incr age
    (integer) 23
    127.0.0.1:6379> get age
    "23"
  • decr,遞減1

    127.0.0.1:6379> get age
    "23"
    127.0.0.1:6379> decr age
    (integer) 22
    127.0.0.1:6379> get age
    "22"
  • del,刪除鍵,刪除後還能夠用incr遞增、decr遞減進行操做,可是基於默認值0

    127.0.0.1:6379> del age
    (integer) 1
    127.0.0.1:6379> get age
    (nil)
    127.0.0.1:6379> incr age
    (integer) 1
    127.0.0.1:6379> get age
    "1"
    127.0.0.1:6379> decr age
    (integer) 0
    127.0.0.1:6379> get age
    "0"

    下面字符串能轉換爲整型

    127.0.0.1:6379> set age "22"
    OK
    127.0.0.1:6379> get age
    "22"
    127.0.0.1:6379> incr age
    (integer) 23
    127.0.0.1:6379> get age
    "23"

    下面字符串不能轉換爲整型

    127.0.0.1:6379> set age "hello"
    OK
    127.0.0.1:6379> incr age
    (error) ERR value is not an integer or out of range
  • incrby,遞增,能夠設置步長

    127.0.0.1:6379> set age 20
    OK
    127.0.0.1:6379> incrby age 5
    (integer) 25
    127.0.0.1:6379> get age
    "25"

    不加步長會報錯

    127.0.0.1:6379> incrby age
    (error) ERR wrong number of arguments for 'incrby' command
  • decrby,遞減,能夠設置步長

  • getset,獲取值並設置新的值

    127.0.0.1:6379> get age
    "25"
    127.0.0.1:6379>
    127.0.0.1:6379> getset age 30
    "25"
    127.0.0.1:6379> get age
    "30"
  • setex,設置過時時間

    setex key seconds value,等同於set key value ex seconds

  • setnx,當key不存在時,才能設置,等同於set key value nx,key存在則不能設置

  • setrange,設置指定索引位置的字符,索引0開始

    從索引爲6的位置開始替換 setrange key offset value

    127.0.0.1:6379> set age "hello world"
    OK
    127.0.0.1:6379> get age
    "hello world"
    127.0.0.1:6379> setrange age 6 job
    (integer) 11
    127.0.0.1:6379> get age
    "hello jobld"

    超過的長度使用0代替

    127.0.0.1:6379> setrange age 20 job
    (integer) 23
    127.0.0.1:6379> get age
    "hello jobld\x00\x00\x00\x00\x00\x00\x00\x00\x00job"
  • getrange,獲取指定索引位置的字符,索引0開始getrange key start end

    獲取閉合區間裏的值,[1,3]

    127.0.0.1:6379> set age "hello world"
    OK
    127.0.0.1:6379> getrange age 1 3
    "ell"
  • mset,批量設置keymset key value [key value ...]

  • mget,批量獲取keymget key [key ...]

    127.0.0.1:6379> mset job1 1 job2 2 job3 3
    OK
    127.0.0.1:6379> mget job1 job2 job3
    1) "1"
    2) "2"
    3) "3"
  • msetnx,批量設置key,若是key都不存在則成功返回1,如有一個存在則失敗返回0

    msetnx j 1 k 2 l 3 [key

Redis基本命令 List

  • lpush,建立鍵及其關聯的List,而後將參數values從左到右排序

  • lrange獲取從位置0到位置2的元素,0 -1獲取所有元素,-3 -2獲取倒數第3個到第2個元素,0 0獲取第一個元素

    127.0.0.1:6379> lpush age 1 2 3 4
    (integer) 4
    127.0.0.1:6379> lrange age 0 2
    1) "4"
    2) "3"
    3) "2"
    127.0.0.1:6379> lrange age 0 -1
    1) "4"
    2) "3"
    3) "2"
    4) "1"
    127.0.0.1:6379> lrange age -3 -2
    1) "3"
    2) "2"
    127.0.0.1:6379> lrange age 0 0
    1) "4"
  • type,查看數據類型type age

  • lpushx,鍵存在時才能插入,不存在返回0

    127.0.0.1:6379> lpushx age123 1 2
    (integer) 0
    127.0.0.1:6379> lpushx age 1 2
    (integer) 6
    127.0.0.1:6379> lrange age 0 -1
    1) "2"
    2) "1"
    3) "4"
    4) "3"
    5) "2"
    6) "1"
  • lpop,卻出鏈表頭部的元素,至關於刪除

    127.0.0.1:6379> lrange age 0 -1
    1) "1"
    2) "4"
    3) "3"
    4) "2"
    5) "1"
    127.0.0.1:6379> lpop age
    "1"
    127.0.0.1:6379> lrange age 0 -1
    1) "4"
    2) "3"
    3) "2"
    4) "1"
  • llen,返回列表長度

    127.0.0.1:6379> lrange age 0 -1
    1) "4"
    2) "3"
    3) "2"
    4) "1"
    127.0.0.1:6379> llen age
    (integer) 4
  • lrem,刪除幾個值等於x的元素,並返回個數

    127.0.0.1:6379> flushdb
    OK
    127.0.0.1:6379> lpush age 1 1 2 3 3 4 5
    (integer) 7
    127.0.0.1:6379> lrem age 2 1
    (integer) 2
    127.0.0.1:6379> lrange age 0 -1
    1) "5"
    2) "4"
    3) "3"
    4) "3"
    5) "2"
  • lindex,獲取索引對應的值

    127.0.0.1:6379> lrange age 0 -1
    1) "5"
    2) "4"
    3) "3"
    4) "3"
    5) "2"
    127.0.0.1:6379> lindex age 1
    "4"
    127.0.0.1:6379> lindex age 0
    "5"

    索引值超過鏈表中元素數量,則返回nil

  • lset,修改索引對應的元素值

    127.0.0.1:6379> lrange age 0 -1
    1) "5"
    2) "4"
    3) "3"
    4) "3"
    5) "2"
    127.0.0.1:6379> lset age 0 a
    OK
    127.0.0.1:6379> lrange age 0 -1
    1) "a"
    2) "4"
    3) "3"
    4) "3"
    5) "2"

    設置的索引值超過鏈表中的元素數量,則返回error

  • ltrim,僅保留索引之間的元素,索引值倆邊也被保留

    127.0.0.1:6379> lrange age 0 -1
    1) "a"
    2) "4"
    3) "3"
    4) "3"
    5) "2"
    127.0.0.1:6379> ltrim age 0 2
    OK
    127.0.0.1:6379> lrange age 0 -1
    1) "a"
    2) "4"
    3) "3"
  • linset,在具體值前面插入新元素或者後面插入新元素linsert key BEFORE|AFTER pivot value

    127.0.0.1:6379> lrange age 0 -1
    1) "c"
    2) "b"
    3) "a"
    4) "a"
    5) "4"
    6) "3"
    127.0.0.1:6379> linsert age before c d
    (integer) 7
    127.0.0.1:6379> lrange age 0 -1
    1) "d"
    2) "c"
    3) "b"
    4) "a"
    5) "a"
    6) "4"
    7) "3"
    127.0.0.1:6379> linsert age after c ff
    (integer) 8
    127.0.0.1:6379> lrange age 0 -1
    1) "d"
    2) "c"
    3) "ff"
    4) "b"
    5) "a"
    6) "a"
    7) "4"
    8) "3"
  • rpush,從鏈表尾部插入參數,順序是從右到左依次插入

    127.0.0.1:6379> rpush age a b c d e
    (integer) 5
    127.0.0.1:6379> lrange age 0 -1
    1) "a"
    2) "b"
    3) "c"
    4) "d"
    5) "e"
  • rpushx,將元素插入鏈表尾部

    127.0.0.1:6379> rpushx age f
    (integer) 6
    127.0.0.1:6379> lrange age 0 -1
    1) "a"
    2) "b"
    3) "c"
    4) "d"
    5) "e"
    6) "f"
  • rpop,從鏈表尾部取出元素,至關於刪除

    127.0.0.1:6379> lrange age 0 -1
    1) "a"
    2) "b"
    3) "c"
    4) "d"
    5) "e"
    6) "f"
    127.0.0.1:6379> rpop age
    "f"
    127.0.0.1:6379> lrange age 0 -1
    1) "a"
    2) "b"
    3) "c"
    4) "d"
    5) "e"
  • rpoplpush,將一個鏈表的元素最後一位取出,添加到另一個鏈表的頭部

    127.0.0.1:6379> lrange age 0 -1
    1) "a"
    2) "b"
    3) "c"
    4) "d"
    5) "e"
    127.0.0.1:6379> lrange age1 0 -1
    1) "3"
    2) "2"
    3) "1"
    127.0.0.1:6379> rpoplpush age age1
    "e"
    127.0.0.1:6379> lrange age1 0 -1
    1) "e"
    2) "3"
    3) "2"
    4) "1"

    將source和destination設爲同一鍵,將鏈表中的尾部元素移到其頭部

    127.0.0.1:6379> lrange age 0 -1
    1) "d"
    2) "a"
    3) "b"
    4) "c"
    127.0.0.1:6379> rpoplpush age age
    "c"
    127.0.0.1:6379> lrange age 0 -1
    1) "c"
    2) "d"
    3) "a"
    4) "b"

Redis基本命令 Set

  • sadd,當鍵不存在,才能成功插入多個元素sadd age 1 2 3

    不能插入重複數據

    127.0.0.1:6379> smembers age
    1) "1"
    2) "2"
    3) "3"
    4) "123"
    127.0.0.1:6379> sadd age 1 4 5
    (integer) 2
    127.0.0.1:6379> smembers age
    1) "1"
    2) "2"
    3) "3"
    4) "4"
    5) "5"
    6) "123"
  • smembers,查看集合中的元素smembers age

  • sismember,判斷元素是否存在,存在返回1,不存在返回0

    127.0.0.1:6379> sismember age 9
    (integer) 0
    127.0.0.1:6379> sismember age 1
    (integer) 1
  • scard,獲取集合元素數量scard age

  • srandmember,隨機返回一個成員,但仍是存在集合中srandmember age

  • spop,隨機取出一個成員,集合中就被刪除了spop age

  • srem,從集合中取出元素,只會提取存在的元素

    127.0.0.1:6379> sadd age 1 2 3 4 5
    (integer) 5
    127.0.0.1:6379> srem age 1 2 a
    (integer) 2
    127.0.0.1:6379> smembers age
    1) "3"
    2) "4"
    3) "5"
  • smove,將一個集合元素移動到另一個集合中

    127.0.0.1:6379> smembers age
    1) "3"
    2) "4"
    3) "5"
    127.0.0.1:6379> sadd age1 a b c
    (integer) 3
    127.0.0.1:6379> smembers age1
    1) "c"
    2) "a"
    3) "b"
    127.0.0.1:6379> smove age age1 3
    (integer) 1
    127.0.0.1:6379> smembers age1
    1) "3"
    2) "c"
    3) "a"
    4) "b"
  • sdiff,比較幾個集合中存在差別的元素

    其中四、5是age3中沒有的元素

    127.0.0.1:6379> smembers age
    1) "4"
    2) "5"
    127.0.0.1:6379> smembers age1
    1) "3"
    2) "c"
    3) "a"
    4) "b"
    127.0.0.1:6379> smembers age3
    1) "u"
    2) "i"
    127.0.0.1:6379> sdiff age age1
    1) "4"
    2) "5"
    127.0.0.1:6379> sdiff age age1 age3
    1) "4"
    2) "5"
  • sdiffstore,將三個集合的差別元素存儲在destination關聯的Set中,並返回插入的元素數量

    127.0.0.1:6379> sdiffstore destination age age1 age3
    (integer) 2
    127.0.0.1:6379> smembers destination
    1) "4"
    2) "5"
  • sinter,獲取多個集合直接的交集sinter age age1 age3

  • sinterstore,將三個集合的交集元素存儲在destination關聯的Set中,並返回交集的數量sinterstore age age1 age3

  • sunion,獲取多個集合之間的並集sunion age age1 age3

  • sunionstore,將三個集合的並集元素存儲在destination關聯的Set中,並返回並集的數量sunionstore age age1 age3

Redis基本命令 Sorted Set

也稱爲Zset,Redis 有序集合和集合同樣也是string類型元素的集合,且不容許重複的成員,但分數(score)卻能夠重複,redis正是經過分數來爲集合中的成員進行從小到大的排序。

  • zadd

  • 添加1個分數爲10的成員zadd age 10 a

  • 添加2個分數爲20,30的成員zadd age 20 b 30 c

  • zrange

  • 經過索引獲取元素,0 -1表示所有元素zrange age 0 -1

  • 加WITHSCORES表示返回結果帶分數zrange age 0 -1 WITHSCORES

  • zcard,獲取test鍵中成員數量zcard age

  • zrank,獲取成員在集合中的索引,從0開始zrank age a

  • zcount,獲取符合條件的成員數量,分數知足10-20的成員數量zcount age 10 20

  • zrem,刪除成員並返回刪除的數量zrem age a b

  • zscore,獲取成員的分數,返回的是字符串形式zscore age c

  • zincrby,增長或減小(-)成員的分數,返回增長後的分數zincrby age 10 c

  • zrangebyscore,經過分數獲取知足條件的成員zrangebyscore age 10 20

  • ­inf表示第一個成員,+inf表示最後一個成員,limit後面的參數用於限制返回成員的數量, limit 2 2,2表示從位置索引(0­-based)等於2的成員開始,取後面2個成員,成員不足就有多少顯示多少,相似於MySQL中的limit

  • zrangebyscore age -inf +inf

  • zrangebyscore age -inf +inf withscores

  • zrangebyscore age -inf +inf limit 2 2

  • zrangebyscore age -inf +inf withscores limit 2 2

  • zrangebyscore age 10 20 withscores limit 2 2

  • zremrangebyscore,根據分數條件刪除成員並返回刪除數量zremrangebyscore age 10 20

  • zremrangebyrank,根據索引條件刪除成員zremrangebyrank age 0 1

  • zrevrange,按索引高到低獲取成員

  • zrevrange age

  • 獲取前10,zrevange age 0 9

  • zrevrangebyscore,根據索引從高到低根據分數獲取成員

  • zrevrangebyscore age 30 10

  • zrevrank,索引由高到低的排序,獲取成員在集合中的索引

  • zrevrank age a

Redis基本命令 Hash

  • hset,給鍵設置字段hset me name zhangsan

  • hget,獲取字段hget me name

  • hlen,獲取字段數量hlen me

  • hexists,判斷字段是否存在,存在返回1hexists me height

  • hdel,刪除字段,成功返回1,重複刪除返回0hdel me name

  • hsetnx,添加新字段,並設置值hsetnx me age 22

  • hincrby,給字段的值加一、或者減-1hincrby me age 1

  • hmset,設置多個字段hmset me height 177 weight 140

  • hmget,獲取多個字段hmget me height age

  • hgetall,返回全部字段及值hgetall me

  • hkeys,獲取全部字段的名字hkeys me

  • hvals,獲取全部字段的值hvals me

Redis基本命令 Key

  • keys * ,顯示全部的鍵

  • del ,刪除一個或多個鍵

    批量刪除

  • exists,判斷key是否存在,不存在返回0

  • move,將當前數據庫的鍵移動到其它db1數據庫

    127.0.0.1:6379> exists age
    (integer) 1
    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
  • rename,修改鍵的名稱rename age newage

  • renamenx,當新名稱不存在時才執行

    127.0.0.1:6379[1]> set city shanghai
    OK
    127.0.0.1:6379[1]> set newcity hangzhou
    OK
    127.0.0.1:6379[1]> renamenx city newcity
    (integer) 0
    127.0.0.1:6379[1]> get city
    "shanghai"
    127.0.0.1:6379[1]> get newcity
    "hangzhou"
  • ttl,給鍵設置超時時間,單位秒

    set age ex 100

    ttl age查看剩餘多久

  • persist,將設置超時的鍵改成永久鍵

    persist age 100

    ttl age查看剩餘時間,返回-1表明該鍵已經變爲永久

  • expire,更新鍵超時時間

    expire age 200

  • expireat,unix時間戳格式設置鍵超時時間

    expireat age 1588918492

  • 不一樣類型的測試數據,用type來查看數據類型

    127.0.0.1:6379[1]> set name katy
    OK
    127.0.0.1:6379[1]> lpush testlist a b c
    (integer) 3
    127.0.0.1:6379[1]> sadd testset 1 2 3
    (integer) 3
    127.0.0.1:6379[1]> zadd testzset 10 a 20 b
    (integer) 2
    127.0.0.1:6379[1]> hset testhash name zhangsan age 20
    (integer) 2
    127.0.0.1:6379[1]> type name
    string
    127.0.0.1:6379[1]> type testlist
    list
  • randomkey,返回任意鍵

  • flushdb,清空當前數據庫

  • dbsize,返回當前數據庫key的數量

Redis基本命令 事務

事務中若是有一條命令執行失敗,其後命令仍然會被執行

  • multi,添加新事務,標記事務的開始

  • exec,執行一個事務命令隊列內的全部命令

  • discard,回滾事務隊命令列內的全部命令。discard只能在exec前執行

  • 執行第一條命令,但命令是存在事務命令隊列的,沒有當即執行

    127.0.0.1:6379[1]> incr age
    QUEUED
  • 執行第二條命令,命令也被存在事務命令隊列的,沒有當即執行

    127.0.0.1:6379[1]> incr age2
    QUEUED
  • 執行全部事務命令隊列中全部命令

    127.0.0.1:6379[1]> exec
    1) (integer) 1
    2) (integer) 1
    127.0.0.1:6379[1]> get age
    "1"
    127.0.0.1:6379[1]> get age2
    "1"
  • 開啓新事務,設置鍵及string類型的值

    set name zhangsan

    從鍵name所關聯的值的頭部彈出元素,因爲該值是字符串類型,而lpop命令僅能用於List類型,所以在執行exec命令時,該命令將會失敗

    127.0.0.1:6379[1]> lpop name
    (error) WRONGTYPE Operation against a key holding the wrong kind of value

    再次設置鍵name的值爲字符串,獲取鍵name的值,以便確認該值是否被事務中的第二個set命令設置成功

    127.0.0.1:6379[1]> set name lisi
    OK
    127.0.0.1:6379[1]> get name
    "lisi"

    從結果中能夠看出,事務中的第二條命令lpop執行失敗,而其後的set和get命令均執行成功,這一點是Redis的事務與關係型數據庫中的事務之間最爲重要的差異

    爲鍵city設置一個事務執行前的值;開啓一個事務;在事務內爲該鍵設置一個新值;放棄事務;查看鍵city的值,從結果中能夠看出該鍵的值仍爲事務開始以前的值

    127.0.0.1:6379[1]> set name lisi
    OK
    127.0.0.1:6379[1]> get name
    "lisi"
    127.0.0.1:6379[1]> set city shanghai
    OK
    127.0.0.1:6379[1]> multi
    OK
    127.0.0.1:6379[1]> set city hangzhou
    QUEUED
    127.0.0.1:6379[1]> discard
    OK
    127.0.0.1:6379[1]> get city
    "shanghai"

    discard只能在exec前執行

    127.0.0.1:6379[1]> discard
    (error) ERR DISCARD without MULI
相關文章
相關標籤/搜索