導航:首頁 > 程序命令 > redis版本命令

redis版本命令

發布時間:2023-09-16 03:09:50

❶ Redis --- 八種數據類型(基本命令

String、Hash、List、Set和Zset。

等同於java中的, Map<String,String> string 是redis裡面的最基本的數據類型,一個key對應一個value。

應用場景 :String是最常用的一種數據類型,普通的key/value存儲都可以歸為此類,如用戶信息,登錄信息和配置信息等;

實現方式 :String在redis內部存儲默認就是一個字元串,被redisObject所引用,當遇到incr、decr等操作(自增自減等原子操作)時會轉成數值型進行計算,此時redisObject的encoding欄位為int。

Redis雖然是用C語言寫的,但卻沒有直接用C語言的字元串,而是自己實現了一套字元串。目的就是為了提升速度,提升性能。 Redis構建了一個叫做簡單動態字元串(Simple Dynamic String),簡稱SDS。

Redis的字元串也會遵守C語言的字元串的實現規則,即 最後一個字元為空字元。然而這個空字元不會被計算在len里頭。

Redis動態擴展步驟:

Redis字元串的性能優勢

常用命令 :set/get/decr/incr/mget等,具體如下;

ps:計數器(字元串的內容為整數的時候可以使用),如 set number 1。

補充:

等同於java中的: Map<String,Map<String,String>> ,redis的hash是一個string類型的field和value的映射表, 特別適合存儲對象。 在redis中,hash因為是一個集合,所以有兩層。第一層是key:hash集合value,第二層是hashkey:string value。所以判斷是否採用hash的時候可以參照有兩層key的設計來做參考。並且注意的是, 設置過期時間只能在第一層的key上面設置。

應用場景 :我們要存儲一個用戶信息對象數據,其中包括用戶ID、用戶姓名、年齡和生日,通過用戶ID我們希望獲取該用戶的姓名或者年齡或者生日;

實現方式 :Redis的Hash實際是內部存儲的Value為一個HashMap,並提供了直接存取這個Map成員的介面。如,Key是用戶ID, value是一個Map。 這個Map的key是成員的屬性名,value是屬性值 。這樣對數據的修改和存取都可以直接通過其內部Map的Key(Redis里稱內部Map的key為field), 也就是通過 key(用戶ID) + field(屬性標簽) 就可以操作對應屬性數據。 當前HashMap的實現有兩種方式 :當HashMap的成員比較少時Redis為了節省內存會採用類似一維數組的方式來緊湊存儲,而不會採用真正的HashMap結構,這時對應的value的redisObject的encoding為zipmap,當成員數量增大時會自動轉成真正的HashMap,此時redisObject的encoding欄位為int。

常用命令 :hget/hset/hgetall等,具體如下:

等同於java中的 Map<String,List<String>> ,list 底層是一個鏈表,在redis中,插入list中的值,只需要找到list的key即可,而不需要像hash一樣插入兩層的key。 list是一種有序的、可重復的集合。

應用場景 :Redis list的應用場景非常多,也是Redis最重要的數據結構之一,比如twitter的關注列表,粉絲列表等都可以用Redis的list結構來實現;

實現方式 :Redis list的實現為一個 雙向鏈表 ,即可以支持反向查找和遍歷,更方便操作,不過帶來了部分額外的內存開銷,Redis內部的很多實現,包括 發送緩沖隊列 等也都是用的這個數據結構。

常用命令 :lpush/rpush/lpop/rpop/lrange等,具體如下:

性能總結 :

它是一個字元串鏈表,left、right都可以插入添加。

等同於java中的 Map<String,Set<String>> ,Set 是一種無序的,不能重復的集合。並且在redis中,只有一個key它的底層由hashTable實現的,天生去重。

應用場景 :Redis set對外提供的功能與list類似是一個列表的功能,特殊之處在於set是可以自動去重的,當你需要存儲一個列表數據,又不希望出現重復數據時,set是一個很好的選擇,並且 set提供了判斷某個成員是否在一個set集合內的重要介面 ,這個也是list所不能提供的;如保存一些標簽的名字。標簽的名字不可以重復,順序是可以無序的。

實現方式 :set 的內部實現是一個 value永遠為null的HashMap,實際就是通過計算hash的方式來快速排重的,這也是set能提供判斷一個成員是否在集合內的原因。

常用命令 :sadd/spop/smembers/sunion等,具體如下:

ZSet(Sorted Set:有序集合) 每個元素都會關聯一個double類型的分數score,分數允許重復,集合元素按照score排序( 當score相同的時候,會按照被插入的鍵的字典順序進行排序 ),還可以通過 score 的范圍來獲取元素的列表。

應用場景 :Redis sorted set的使用場景與set類似,區別是set不是自動有序的,而sorted set可以 通過用戶額外提供一個優先順序(score)的參數來為成員排序,並且是插入有序的,即自動排序。 當你需要一個有序的並且不重復的集合列表,那麼可以選擇sorted set數據結構,比如twitter 的public timeline可以以發表時間作為score來存儲,這樣獲取時就是自動按時間排好序的。

底層實現 : zset 是 Redis 提供的一個非常特別的數據結構,常用作排行榜等功能,以用戶 id 為 value ,關注時間或者分數作為 score 進行排序。實現機制分別是 zipList 和 skipList 。規則如下:

zipList:滿足以下兩個條件

skipList:不滿足以上兩個條件時使用跳錶、組合了hash和skipList

為什麼用skiplist不用平衡樹?

主要從內存佔用、對范圍查找的支持和實現難易程度這三方面總結的原因。

拓展:mysql為什麼不用跳錶?

常用命令 :zadd/zrange/zrem/zcard等;

官網地址: https://redis.io/commands/geoadd

可以用來推算兩地之間的距離,方圓半徑內的人。

關於經度緯度的限制: https://www.redis.net.cn/order/3685.html

一般我們使用Hyperloglog做基數統計。

什麼是基數?就是一個集合中不重復的數的個數。

集合A:{1,3,5,7,9,7}

集合B:{1,3,5,7,9}

AB集合的基數都是5

應用:統計網站的訪問量(一個人訪問網站很多次仍然算作一次)。

優點:佔用的內存是固定的,找2^64次方個數的基數,只需要12KB內存。

缺點:有0.81%的錯誤率,可以忽略不計

概述: bitmap 存儲的是連續的二進制數字(0 和 1),通過 bitmap, 只需要一個 bit 位來表示某個元素對應的值或者狀態,key 就是對應元素本身 。 我們知道 8 個 bit 可以組成一個 byte,所以 bitmap 本身會極大的節省儲存空間。

應用場景: 適合需要保存狀態信息(比如是否簽到、是否登錄...)並需要進一步對這些信息進行分析的場景。比如用戶簽到情況、活躍用戶情況、用戶行為統計(比如是否點贊過某個視頻)。

針對上面提到的一些場景,這里進行進一步說明。

使用場景一:用戶行為分析 很多網站為了分析你的喜好,需要研究你點贊過的內容。

使用場景二:統計活躍用戶

使用時間作為 key,然後用戶 ID 為 offset,如果當日活躍過就設置為 1

那麼我該如果計算某幾天/月/年的活躍用戶呢(暫且約定,統計時間內只有有一天在線就稱為活躍),有請下一個 redis 的命令

使用場景三:用戶在線狀態

對於獲取或者統計用戶在線狀態,使用 bitmap 是一個節約空間效率又高的一種方法。

只需要一個 key,然後用戶 ID 為 offset,如果在線就設置為 1,不在線就設置為 0。

補充

巨人的肩膀:

https://www.cnblogs.com/Small-sunshine/p/11687809.html
https://mp.weixin.qq.com/s/CMu7oXVIKp2s-PXTdMlimA

❷ 深入了解Redis操作五大數據類型常用命令

我們知道Redis默認有16個資料庫,默認是第0個資料庫,那麼如果在需要對資料庫進行切換的時候,我們就可以使用下面這個命令:


使用如下命令進行切換

如果想要清除指定某一個資料庫的數據


清除所有資料庫的數據

接下來這個命令應該是最常用的了

平常在開發中,我們還需要經常對key進行判斷,判斷其是否存在

因為我們設置的緩存數據一般都不能是永久的,這個時候就需要我們在存儲數據的時候,就為其設置過期時間。

string類型是Redis中五大基本數據類型之一,這也是最常使用到的一個數據類型,所有很多小夥伴們對Redis的認識和操作就僅僅的停留在了對Redis的操作層面,但是你是否知道string類型中的相關命令,還是有非常多實用的

接下來先看一下對string類型進行基本存儲和獲取的命令。

如果我們存儲的string中的內容是數字的話,我們也可以對其進行增或減操作,Redis可以自動的對字元串進行相關的操作。實現的命令如下:

使用msetnx時,同時設置一個或多個 key-value 對,當且僅當所有給定 key都不存在時才成立。

getset命令從字面意思就可以看出來,他的作用是先get再set。


總結string類似的使用場景:

在使用list類型進行存取的時候,有兩個命令需要進行區分:

注意:只有pop和push才分左右,其他的l都是list的意思

總結:

總結set集合一般用於元素的不重復的場景,比如抽獎系統,輪播等場景下

在使用hash集合的時候,要注意,hash其實就是一個Map集合,key-map的時候,值是一個map集合的形式進行存儲的,也和Java中的hashmap有一個類似。


HVALS獲取所有的value,HKEYS獲取所有的key,HGETALL獲取所有的鍵值


總結:

hash可以用於存儲變更的數據,比如user,name,age等,尤其是用戶信息之類的,hash更加適合用於對象的存儲,string更加適合用於字元串的存儲。

在set集合的基礎上增加一個序列號,來進行排序


ZRANGEBYSCORE使用語法


總結


以上是在對五種數據類型進行存取時的一些常用命令操作。關於其他的命令使用,小夥伴們在用到的時候可以直接入官網查看就可以了。

❸ Redis啟動、停止、Redis命令行的操作

1.redis命令

1 redis執行了make install後,redis的課執行文件都會自動復制到 /usr/local/bin 目錄

2 redis-server redis伺服器

3 redis-cli redis命令行客戶端

4 redis-benchmark redis性能測試工具

5 redis-check-aof aof文件修復工具6redis-check-mp rdb文件檢查工具

2.停止 redis 命令 

# 停止Redis命令

redis-cli shutdown

3.啟動 redis 命令

(1). # 啟動 redis-server

redis-server

(2). # 帶配置文件啟動

(3). # 帶配置文件啟動 且指定某幾個配置 配置名稱前加 -- 

 會覆蓋配置文件裡面的值

回到頂部

4.redis命令行客戶端

(1).發送命令

注意:框裡面的是 6379 裡面沒有登錄成功,下面改成了 1123 成功了,因為剛才上面改了埠

(2).命令返回值

狀態回復:pong表示可用

錯誤回復:不知道這個什麼命令

整數回復:多種命令會回復整數

下面的字元串回復,都是賦值了才有。

字元串回復:

多行字元串回復:

❹ redis 命令執行過程

redis數據淘汰原理
redis過期數據刪除策略
redis server事件模型
redis cluster mget 引發的討論
redis 3.x windows 集群搭建
redis 命令執行過程
redis string底層數據結構
redis list底層數據結構
redis hash底層數據結構好鬧
redis set底層數據結構
redis zset底層數據結構
redis 客戶端管理
redis 主從同步-slave端
redis 主從同步-master端
redis 主從超時檢測
redis aof持久化
redis rdb持久化
redis 數據恢復過程
redis TTL實現原理
redis cluster集群建立
redis cluster集群選主

 這篇文章的目的是為了描述redis server在處理client命令的執行過程,大概包括流程圖、源碼、以及redis的命令格式說明,redis的通信協議參考自redis的則頌 官網


 整個redis的server端命令執行過程就如下面這個流程圖:



 nread = read(fd, c->querybuf+qblen, readlen);負責讀取命令數,通過processInputBuffer進行下一步處理。


 核心在於processInlineBuffer處理內聯命令,processMultibulkBuffer處理批量命令包括get/set等,核心的processCommand用於執行命令。


 執行命令的過程其實主要是尋找命令對應的執行函數,通過lookupCommand查找對應的執行命令,通過call執行命令。


 負責執行命令 c->cmd->proc 並更新統計信息,執行完成後負責同步數據 propagate


 主要是負責同步數據到AOF文件和slave節點,feedAppendOnlyFile負責友盯罩同步到AOF文件,replicationFeedSlaves負責同步


 AOF涉及的緩存有多份,包括


 包含了命令和對應執行函數的映射關系,應該看上去很清晰命令。



協議的一般格式如下,注意前面的*或者$等字元,結尾的 是分隔符。

其中, 回復中的第二個元素為空。


❺ shell 下執行redis相關操作

redis-cli + redis命令 執行相關redis操作,這種情況經常用在模糊訪問key的場景。因為Redis keys命令支持模式匹配,其他命令不支持稿乎。

       如有時候需要根據一定的模式來模糊刪除key,但是del命令不支持模式匹配,

這時只能結合shell命令來完成了。



[root@localhost ~]#/usr/local/redis-2.6.14/src/鍵伍悉redis-cli get lifekey

"hello"

刪除所有的鍵

[root@localhost src]# pwd

/usr/local/redis-2.6.14/src

[root@localhost src]# ./redis-cli keys"*" | xargs redis-cli del      # 刪除本地 redis

     橘脊  刪除遠程redis上指定的模式匹配鍵

[root@localhost src]# ./redis-cli -h 10.255.209.34-p 16379 -n 11 keys "*:custid" | xargs ./redis-cli -h 10.255.209.34-p 16379 -n 11 del

(integer) 12

導出redis數據到本地文件

[root@localhost src]# ./redis-cli -h 10.255.209.34-p 16379 -n 11 --rdb backup.rdb

shad@�����.

❻ 若redis版本不支持redis-cli命令,怎麼連接

[Redis] redis-cli 命令總結

Redis提供了豐富的命令(command)對資料庫和各種數據類型進行操作,這些command可以在Linux終端使用。
編程時,比如使用Redis 的Java語言包,這些命令都有對應的方法。下面將Redis提供的命令做一總結。

官網命令列表:http://redis.io/commands (英文)

1、連接操作相關的命令

quit:關閉連接(connection)
auth:簡單密碼認證
2、對value操作的命令

exists(key):確認一個key是否存在
del(key):刪除一個key
type(key):返回值的類型
keys(pattern):返回滿足給定pattern的所有key
randomkey:隨機返回key空間的一個key
rename(oldname, newname):將key由oldname重命名為newname,若newname存在則刪除newname表示的key
dbsize:返回當前資料庫中key的數目
expire:設定一個key的活動時間(s)
ttl:獲得一個key的活動時間
select(index):按索引查詢
move(key, dbindex):將當前資料庫中的key轉移到有dbindex索引的資料庫
flushdb:刪除當前選擇資料庫中的所有key
flushall:刪除所有資料庫中的所有key
3、對String操作的命令

set(key, value):給資料庫中名稱為key的string賦予值value
get(key):返回資料庫中名稱為key的string的value
getset(key, value):給名稱為key的string賦予上一次的value
mget(key1, key2,…, key N):返回庫中多個string(它們的名稱為key1,key2…)的value
setnx(key, value):如果不存在名稱為key的string,則向庫中添加string,名稱為key,值為value
setex(key, time, value):向庫中添加string(名稱為key,值為value)同時,設定過期時間time
mset(key1, value1, key2, value2,…key N, value N):同時給多個string賦值,名稱為key i的string賦值value i
msetnx(key1, value1, key2, value2,…key N, value N):如果所有名稱為key i的string都不存在,則向庫中添加string,
名稱key i賦值為value i
incr(key):名稱為key的string增1操作
incrby(key, integer):名稱為key的string增加integer
decr(key):名稱為key的string減1操作
decrby(key, integer):名稱為key的string減少integer
append(key, value):名稱為key的string的值附加value
substr(key, start, end):返回名稱為key的string的value的子串
4、對List操作的命令

rpush(key, value):在名稱為key的list尾添加一個值為value的元素
lpush(key, value):在名稱為key的list頭添加一個值為value的 元素
llen(key):返回名稱為key的list的長度
lrange(key, start, end):返回名稱為key的list中start至end之間的元素(下標從0開始,下同)
ltrim(key, start, end):截取名稱為key的list,保留start至end之間的元素
lindex(key, index):返回名稱為key的list中index位置的元素
lset(key, index, value):給名稱為key的list中index位置的元素賦值為value
lrem(key, count, value):刪除count個名稱為key的list中值為value的元素。
count為0,刪除所有值為value的元素,count>0從頭至尾刪除count個值為value的元素,count<0從尾到頭刪除|count|個值為value的元素。
lpop(key):返回並刪除名稱為key的list中的首元素 rpop(key):返回並刪除名稱為key的list中的尾元素
blpop(key1, key2,… key N, timeout):lpop命令的block版本。
即當timeout為0時,若遇到名稱為key i的list不存在或該list為空,則命令結束。
如果timeout>0,則遇到上述情況時,等待timeout秒,如果問題沒有解決,則對keyi+1開始的list執行pop操作。
brpop(key1, key2,… key N, timeout):rpop的block版本。參考上一命令。
rpoplpush(srckey, dstkey):返回並刪除名稱為srckey的list的尾元素,並將該元素添加到名稱為dstkey的list的頭部
5、對Set操作的命令

sadd(key, member):向名稱為key的set中添加元素member
srem(key, member) :刪除名稱為key的set中的元素member
spop(key) :隨機返回並刪除名稱為key的set中一個元素
smove(srckey, dstkey, member) :將member元素從名稱為srckey的集合移到名稱為dstkey的集合
scard(key) :返回名稱為key的set的基數
sismember(key, member) :測試member是否是名稱為key的set的元素
sinter(key1, key2,…key N) :求交集
sinterstore(dstkey, key1, key2,…key N) :求交集並將交集保存到dstkey的集合
sunion(key1, key2,…key N) :求並集
sunionstore(dstkey, key1, key2,…key N) :求並集並將並集保存到dstkey的集合
sdiff(key1, key2,…key N) :求差集
sdiffstore(dstkey, key1, key2,…key N) :求差集並將差集保存到dstkey的集合
smembers(key) :返回名稱為key的set的所有元素
srandmember(key) :隨機返回名稱為key的set的一個元素
6、對zset(sorted set)操作的命令

zadd(key, score, member):向名稱為key的zset中添加元素member,score用於排序。如果該元素已經存在,則根據score更新該元素的順序。
zrem(key, member) :刪除名稱為key的zset中的元素member
zincrby(key, increment, member) :如果在名稱為key的zset中已經存在元素member,則該元素的score增加increment;
否則向集合中添加該元素,其score的值為increment
zrank(key, member) :返回名稱為key的zset(元素已按score從小到大排序)中member元素的rank(即index,從0開始),
若沒有member元素,返回「nil」
zrevrank(key, member) :返回名稱為key的zset(元素已按score從大到小排序)中member元素的rank(即index,從0開始),
若沒有member元素,返回「nil」
zrange(key, start, end):返回名稱為key的zset(元素已按score從小到大排序)中的index從start到end的所有元素
zrevrange(key, start, end):返回名稱為key的zset(元素已按score從大到小排序)中的index從start到end的所有元素
zrangebyscore(key, min, max):返回名稱為key的zset中score >= min且score <= max的所有元素
zcard(key):返回名稱為key的zset的基數 zscore(key, element):返回名稱為key的zset中元素element的
score zremrangebyrank(key, min, max):刪除名稱為key的zset中rank >= min且rank <= max的所有元素
zremrangebyscore(key, min, max) :刪除名稱為key的zset中score >= min且score <= max的所有元素
zunionstore / zinterstore(dstkeyN, key1,…,keyN, WEIGHTS w1,…wN, AGGREGATE SUM|MIN|MAX):對N個zset求並集和交集,
並將最後的集合保存在dstkeyN中。對於集合中每一個元素的score,在進行AGGREGATE運算前,都要乘以對於的WEIGHT參數。
如果沒有提供WEIGHT,默認為1。默認的AGGREGATE是SUM,即結果集合中元素的score是所有集合對應元素進行SUM運算的值,而MIN和MAX是指,
結果集合中元素的score是所有集合對應元素中最小值和最大值。
7、對Hash操作的命令

hset(key, field, value):向名稱為key的hash中添加元素field<—>value
hget(key, field):返回名稱為key的hash中field對應的value
hmget(key, field1, …,field N):返回名稱為key的hash中field i對應的value
hmset(key, field1, value1,…,field N, value N):向名稱為key的hash中添加元素field i<—>value i
hincrby(key, field, integer):將名稱為key的hash中field的value增加integer
hexists(key, field):名稱為key的hash中是否存在鍵為field的域
hdel(key, field):刪除名稱為key的hash中鍵為field的域
hlen(key):返回名稱為key的hash中元素個數
hkeys(key):返回名稱為key的hash中所有鍵
hvals(key):返回名稱為key的hash中所有鍵對應的value
hgetall(key):返回名稱為key的hash中所有的鍵(field)及其對應的value
8、持久化

save:將數據同步保存到磁碟
bgsave:將數據非同步保存到磁碟
lastsave:返回上次成功將數據保存到磁碟的Unix時戳
shundown:將數據同步保存到磁碟,然後關閉服務
9、遠程服務控制

info:提供伺服器的信息和統計
monitor:實時轉儲收到的請求
slaveof:改變復制策略設置
config:在運行時配置Redis伺服器

閱讀全文

與redis版本命令相關的資料

熱點內容
伺服器如何定期執行指令 瀏覽:931
python下載python腳本 瀏覽:297
台達plc遠程編程 瀏覽:263
雲計算的後台伺服器 瀏覽:589
windows7的我的電腦咋創建文件夾 瀏覽:492
去視頻水印的app哪個好用 瀏覽:384
doc轉為pdf 瀏覽:48
華為加密壁紙怎麼提取 瀏覽:52
曲線命令的描述 瀏覽:454
php模板怎麼修改 瀏覽:999
單片機和微機編程的區別 瀏覽:642
金牛期貨哪個app好 瀏覽:803
程序員越老越貶值嗎 瀏覽:211
安卓手機用計算機如何隱藏應用 瀏覽:459
網吧伺服器如何架設 瀏覽:322
垃圾壓縮罐用電安全 瀏覽:621
b150能用什麼伺服器cpu 瀏覽:477
支付寶批量付款app哪個好 瀏覽:849
java開源社區源碼 瀏覽:475
cad哪個命令和滾輪一樣縮放 瀏覽:986