柚子快報邀請碼778899分享:緩存 Redis基本命令詳解
柚子快報邀請碼778899分享:緩存 Redis基本命令詳解
1. 基本命令
命令不區(qū)分大小寫,而key是區(qū)分大小寫的
# select 數(shù)據(jù)庫間的切換 數(shù)據(jù)庫共計16個
127.0.0.1:6379> select 1
# dbsize 返回當前數(shù)據(jù)庫的 key 的數(shù)量
127.0.0.1:6379[1]> dbsize
# keys * 查看數(shù)據(jù)庫所有的key
127.0.0.1:6379[1]> keys *
# flushdb 清除當前數(shù)據(jù)庫
127.0.0.1:6379[1]> flushdb
# flushall 清除全部數(shù)據(jù)庫的內(nèi)容
127.0.0.1:6379[1]> flushall
# exists key 判斷某個 key 是否存在
127.0.0.1:6379[1]> exists name
# type key 查看你的 key 是什么類型
127.0.0.1:6379[1]> type name
# del key 刪除指定的 key 數(shù)據(jù) 阻塞刪除 數(shù)據(jù)比較大的時候會產(chǎn)生等待 不要刪除大的key,等待時間長,阻止了其他資源的操作
127.0.0.1:6379[1]> del name
# unlink key 根據(jù) value 選擇非阻塞刪除 異步刪除一個或多個鍵
# UNLINK 命令的主要特點是它是非阻塞的,unlink命令僅僅是刪除鍵值對,并不會立即將數(shù)據(jù)從磁盤上刪除 它會在后臺異步地刪除鍵值對,而不會阻塞服務器的正常操作
# UNLINK 命令非常適合于刪除大量鍵值對或者刪除耗時較長的鍵值對
# UNLINK 命令不接受模式匹配參數(shù),只能指定具體的鍵名
127.0.0.1:6379[1]> unlink name
# expire key 過期時間 為給定的 key 設置過期時間
127.0.0.1:6379[1]> expire name 10
# ttl key 查看還有多少秒過期,-1 表示永不過期,-2 表示已過期
127.0.0.1:6379[1]> ttl name
# move name 數(shù)據(jù)庫編號 移除當前的key到其他數(shù)據(jù)庫
127.0.0.1:6379[1]> move name 1
# clear 清屏
127.0.0.1:6379[1]> clear
# auth 密碼 客戶端登陸進行密碼認證
127.0.0.1:6379[1]> auth 123456
# quit 服務器關(guān)閉連接
127.0.0.1:6379[1]> quit
# shutdown 正常關(guān)閉,數(shù)據(jù)保存 redis服務關(guān)閉
127.0.0.1:6379[1]> shutdown
# config set key value 修改配置文件 例如設置密碼
127.0.0.1:6379[1]> config set requirepass 123456
# config get key 獲取配置文件key的值
127.0.0.1:6379[1]> config get requirepass
#help @類型
help @string
help @list
help @hash
help @hyperloglog
?
2.String字符串類型
String 是 Redis 最基本的類型,一個 key對應一個 value
String 類型是二進制安全的。意味著 Redis 的 string 可以包含任何數(shù)據(jù)。比如 jpg 圖片或者序列化的對象
String 類型是 Redis 最基本的數(shù)據(jù)類型,一個 Redis 中字符串 value 最多可以是 512M
數(shù)據(jù)結(jié)構(gòu)
String 的數(shù)據(jù)結(jié)構(gòu)為簡單動態(tài)字符串(Simple Dynamic String,縮寫 SDS)。是可以修改的字符串,內(nèi)部結(jié)構(gòu)實現(xiàn)上類似于 Java 的 ArrayList,采用預分配冗余空間的方式來減少內(nèi)存的頻繁分配
如圖中所示,內(nèi)部為當前字符串實際分配的空間 capacity 一般要高于實際字符串長度len。當字符串長度小于 1M 時,擴容都是加倍現(xiàn)有的空間,如果超過 1M,擴容時一次只會多擴 1M 的空間。需要注意的是字符串最大長度為 512M。
# set
# EX second 設置鍵的過期時間為 second 秒 SET key value EX second 效果等同于 SETEX key second value
# PX millisecond :設置鍵的過期時間為 millisecond 毫秒。 SET key value PX millisecond 效果等同于 PSETEX key millisecond value
# NX :只在鍵不存在時,才對鍵進行設置操作。 SET key value NX 效果等同于 SETNX key value
# XX :只在鍵已經(jīng)存在時,才對鍵進行設置操作
# get: 返回舊的值 同時設置新的值
# exat: 以秒為單位的unix時間戳作為過期時間
# pxat: 以豪秒為單位的unix時間戳作為過期時間
# keepttl :保留設置前指定健的生存時間 修改值的同時保留生存時間,不覆蓋
127.0.0.1:6379> set name ljy ex 10
127.0.0.1:6379> set name ljy px 100
127.0.0.1:6379> set name ljy nx
127.0.0.1:6379> set name ljy xx
# get
127.0.0.1:6379> get name
# append
127.0.0.1:6379> append name 18
# strlen
127.0.0.1:6379> strlen name
# setnx
127.0.0.1:6379> setnx name lhx
# incr
127.0.0.1:6379> incr age 1
# decr
127.0.0.1:6379> dccr age 1
# incrby
127.0.0.1:6379> incrby age 10
# decrby
127.0.0.1:6379> decrby age 10
# mset
127.0.0.1:6379> mset uname ljy age 20
# mget
127.0.0.1:6379> mget uname age
# msetnx
# 原子性,有一個失敗則都失敗
127.0.0.1:6379> msetnx title boy age 20 num 100
# getrange
127.0.0.1:6379> getrange name 0 2
# setrange
# 替換指定位置開始的字符串!參數(shù)有幾個替換幾個
127.0.0.1:6379> setrange name 2 boy
# setex
# psetex key milliseconds value 設置key 并設置過期時間 單位豪秒
127.0.0.1:6379> setex key1 10 ljy
127.0.0.1:6379> psetex key1 1000 ljy
# getset
127.0.0.1:6379> getset key1 name
3. List列表
主要特點:單鍵多值
一個雙端鏈表的結(jié)構(gòu),容量是2的32次方減1個元素大概40多億,主要功能有push/pop等,一般用在棧、隊列、消息隊列等場景。left、right都可以插入添加;
如果鍵不存在,創(chuàng)建新的鏈表;
如果鍵已存在,新增內(nèi)容;
如果值全移除,對應的鍵也就消失了
Redis 列表是簡單的字符串列表,按照插入順序排序。你可以添加一個元素到列表的頭部(左邊)或者尾部(右邊)
列表底層實際是個雙向鏈表,對兩端的操作性能很高,通過索引下標的操作中間的節(jié)點性能會較差
# lpush
127.0.0.1:6379> lpush name lili leilei hanhan
# rpush
127.0.0.1:6379> rpush name ljy lhx
# lpop
127.0.0.1:6379> lpop name
# rpop
127.0.0.1:6379> rpop name
# lrange
127.0.0.1:6379> lrange name 0 -1
# rpoplpush
127.0.0.1:6379> rpoplpush name name2
# lindex
127.0.0.1:6379> lindex name 2
# llen
127.0.0.1:6379> llen name
# lrem
127.0.0.1:6379> lrem name 1 lili
# ltrim
# 下標 0 表示列表的第一個元素,以 1 表示列表的第二個元素,以此類推。 你也可以使用負數(shù)下標,以 -1 表示列表的最后一個元素, -2 表示列表的倒數(shù)第二個元素,以此類推
127.0.0.1:6379> ltrim name 1 -1
# linsert
# linsert
127.0.0.1:6379> linsert name before lili other
127.0.0.1:6379> linsert name after lili new
# lset
127.0.0.1:6379> lset name 1 ppp
4.Set集合
Redis set 對外提供的功能與 list 類似 是一個列表的功能,特殊之處在于 set 是可以自動排重的,當你需要存儲一個列表數(shù)據(jù),又不希望出現(xiàn)重復數(shù)據(jù)時,set 是一個很好的選擇,并且 set 提供了判斷某個成員是否在一個 set 集合內(nèi)的重要接口,這個也是 list 所不能提供的。
單值多value且無重復
# sadd
127.0.0.1:6379> sadd name ljy lhx lzf
# smembers
127.0.0.1:6379> smembers name
# sismember
127.0.0.1:6379> sismember name ljy
# scard
127.0.0.1:6379> scard name
# srem
127.0.0.1:6379> srem name ljy
# spop
127.0.0.1:6379> spop name 2
# srandmember
127.0.0.1:6379> srandmember name 1
# smove
127.0.0.1:6379> smove name name2 ljy
# sinter
127.0.0.1:6379> sinter name name2 ljy
# sunion
127.0.0.1:6379> sunion name name2
# sdiff
127.0.0.1:6379> sdiff name name2
# sintercard numkeys key ...[limit] 返回結(jié)果的基數(shù) 由所有給定集合的交集產(chǎn)生的集合的基數(shù)
127.0.0.1:6379> sintercard 2 k1 k2
5. Hash
Redis hash 是一個鍵值對集合,值也是field 和 value
Redis hash 是一個 string 類型的 field 和 value 的映射表,hash 特別適合用于存儲對象
# hset
127.0.0.1:6379> hset info name ljy
# hget
127.0.0.1:6379> hget info name
# hmset
127.0.0.1:6379> hmset info age 10 level 10
# hmget
127.0.0.1:6379> hmget info name age level
# hgetall
127.0.0.1:6379> hgetall info
# hdel
127.0.0.1:6379> hdel info level
# hlen
127.0.0.1:6379> hlen info
# hexists
127.0.0.1:6379> hexists info name
# hkeys
127.0.0.1:6379> hkeys info
# hvals
127.0.0.1:6379> hvals info
# hincrby
# hincrbyfloat
127.0.0.1:6379> hincrby info age 1
# hsetnx
127.0.0.1:6379> hsetnx info name 555
6.?有序集合 Zset
Redis 有序集合 zset 與普通集合 set 非常相似,是一個沒有重復元素的字符串集合
不同之處是有序集合的每個成員都關(guān)聯(lián)了一個評分(score),這個評分(score)被用來按照從最低分到最高分的方式排序集合中的成員。集合的成員是唯一的,但是評分可以是重復了
因為元素是有序的, 所以你也可以很快的根據(jù)評分(score)或者次序(position)來獲取一個范圍的元素。
訪問有序集合的中間元素也是非??斓?因此你能夠使用有序集合作為一個沒有重復成員的智能列表
# zadd
127.0.0.1:6379> zadd info 200 name 300 age
# zrange
127.0.0.1:6379> zrange info 0 -1
# zrevrange salary 0 -1 # 從大到進行排序!
127.0.0.1:6379> zrevrange info 0 -1
# zrangebyscore key min max [withscores] [limit offset count] 返回有序集 key 中,所有 score 值介于 min 和 max 之間(包括等于 min 或 max )的成員。有序集成員按 score 值遞增(從小到大)次序排列
127.0.0.1:6379> zrangebyscore info 100 200
127.0.0.1:6379> zrangebyscore info (100 200 #大于100 不包含100
# 顯示全部 從小到大
127.0.0.1:6379> zrangebyscore info -inf +inf
# zrevrangebyscore key max min [withscores] [limit offset count] 同上,改為從大到小排列
127.0.0.1:6379> zrevrangebyscore info 900 100
# zcard
127.0.0.1:6379> zcard info
# zincrby
127.0.0.1:6379> zincrby info 200 age
# zrem
127.0.0.1:6379> zrem info age
# zcount
127.0.0.1:6379> zcount info 100 200
# zrank
# zrevrank
127.0.0.1:6379> zrank info name
127.0.0.1:6379> zrevrank info name
# zscore
127.0.0.1:6379> zscore info name
# ZMPOP numkeys key [key ...]
#當使用MIN修飾符時,彈出的元素是第一個非空排序集中得分最低的元素。MAX修改器會彈出得分最高的元素,numkeys 表示 key 的數(shù)量。
127.0.0.1:6379> zmpop 1 set1 min
7.Bitmap
位存儲 由0和1狀態(tài)表現(xiàn)的二進制位的bit數(shù)組
位圖的本質(zhì)是數(shù)組 底層數(shù)據(jù)結(jié)構(gòu)是String
Bitmap支持的最大位數(shù)是2^32位,它可以極大的節(jié)約存儲空間,使用512M內(nèi)存就可以存儲多達42.9億的字節(jié)信息(2^32=4294967296)
使用場景:用戶簽到、打卡等
# setbit
127.0.0.1:6379> setbit sign 0 1
(integer) 0
127.0.0.1:6379> setbit sign 1 0
(integer) 0
127.0.0.1:6379> setbit sign 2 0
(integer) 0
127.0.0.1:6379> setbit sign 3 1
(integer) 0
127.0.0.1:6379> setbit sign 4 1
(integer) 0
127.0.0.1:6379> setbit sign 5 0
(integer) 0
127.0.0.1:6379> setbit sign 6 0
(integer) 0
# getbit
127.0.0.1:6379> getbit sign 3
(integer) 1
127.0.0.1:6379> getbit sign 6
(integer) 0
# strlen 不是字符串長度而是占據(jù)幾個字節(jié) 超過8位后自己按照8位一組一byte再擴容 統(tǒng)計字節(jié)數(shù)占用多少
127.0.0.1:6379> strlen sign
# bitcount
127.0.0.1:6379> bitcount sign 6
# bitop and(or/not/xor)
# bitop 是一個復合操作, 它可以做多個 Bitmaps 的 and(交集) 、 or(并集) 、 not(非) 、 xor(異或) 操作并將結(jié)果保存在 destkey 中
8.HyperLogLog
Redis在2.8.9版本添加了HyperLogLog 結(jié)構(gòu)。
HyperLogLog 是 Redis 提供的一種用于基數(shù)統(tǒng)計的數(shù)據(jù)結(jié)構(gòu),它可以用來估算集合中不重復元素的數(shù)量。HyperLogLog 的優(yōu)點是內(nèi)存消耗固定且很小(標準情況下為 12KB),與集合中元素的數(shù)量無關(guān),適合處理大規(guī)模數(shù)據(jù)集。HyperLogLog 提供的結(jié)果是一個近似值,標準誤差為 0.81%。
使用場景包括但不限于:
統(tǒng)計獨立訪客數(shù)(UV)。統(tǒng)計應用的日活躍用戶數(shù)(DAU)或月活躍用戶數(shù)(MAU)。統(tǒng)計用戶搜索不同詞條的數(shù)量。統(tǒng)計注冊 IP 數(shù)量。
HyperLogLog 只能提供不精確的去重計數(shù)方案,且不能返回集合中的元素本身。因此,它適用于對精度要求不是非常高的場景,而在需要精確計數(shù)時,可能需要考慮其他數(shù)據(jù)結(jié)構(gòu)或方法
# pfadd
127.0.0.1:6379> pfadd name redis
# pfcount
127.0.0.1:6379> pfcount name
# pfmerge
127.0.0.1:6379> pfmerge name name2
9.Geospatial
Redis 的 Geospatial 功能是 Redis 3.2 版本引入的一種用于處理地理空間數(shù)據(jù)的數(shù)據(jù)類型。它允許用戶存儲地理位置信息,并執(zhí)行一些地理相關(guān)的操作,如計算兩個地點之間的距離、查找給定半徑內(nèi)的所有地點等。
Redis Geospatial 使用的是有序集合(sorted sets)來存儲地理位置信息,并通過 Geohash 編碼來實現(xiàn)地理位置的索引和查詢
# geoadd
# 規(guī)則:兩級無法直接添加,我們一般會下載城市數(shù)據(jù),直接通過java程序一次性導入!
# 有效的經(jīng)度從-180度到180度。
# 有效的緯度從-85.05112878度到85.05112878度。
# 當坐標位置超出上述指定范圍時,該命令將會返回一個錯誤。
# redis-cli --raw 解決亂碼
127.0.0.1:6379> geoadd china:city 121.47 31.23 shanghai
127.0.0.1:6379> geoadd china:city 114.05 22.52 shenzhen 116.38 39.90 beijing
# geopos
127.0.0.1:6379> geopos china:city beijing
# geodist
# 單位:
# m 表示單位為米[默認值]。
# km 表示單位為千米。
# mi 表示單位為英里。
# ft 表示單位為英尺。
# 如果用戶沒有顯式地指定單位參數(shù), 那么GEODIST 默認使用米作為單位
127.0.0.1:6379> geodist china:city beijing shanghai km
# georadius
# WITHDIST: 在返回位置元素的同時, 將位置元素與中心之間的距離也一并返回
# WITHCOORD: 將位置元素的經(jīng)度和維度也一并返回。
# WITHHASH: 以 52 位有符號整數(shù)的形式, 返回位置元素經(jīng)過原始 geohash 編碼的有序集合分值。 這個選項主要用于底層應用或者調(diào)試, 實際中的作用并不大
# COUNT 限定返回的記錄數(shù)
# ASC: 查找結(jié)果根據(jù)距離從近到遠排序
# DESC: 查找結(jié)果根據(jù)從遠到近排序
127.0.0.1:6379> GEORADIUS china:city 110 30 1000 km
# georadiusbymember 根據(jù)儲存在位置集合里面的某個地點獲取指定范圍內(nèi)的地理位置集合
# georadiusbymember與georadius用法類似,只不過把參數(shù)經(jīng)緯度改成了存在key里的member成員而已
127.0.0.1:6379> georadiusbymember china:city chengdu 300 km
# geohash 返回一個或多個位置對象的 geohash 值,該命令將返回11個字符的Geohash字符串!
# 將二維的經(jīng)緯度轉(zhuǎn)換為一維的字符串,如果兩個字符串越接近,那么則距離越近!
127.0.0.1:6379> geohash china:city beijing chongqi
1) "wx4fbxxfke0"
2) "wm5xzrybty0"
柚子快報邀請碼778899分享:緩存 Redis基本命令詳解
相關(guān)文章
本文內(nèi)容根據(jù)網(wǎng)絡資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。