Redis命令|操作基礎入門

redis系統級基礎命令

  • info 查看系統信息
# Server
redis_version:3.2.100
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:dd26f1f93c5130ee
redis_mode:standalone
os:Windows
arch_bits:64
multiplexing_api:WinSock_IOCP
process_id:17004   //進程ID
run_id:4504fcef813ee822421b3cf38c73aa72a45509b4
tcp_port:6379
uptime_in_seconds:1320
uptime_in_days:0
hz:10
lru_clock:12587164
executable:D:\Program Files\Redis\redis-server.exe
config_file:D:\Program Files\Redis\redis.windows.conf
# Clients
connected_clients:2
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0
# Memory
used_memory:711320
used_memory_human:694.65K
used_memory_rss:673408
used_memory_rss_human:657.63K
used_memory_peak:787128
used_memory_peak_human:768.68K
total_system_memory:0
total_system_memory_human:0B
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
mem_fragmentation_ratio:0.95
mem_allocator:jemalloc-3.6.0
# Persistence
loading:0
rdb_changes_since_last_save:0
rdb_bgsave_in_progress:0
rdb_last_save_time:1556090947
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:0
rdb_current_bgsave_time_sec:-1
aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok
# Stats
total_connections_received:2
total_commands_processed:14
instantaneous_ops_per_sec:0
total_net_input_bytes:338
total_net_output_bytes:11756156
instantaneous_input_kbps:0.00
instantaneous_output_kbps:0.00
rejected_connections:0
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_keys:0
evicted_keys:0
keyspace_hits:4
keyspace_misses:2
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:6335
migrate_cached_sockets:0
# Replication
role:master
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
# CPU
used_cpu_sys:0.16
used_cpu_user:0.08
used_cpu_sys_children:0.00
used_cpu_user_children:0.00
# Cluster
cluster_enabled:0
# Keyspace 當前redis實例的數據庫空間
db0:keys=2,expires=0,avg_ttl=0  //redis啓動默認使用第0個空間

配置文件中databases 16代表有16個數據空間(0-15) ,可以使用 select [dbid] 切換空間;通常可以用於測試環境和生產環境的切換

127.0.0.1:6379> set a c
OK
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> get a
(nil)

  • select [dbid] 切換到指定的數據庫
  • flushdb 清除當前數據空間(database),慎用
  • flushall 清除所有的數據空間
  • ping 測試連接是否正常
  • keys * 顯示當前數據空間下所有的鍵
  • dbsize 顯示當前數據空間下的鍵值對個數
  • save redis持久化命令
  • quit 退出client連接
  • monitor日誌監控命令

Redis鍵命令

  • set [key] [value] 設置鍵值對,返回OK顯示設置成功

  • del [key] 刪除鍵值對,

    • (integer) 1 返回受影響的條數,刪除不存在的鍵返回0
  • keys * 顯示所有的鍵

    • 如果爲空顯示 (empty list or set)
  • exists [key] 查看鍵是否存在

  • expire [key] [time] 設置key的有效期;可以用於session的有效期

    • expire a 10 設置a的有效期是10秒
  • ttl [key] 查看key的過期時間

    • (integer) -1返回-1代表key沒有過期時間
    • 正數表示剩餘的有效時間
    • (integer) -2 返回-2代表key不存在
  • type [key] 查看key的類型,若是做動態數據類型的話,可以根據key的類型決定怎麼取值

    • key不存在返回none,存在則返回key的類型
127.0.0.1:6379> set a b
OK
127.0.0.1:6379> type a
string
127.0.0.1:6379> hset hash name tom
(integer) 1
127.0.0.1:6379> type hash
hash
127.0.0.1:6379> type name 
none
127.0.0.1:6379> keys *
1) "a"
2) "b"
3) "hash"
  • randomkey 隨機返回一個已經存在的key

  • rename [old_key] [new_key] 將key 重命名,不會直接校驗是否存在

    • 若是key不存在則直接將key更名
    • 若是key已經存在則清除已存在的key,則直接將存在的key對應的值覆蓋掉
127.0.0.1:6379> keys *
1) "c"
2) "a"
3) "b"
4) "hash"
127.0.0.1:6379> rename c d  //key不存在的話,直接將當前的值賦值給新key,然後刪除
OK
127.0.0.1:6379> keys *
1) "b"
2) "a"
3) "hash"
4) "d"
127.0.0.1:6379> get d
"c"
127.0.0.1:6379> rename b d //key已經存在的情況下,刪除當前key,將key對應的值賦值給更名的key
OK
127.0.0.1:6379> get d
"b"

以 nx 結尾的命令一般比較特殊,會有包含判斷的邏輯

  • renamenx [old key] [new key] 將key進行更名,若是新的key不存在
127.0.0.1:6379> renamenx a b
(integer) 0
127.0.0.1:6379> get a
"a"
127.0.0.1:6379> renamenx a m
(integer) 1
127.0.0.1:6379> get a
(nil)
127.0.0.1:6379> get m
"a"

redis數據結構之字符串結構(String)

  • set [key] [value] 設置鍵值對,實際就是使用的字符串結構
  • setex [key] [time] [value] ex 是expire的縮寫,可以設置有效期
    • setex c 100 c 設置c的值是c,有效期是100秒
  • psetex [key] [time] [value]可以設置有效期 ,時間單位是毫秒
    • psetex d 10000 d 設置d的值是d,有效期是10秒
  • getrange key start_index end_index 返回某個值的截取的範圍,兩邊都是取閉區間
127.0.0.1:6379> set name myname
OK
127.0.0.1:6379> getrange name 0 2
"myn"
  • getset key value 先get再set,也就是返回前一個值,在設置新的值

    • set 命令只會返回成功(OK)和失敗
  • mset key1 value1 key2 value2 key3 value3 同時設置多個key和value

  • mget key1 key2 key3 同時設置多個key和value

//mget 對應mset
127.0.0.1:6379> mset a a b b c c
OK
127.0.0.1:6379> mget a b c
1) "a"
2) "b"
3) "c"
  • setnx key value 類似於set命令,但是會進行邏輯判斷,只有當key不存在的時候纔會set,不然無法設置值

  • strlen key 查看某個字符串的長度

  • msetnx key1 value1 key2 value2 ... 批量設置值,但是會判斷值是否存在,只有不存在纔會設置

    • 返回0 代表設置失敗(全部失敗,有點事務的感覺),有事務的原子性,要麼全部成功要麼全部失敗
    • 返回1 代表設置成功
  • set key init-num 設置一個數字類型的初始值,

  • incr key 讓一個數字加1 ,

    • 若是key存在,那麼key對應的值必須是數字,不然會出現錯誤(error) ERR value is not an integer or out of range
    • 直接執行incr key 若是key不存在,則會創建一個值從1開始的鍵值對
  • incrby key num 讓一個值爲數字的key增加固定的值

    • incrby num 100 : 讓key爲num的值增加100
  • decr key 讓一個值爲數字的key減少1 ,和incr對應,若是不存在,直接創建從-1開始,若是存在且是數字,直接在原有基礎上減一

  • decrby key num 讓一個值爲數字的key減少固定的值

以上數字操作都會返回操作之後的結果

127.0.0.1:6379> incr A //若是key不存在,則創建一個key爲A值爲1的鍵值對
(integer) 1
127.0.0.1:6379> get A
"1"
127.0.0.1:6379> set num 1
OK
127.0.0.1:6379> incr num
(integer) 2
127.0.0.1:6379> incr num
(integer) 3
127.0.0.1:6379> get num
"3"
127.0.0.1:6379> incrby num 100 //讓key爲num的值增加100
(integer) 103
127.0.0.1:6379> decr num
(integer) 102
127.0.0.1:6379> decr f
(integer) -1
127.0.0.1:6379> decr f
(integer) -2
127.0.0.1:6379> decrby num 10
(integer) 92

  • append key str 直接將一個字符串追加到value的末尾,返回字符串的長度
    • append a hello 將 字符串hello追加到key爲a的值後面

redis數據結構之 哈希(hash)

切換數據空間 select 1

  • hset hash-name key value 爲hash賦值,不存在則創建
  • hexists hash-name key 判斷hash中的某個鍵值是否存在
  • hget hash-name key 獲取hash中某個key對應的值,若是不存在返回nil
  • hgetall hash-name 獲取hash中的所有的key-value
  • hkeys hash-name 獲取hash中所有的key
  • hvals hash-name 獲取hash中所有的value
  • hlen hash-name 獲取鍵值對的個數,其實也是key的個數
  • hmget hash-name key1 key2 ... 獲取hash中的多個key對應的值
  • hmset hash-name key1 value1 key2 value2... 一次設置多個鍵值對給hash
  • hdel hash-name key1 key2... 刪除指定hash中key-value
  • hsetnx hash-name key value 在指定hash表中如果鍵不存在,將鍵值對插入hash集合,,添加成功返回1 失敗返回0
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> keys *
(empty list or set)
127.0.0.1:6379[1]> hset map name zhang
(integer) 1
127.0.0.1:6379[1]> keys *
1) "map"
127.0.0.1:6379[1]> type map  //查看key對應的值類型
hash
127.0.0.1:6379[1]> hexists map name  //查看hash是否存在,存在返回1,不存在返回0
(integer) 1
127.0.0.1:6379[1]> hexists map name1 //不存在則返回0
(integer) 0
127.0.0.1:6379[1]> keys *
1) "map"
127.0.0.1:6379[1]> hget map name //獲取hash集合中key爲name的值
"zhang"
127.0.0.1:6379[1]> hlen map //獲取hash長度
(integer) 2

127.0.0.1:6379[1]> hmget map name age //獲取name和age對應的值
1) "zhang"
2) "15"
127.0.0.1:6379[1]> hmset map email [email protected] sex boy
OK
127.0.0.1:6379[1]> hgetall map
1) "name"
2) "zhang"
3) "age"
4) "15"
5) "email"
6) "[email protected]"
7) "sex"
8) "boy"
127.0.0.1:6379[1]> hlen map
(integer) 4
127.0.0.1:6379[1]> hdel map sex
(integer) 1
127.0.0.1:6379[1]> hsetnx map name lisi //判斷存在與否,添加hash鍵值對;
(integer) 0
127.0.0.1:6379[1]> hsetnx map addr hubei
(integer) 1

Redis數據結構之鏈表(List)

  • 類似於Java的list,允許重複值

切換數據空間 select 2

  • lpush list-name value1 value2 value3... 將元素賦值給list,如果list不存在則創建

    • 注意這裏是以隊列的方式放入
  • llen list-name 查看集合的長度

  • lrange list-name 0 2 獲取集合範圍的值,兩邊都是閉區間,但是這個設定的範圍可以比實際的範圍區間大

  • lset list-name index value 設置指定索引位置的值,

    • 必須要在list範圍內,不然(error) ERR index out of range
  • lindex list-name index 獲取指定索引位置的元素

  • lpop list-name 移除列表第一個元素

  • rpop list-name 移除列表最後一個元素

select 2
127.0.0.1:6379[2]> lpush list 1 2 3 4 5 6
(integer) 6
127.0.0.1:6379[2]> keys *
1) "list"
127.0.0.1:6379[2]> type list
list
127.0.0.1:6379[2]> llen list
(integer) 6
127.0.0.1:6379[2]> lrange list 0 2
1) "6"
2) "5"
3) "4"
127.0.0.1:6379[2]> lindex list 5
"1"

redis數據結構之set集合

  • set是無序的集合,可以排除重複

select 3 切換數據空間

  • sadd set-name value1 value2 value3... 添加元素到set,

    • 如果不存在集合則創建
    • 如果存在元素則不會再次添加返回0
  • scard set-name 返回set集合元素的數量

  • smembers set-name 返回集合元素的成員

  • sdiff set1 set2 差集合並,相當於set1-set2,返回set2中沒有的元素

  • sinter set1 set2 交集合並 ,返回set1,set2中都有的元素

  • sunion set1 set2 合併兩個集合,並且去重

  • srandmember set-name num 返回某個set集合中的一個或者多個隨機元素

  • sismember set-name value 判斷某個元素是否在集合中,返回1表示在集合中,返回0表示不在集合中

  • srem set-name value1 value2... 移除某個集合中的一個或者多個成員

  • spop set-name 移除一個隨機元素 ,並且返回這個元素(被移除的)

    • 適用於高併發的情況,移除並且返回一個元素,例如對訂單號的預存,生成不會重複的的訂單號,存入,客戶端直接取用即可
127.0.0.1:6379[3]> sadd set a b c d
(integer) 4
127.0.0.1:6379[3]> keys *
1) "set"
127.0.0.1:6379[3]> type set
set
127.0.0.1:6379[3]> sadd set a
(integer) 0
127.0.0.1:6379[3]>
127.0.0.1:6379[3]> scard set
(integer) 4

redis數據結構之有序集合(sortedset)

  • 具備集合set的特性,添加刪除查找的時間複雜度都是O(1),也是通過hash表實現的,但是可以保證有序

  • zadd sortedset-name 100 a 200 b 300 c 添加元素到有序集合中,若是集合不存在則會創建

    • 相當於指定一個優先級,按照這個優先級進行排序,按照分數從小到大進行排序
  • zcard sortedset-name 返回元素個數

  • zscore sortedset-name a返回元素的優先級,也就是元素的分數,不存在的元素返回nil
    img

  • zcount sortedset-name score1 score2 返回某一個分數區間的元素個數,分數區間爲閉合區間

  • zrank sortedset-name value 返回某一個元素在集合中的索引(也就是排序,位於集合中的第幾個元素)

這裏注意索引和分數的區別,改變分數會影響排序

  • zincrby sortedset-name add-score-num value 將某個元素的分數提高add-score-num,返回提高後的分數,會影響到元素的索引和排序
    • zincrby sortedset 1000 a 將有序集合中的a元素的分數提升1000
    • zrank sortedset a 查看a元素當前的索引位置
  • zrange sortedset-name start end 返回某個範圍內的所有元素,範圍可以比實際的範圍大
    • zrange sortedset 0 99 返回sortedset中的前一百個元素 ,兩邊都是閉區間
  • zrange sortedset-name start end withscores返回某個範圍內的全部元素和元素的分數
    img

小確幸

每一絲靈感都值得被記錄,每一筆記錄都是成長,每一點成長都值得歡呼

博主個人站: www.imisty.cn
CSDN博客: https://blog.csdn.net/lookinthefog
博客園 :https://imist.cnblogs.com/

希望能夠認識一些熱愛技術的小夥伴,歡迎友鏈接喲

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章