【Redis學習⑴】Redis入門安裝及基礎資料的知識
Redis學習筆記所有文章:https://www.jianshu.com/nb/33547142
Redis安裝
-
推薦使用linux或者Mac 原因大家都懂得。redis基本都是在linux伺服器上使用
下載地址:https://redis.io/
主頁上的Download it下方 藍字 Redis X.X.X is the latest stable version.點選下載即可
可以複製連結,使用wget https://xxxxx 下載
其他:Ubuntu: apt-get install redis、CentOS:yum install redis、MacOS:brew install redis
如果是下載的tar包,則需要進入redis目錄下src,執行make
-
Redis的tar包檔案你至少需要知道以下內容
-
src
這個檔案中,在沒有執行make之前裡面都是c語言檔案。redis是C語言寫的。執行make過後, 你需要關注兩個檔案一個是redis-server 和 redis-cli 一個是啟動服務的一個是redis的client。
-
redis.conf
這個檔案是redis的配置檔案。如果你想要設定密碼,讓redis後臺執行,更改埠等就需要修改此檔案裡面的引數。
-
-
在src檔案目錄下執行redis
./redis-server --daemonize yes
--daemonize yes 表示在後臺執行
-
執行命令進入客戶端 在src目錄下
./redis-cli
Redis的5種基礎資料與redis-cli操作
Redis所有資料都是以字串作為名稱,key-value資料庫,5種基礎資料就是說的value
string(字串)、list(列表)、hash(字典)、set(集合)和zset(有序集)
-
string 字串
redis內部儲存為字元陣列,使用時redis內部採用預先分配冗餘的空間以減少頻繁的記憶體分配;最大支援512MB長度的字串,當超過預設的冗餘空間長度的時候,小於1MB就加倍,大於1MB就加1MB
通常使用redis儲存字串的時候需要將序列化後的字串存入,取出時再反序列化。
- redis-cli的字串相關操作
增加/更新 str 127.0.0.1:6379> set str aStringValue OK 檢視 str 127.0.0.1:6379> get str "aStringValue" 是否存在str 127.0.0.1:6379> exists str (integer) 1 刪除str 127.0.0.1:6379> del str (integer) 1 127.0.0.1:6379> get str (nil) 同時增加/更新多個 127.0.0.1:6379> mset str1 111 str2 222 str3 333 OK 同時檢視多個 127.0.0.1:6379> mget str1 str2 str3 str4 1) "111" 2) "222" 3) "333" 4) (nil) 設定 str1 定時刪除 5秒後 刪除 127.0.0.1:6379> expire str1 5 (integer) 1 127.0.0.1:6379> get str1 (nil) 新增str5 為 555 並5秒後自動刪除 127.0.0.1:6379> setex str5 5 555 OK 127.0.0.1:6379> get str5 (nil) 如果str5不存在就增加 127.0.0.1:6379> setnx str5 555 (integer) 1 127.0.0.1:6379> setnx str5 123 (integer) 0 127.0.0.1:6379> get str5 "555" 計數 127.0.0.1:6379> set num 1 OK 加1 127.0.0.1:6379> incr num (integer) 2 加10 127.0.0.1:6379> incrby num 10 (integer) 12 減3 127.0.0.1:6379> incrby num -3 (integer) 9 越界 922.....是long的最大值 127.0.0.1:6379> set big 9223372036854775807 OK 127.0.0.1:6379> incr big (error) ERR increment or decrement would overflow
-
list 列表
Redis中的list是以雙向連結串列的資料結構存在的插入刪除速度非常快O(1)的時間複雜度。索引定位慢需要迴圈一次才能找到所以需要O(n)。
從左邊加值進list 127.0.0.1:6379> lpush list abc 123 qwe (integer) 3 獲取list的所有元素,你也可以獲取指定位置的資料 1 -2 就是從第1個(從0開始計數)到倒數第二個 -1就是倒數第一個 127.0.0.1:6379> lrange list 0 -1 1) "qwe" 2) "123" 3) "abc" 從左邊開始獲取 127.0.0.1:6379> lpop list "qwe" 127.0.0.1:6379> lpop list "123" 127.0.0.1:6379> lpop list "abc" 127.0.0.1:6379> lrange list 0 -1 (empty list or set) 從左邊開始加值到list中 127.0.0.1:6379> lpush list abc 123 qwe (integer) 3 從右邊開始獲取 獲取出來列表中就自動移除 127.0.0.1:6379> rpop list "abc" 127.0.0.1:6379> rpop list "123" 127.0.0.1:6379> rpop list "qwe" 從右邊開始加值到list中 127.0.0.1:6379> rpush list abc 123 qwe (integer) 3 127.0.0.1:6379> lrange list 0 -1 1) "abc" 2) "123" 3) "qwe" 沒有rrange 127.0.0.1:6379> rrange list 0 -1 (error) ERR unknown command `rrange`, with args beginning with: `list`, `0`, `-1`, 獲取list的長度 127.0.0.1:6379> llen list (integer) 3 沒有rlen指令 127.0.0.1:6379> rlen list (error) ERR unknown command `rlen`, with args beginning with: `list`, 獲取list中某個位置的值 O(n) 127.0.0.1:6379> lindex list 0 "abc" 127.0.0.1:6379> lindex list 2 "qwe" 沒有rindex 127.0.0.1:6379> rindex list 0 (error) ERR unknown command `rindex`, with args beginning with: `list`, `0`, 擷取list表中的資料 O(n) 127.0.0.1:6379> ltrim list 1 -2 OK 127.0.0.1:6379> lrange list 0 -1 1) "123"
注意
- 有些指令是是隻有l(left)沒有r(right)的。可以看下上面的例子。最好自己動手實踐一遍
- 如果有運算元比如ltrim list 1 -2 這個指令是擷取list中第一位到倒數第二位的資料,其他都不要了。當中的負數的意思是倒數,-1倒數第一個,-3倒數第三個。以此類推
- 上面例子的list是個key 你也可以取別的名字,
- 一些O(n)的操作,為了保證效率最好慎用。
- 有push和pop指令(left和right自行選擇),可以用來做佇列和棧操作。FIFO(先入先出)和LIFO(後入先出)
- list不是簡單的雙向連結串列。Redis將雙向連結串列和zipList(壓縮列表)結合起來組成了quickList(快速連結串列)。
-
hash 字典
Redis中hash同Java的HashMap差不多,是資料和連結串列結合起來的資料結構。不過Redis中的字典值只能是string,此外Redis中ReHash的方式和Java不一樣。
Redis的ReHash是有一個緩慢過程的,在ReHash中,會新建一個hash結構,把老的慢慢加入新的hash結構中,如果在rehash時有查詢,就會同時查詢兩個hash;當老的hash結構的元素移動完了,這個老的hash就會被刪除了。
在person中加入desc內容為 i am a boy 中間有空格需要用英文的單引號或者雙引號包裹。 127.0.0.1:6379> hset person desc 'i am a boy.' (integer) 1 在person中加入name內容為 lss 127.0.0.1:6379> hset person name lss (integer) 1 127.0.0.1:6379> hset person age 18 (integer) 1 127.0.0.1:6379> hset person hometown "sc province" (integer) 1 得到person的所有內容。key和value交替出現 127.0.0.1:6379> hgetall person 1) "desc" 2) "i am a boy." 3) "name" 4) "lss" 5) "age" 6) "18" 7) "hometown" 8) "sc province" key-value的個數 127.0.0.1:6379> hlen person (integer) 4 獲取person中的desc內容 127.0.0.1:6379> hget person desc "i am a boy." 更新person的desc 注意返回值是0 127.0.0.1:6379> hset person desc 'new description.' (integer) 0 127.0.0.1:6379> hget person desc "new description." 批量set 127.0.0.1:6379> hmset person desc 'fianl desc' other '123' OK 127.0.0.1:6379> hgetall person 1) "desc" 2) "fianl desc" 3) "name" 4) "lss" 5) "age" 6) "18" 7) "hometown" 8) "sc province" 9) "other" 10) "123" 數字計算操作 127.0.0.1:6379> hget person age "18" 注意沒有hincr 127.0.0.1:6379> hincr person age (error) ERR unknown command `hincr`, with args beginning with: `person`, `age`, 不過有hincrby, 讓person中的age加2 127.0.0.1:6379> hincrby person age 2 (integer) 20
-
set 集合
set是一個無序集合,內部實現相當於一個value都為null的hash,所以它儲存的元素都是唯一的。當set的最後一個袁術被刪除,記憶體就被回收。
新增元素 127.0.0.1:6379> sadd ids 123 (integer) 1 127.0.0.1:6379> sadd ids 222 (integer) 1 重複元素返回0 127.0.0.1:6379> sadd ids 123 (integer) 0 同時加多個元素 返回個數 127.0.0.1:6379> sadd ids 154 124 (integer) 2 同時加多個袁術 重複的自動忽略 返回有效新增的個數 127.0.0.1:6379> sadd ids 154 aaa (integer) 1 顯示所有,結果是無序的,和新增順序無關 127.0.0.1:6379> smembers ids 1) "154" 2) "124" 3) "222" 4) "123" 5) "aaa" 是否存在123在ids中 127.0.0.1:6379> sismember ids 123 (integer) 1 127.0.0.1:6379> sismember ids 121 (integer) 0 獲取元素個數 127.0.0.1:6379> scard ids (integer) 5 彈出一個元素,移除並返回集合中的一個隨機元素 127.0.0.1:6379> spop ids "aaa" 127.0.0.1:6379> spop ids "154" 彈出兩個過後ids的結果。 127.0.0.1:6379> smembers ids 1) "222" 2) "124" 3) "123" 移除ids中的元素 127.0.0.1:6379> srem ids 123 (integer) 1 127.0.0.1:6379> srem ids 124 222 (integer) 2 最後一個元素移除後,ids自動被回收。 127.0.0.1:6379> smembers ids (empty list or set)
-
zset 有序集
在set基礎上加入了一個score欄位,通過利用score來進行相關的排序。資料結果是一種叫跳躍連結串列的東西,有點複雜,具體可以Google一下。zset當元素都被刪除了過後,記憶體會自動回收。
在classmates裡面怎家分數為19的xiaoming元素 127.0.0.1:6379> zadd classmates 19 xiaoming (integer) 1 127.0.0.1:6379> zadd classmates 17 xiaobai (integer) 1 127.0.0.1:6379> zadd classmates 21.5 alihao (integer) 1 檢視所有元素 正序 127.0.0.1:6379> zrange classmates 0 -1 1) "xiaobai" 2) "xiaoming" 3) "alihao" 檢視所有元素 逆序 127.0.0.1:6379> zrevrange classmates 0 -1 1) "alihao" 2) "xiaoming" 3) "xiaobai" 獲取元素個數 127.0.0.1:6379> zcard classmates (integer) 3 查詢xiaobai的score 127.0.0.1:6379> zscore classmates xiaobai "17" 127.0.0.1:6379> zscore classmates alihao "21.5" 查詢排序的位置 127.0.0.1:6379> zrank classmates xiaoming (integer) 1 127.0.0.1:6379> zrank classmates xiaobai (integer) 0 127.0.0.1:6379> zrank classmates alihao (integer) 2 根據範圍查詢元素 127.0.0.1:6379> zrangebyscore classmates 0 20 1) "xiaobai" 2) "xiaoming" 查詢從負無窮到20的元素 和 分數 127.0.0.1:6379> zrangebyscore classmates -inf 20 withscores 1) "xiaobai" 2) "17" 3) "xiaoming" 4) "19" 移除xiaoming元素 127.0.0.1:6379> zrem classmates xiaoming (integer) 1 127.0.0.1:6379> zrange classmates 0 -1 1) "xiaobai" 2) "alihao"
-
其他補充
- 查詢所有key值可以用keys * 命令,查詢某一個key是否存在可以用keys key名字 查詢
- expire操作過後,如果值在還沒有消失的時候更新了,過期時間就會自動去除
- FLUSHALL可以清楚所有的資料
- 基礎寫到這裡,後面更新redis的一些應用
相關文章
- Day148.Redis入門介紹、安裝、基本知識 -RedisRedis
- Redis基礎知識(學習筆記5--Redis Cluster)Redis筆記
- Redis基礎知識(學習筆記19--Redis Sentinel)Redis筆記
- Redis基礎知識(學習筆記8--Redis命令(1))Redis筆記
- Redis基礎知識(學習筆記9--Redis命令(2))Redis筆記
- Redis基礎知識(學習筆記10--Redis命令(3))Redis筆記
- Redis基礎知識Redis
- Redis基礎知識(學習筆記1--五種基礎資料結構)Redis筆記資料結構
- Redis基礎知識(學習筆記3--Redlock)Redis筆記
- Redis基礎知識(學習筆記11--SDS)Redis筆記
- Redis資料庫的安裝與基礎命令Redis資料庫
- Redis入門基礎Redis
- Redis基礎知識詳解Redis
- 大資料分析入門基礎知識學什麼?大資料
- 資料庫安裝以及基礎知識資料庫
- 09、redis安裝入門Redis
- Redis基礎知識(學習筆記2--分散式鎖)Redis筆記分散式
- Redis基礎知識(學習筆記16--持久化 (2))Redis筆記持久化
- Redis基礎知識(學習筆記17--持久化 (3))Redis筆記持久化
- Redis基礎知識(學習筆記15--持久化 (1))Redis筆記持久化
- Redis 基礎學習Redis
- [Redis 系列]redis 學習一,資料庫的演進及 Nosql 的初步認知Redis資料庫SQL
- Redis學習——安裝Redis
- [基礎知識] Redis 配置檔案Redis
- Redis 基礎知識點總結Redis
- Redis基礎知識(學習筆記22--分散式鎖 Redisson )Redis筆記分散式
- Redis基礎知識(學習筆記14--釋出/訂閱)Redis筆記
- Redis基礎知識(學習筆記18--主從叢集)Redis筆記
- redis學習筆記1: Redis入門Redis筆記
- Redis入門及常用命令學習Redis
- Redis 入門 - 五大基礎型別及其指令學習Redis型別
- Redis學習筆記【01】 - 安裝RedisRedis筆記
- redis學習——基礎指令Redis
- [Redis 基礎知識] Redis Zset 型別常用命令Redis型別
- [Redis 基礎知識] Redis Set 型別常用命令Redis型別
- [Redis 基礎知識] Redis List 型別常用命令Redis型別
- Redis基礎知識(學習筆記21--Lua 指令碼語言)Redis筆記指令碼
- Redis基礎知識(學習筆記4--高併發問題)Redis筆記