redis基本使用教程

redis基本技術總結

1 redis 簡介

基於內存、分佈式、可選持久性的鍵值對(Key-Value)存儲數據庫

redis是一個高性能的key-value存儲系統。它支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)、zset(sortedset--有序集合)和hash(哈希類型)

存儲值類型:

  • string
  • list
  • set
  • zset
  • hash

1.1 nosql 與 sql 區別

1.1.1 存儲方式

  • sql: 數據存儲在表結構中,需要先定義表和字段結構才能存儲數據。

  • nosql:存儲的數據格式可以是json、hash等鍵值對, 不需要定義表,隨時可以存儲

1.1.2 join查詢

  • sql: 支持join操作、使用一條SQL語句可以關聯多張表將數據查詢出來

  • nosql:不支持SQL語句,更不支持join操作

1.1.3 數據耦合性

  • sql: SQL 中不允許刪除已經被使用的外部數據以保證數據完整性,數據耦合性高

  • nosql:沒有強耦合的概念,數據可以隨時刪除

1.1.4 事務

  • sql: SQL具有事務的概念,如果對多張表數據進行更新操作,要麼都成功,要麼回退數據不更改。

  • nosql:nosql沒有事務概念,數據的操作都是原子級的

1.1.5 查詢性能

在相同水平的系統設計的前提下, 因爲 NoSQL 中省略了 JOIN 查詢的消耗, 故理論上性能上是優於 SQL 的

1.2 Redis 優勢

  • 性能極高 – Redis能讀的速度是110000次/s,寫的速度是81000次/s 。
  • 豐富的數據類型 – Redis支持二進制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 數據類型操作。
  • 原子 – Redis的所有操作都是原子性的,意思就是要麼成功執行要麼失敗完全不執行。單個操作是原子性的。多個操作也支持事務,即原子性,通過MULTI和EXEC指令包起來。
  • 豐富的特性 – Redis還支持 publish/subscribe, 通知, key 過期等等特性。

2 redis 基本操作

2.1 string (重點)

2.1.1 添加修改數據

# 添加一個值
set key value
# 添加多個
mset key1 value1 key2 value2

2.1.2 獲取數據

# 獲取一個
get key
# 獲取多個值
mget key1 key2

2.1.3 刪除

# 刪除值
del key

2.1.4 獲取字符串的長度

strlen key

2.1.5 追加信息到原字符串之後

append key value

2.1.6 incr , incrby和 incrbyfloat

# 數值 + 1, 每次只增加1
incr key
# 指定 數值增加10, 只能增加整數值
incrby key 10
# 指定數值增加10.5, 可以增加整數或小數
incrbyfloat key 10.5

2.1.7 decr , decrby

# 數值 - 1, 每次只能減1
decr key
# 指定 數值減去10, 只能減整數值
decrby key 10

2.1.8 設置數據有效期

爲指定的 key 設置值及其過期時間。如果 key 已經存在, SETEX 命令將會替換舊的值

# 格式: setex key seconds value
# 設置 code=3920且有效期等於60s的數據
setex code 60 3920
# 查看有效時期
ttl code

image

2.1.9 查看字段

keys *

2.2 哈希(Hash)

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

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

2.2.1 hset 和 hset

  • 增加修改數據

    格式: hset key field value

    格式: hmset key field value

    # 添加一個hash數據
    hset user name "張三"
    # 會覆蓋name字段值
    hmset user name "lisi" name "wangwu"
    # 添加多了字段
    hset user age 20 hight 175
    

2.2.2 hget和hmget

  • 查看字段

    格式: hget key field

    格式: hmget key field

    # 查看一個字段值
    hget user name
    # 查看多個字段值
    hmget user name age hight
    

2.2.3 hlen和hexists

  • 查看hash表中字段的數量

    格式: hlen key

    hlen user
    
  • hash表中是否存在指定的字段

    格式: hexists key field

    hexists user gender
    

image

2.2.4 hkeys和hvals

  • 查看hash表中的字段和值

    格式: hkeys key

    格式:hvals key

    # 查看hash表中的所有字段
    hkeys user
    # 查看hash表中的所有值
    hvals user
    

    image

    格式: hgetall key

    hgetall user
    

    image

2.2.5 hincrby和 hincrbyfloat

格式:hincrby key field incrment

格式:hincrbyfloat key field incrment

# 指定 數值增加10, 只能增加整數值
hincrby user age 1
# 指定數值增加10.5, 可以增加整數或小數
hincrbyfloat user age 1.5

image

2.2.6 hsetnx 命令

hsetnx 命令用於爲哈希表中不存在的的字段賦值

# 格式: hsetnx key field value
hsetnx user gender nan

image

2.3 列表(list)

Redis列表是簡單的字符串列表,按照插入順序排序。你可以添加一個元素到列表的頭部(左邊)或者尾部(右邊)

2.3.1 添加數據

格式:

lpush key vuale1 value2 或 rpush key vuale1 value2

# 從左邊添加一個或多個數據
lpush list1 1 2 3 4 5 6
# 從尾部添加一個或多個數據
rpush list2 1 2 3 4 5 6

image

2.3.2 查看數據

格式: lrange key start stop

格式: lindex key index

格式: llen key

# 通過索引範圍查看數據
lrange list2 0 -1
# 查看指定索引位置的數據
lindex list2 0
# 查看list 的長度
llen list2

image

2.3.3 獲取並刪除數據

格式: lpop key 或 rpop key

image

2.3.4 規定時內獲取並刪除數據

格式: blpop key 或 brpop key

image

2.3.5 lrem 刪除命令

格式: lrem key count value

count 的值可以是以下幾種:

  • count > 0 : 從表頭開始向表尾搜索,移除與 VALUE 相等的元素,數量爲 count 。
  • count < 0 : 從表尾開始向表頭搜索,移除與 VALUE 相等的元素,數量爲 count 的絕對值。
  • count = 0 : 移除表中所有與 VALUE 相等的值。

2.4 集合(set)

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

Redis 中集合是通過哈希表實現的。

  • 添加數據

    格式: sadd key member [member ...]

    # 添加集合成員
    sadd city beijing shanghai xian tianjin wuhan zhengzhou
    

    image

  • 獲取數據

    格式: smembers key

  • 刪除成員

    格式: srem key member [member ...]

    srem city beijing
    

    image

  • 查看集合成員數量

    格式: scard key

    scard city
    
  • 判斷是否是集合中的成員

    格式: sismember key member

    sismember city beijing
    

    image

  • 隨機獲取指定數量的成員數據

    格式: srandmember key count

    # 隨機獲取2個成員數據
    srandmember city 2
    

    image

  • 隨機獲取集合中的成員數據並刪除該數據

    格式: spop key

    spop city
    

    image

  • 交集,並集,差集

    格式: sinter key1 [key2] 交集

    格式: sunion key1 [key2] 並集

    格式:sdiff key1 [key2] 差集

    image

  • 將兩個交集,並集,差集的結果集存儲到指定集合中

    格式: sinterstore destination key1 [key2] 交集

    格式: sunionstore destination key1 [key2] 並集

    格式:sdiffstore destination key1 [key2] 差集

    image

  • 將指定元素從原集合移動到目標集合中

    格式: smove source destination member

    # 將集合成員1從集合set5中移動到集合set6中
    smove set5 set6 1
    

    image

2.5 有序集合(sorted set)

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

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

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

  • 添加數據

    格式: zadd key score1 member1 [score2 member2 ...]

    # 添加數據
    zadd zset1 10 ls
    # 添加多個數據
    zadd zset1 10 ww 30 zs 25 zl
    

    image

  • 獲取有序集合中的數據

    格式: zrange key start stop [withscores]zrevrange key start stop [withscores]

    zrange 和 zrevrange 互爲逆序

    zrange zset1 0 -1 withscores
    zrevrange zset1 0 -1 withscores
    

    image

  • 刪除數據

    格式: zrem key member [member]

    image

  • 按條件查詢

    格式: zrangebyscore key min max [WITHSCORES] [LIMIT offset count]

    格式: zrevrangebyscore key min max [WITHSCORES] [LIMIT offset count]

    備註: min和max 查詢條件範圍,指向的是有序集合排序的數值

  • 按條件刪除

    格式: zremrangebyrank key start stop

    格式: zremrangebyscore key min max

    備註: min和max 查詢條件範圍,指向的是有序集合排序的數值;start 和 stop作用於索引

  • 獲取有序集合中的數量

    格式: zcard key

    格式: zcount key min max

    image

  • 有序集合的交集和並集

    格式: zinterstore destination numkeys key [key ...]

    格式: zunionstore destination numkeys key [key ...]

    備註: 類似無序集合的操作, numkeys 含義是表示後面有幾個集合進行操作

  • 獲取數據對應的索引

    格式: zrank key member

    格式: zrevrank key member

  • score值的獲取與修改

    格式: zscore key member

    格式: zincrby key increment member

3 redis key基本指令

3.1 刪除key

del key

3.2 判斷key是否存在

exists key 

3.2 獲取key所儲存的值的類型

type key

3.3 設置key的有效期

# 設置過期時間,以秒計
expire key seconds
# 設置過期時間,以毫秒計
pexpire key milliseconds
# 設置過期時間的時間戳,以秒計
expireat key timestamp
# 設置過期時間的時間戳,以毫秒計
pexpireat key milli-timestamp
# 移除 key 的過期時間,key 將持久保持
persist key

3.4 查看剩餘的過期時間

  • ttl key : 以秒爲單位,返回給定 key 的剩餘生存時間

  • pttl key: 以毫秒爲單位,返回給定 key 的剩餘生存時間

3.5 查找所有符合給定模式( pattern)的 key

  • keys pattern

    • 匹配規則:
      • * 匹配0或多個任意字符
      • ? 匹配一個任意字符
      • [] 匹配一個指定的字符

    image

3.6 修改key的名稱

# 修改key的名稱,新的名稱存在,則值就會被覆蓋
rename key newkey
# 修改key的名稱,僅當 newkey 不存在時,將 key 改名爲 newkey
renamenx key newkey

3.7 切換數據庫

select index

3.8 數據移動

# 將數據移動到其他庫中
move key db

3.9 數據清理

  • 查看數據量: dbsize
  • 清理當前數據庫數據: flushdb
  • 清理所有數據: flushall
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章