查看redis版本_redis详细介绍
一 介紹
1. redis介紹(redis安裝在磁盤,redsi數(shù)據(jù)存儲在內(nèi)存)
服務器交互
2. Redis是一種基于鍵值對(key-value)數(shù)據(jù)庫,其中value可以為string. hash. List. Set. Zset 等多種數(shù)據(jù)結構,可以滿足很多應用場景。還提供了鍵過期,發(fā)布訂閱,事務,流水線,等附加功能。
3. 流水線:redis的流水線功能允許客戶端一次將多個命令請求發(fā)送服務器,并將被執(zhí)行的多個命令請求的結果在一個命令回復中全部返回客戶端,使用這個功能可以有效地減少客戶端在執(zhí)行多個命令時需要與服務器進行通信的次數(shù)。
二 特性:
1. 速度快,數(shù)據(jù)放在內(nèi)存中,官方給出的讀寫性能10萬/s,與機器性能也有關系:
A) 數(shù)據(jù)放內(nèi)存中是速度快的主要原因
B) C語音實現(xiàn),與操作系統(tǒng)距離近
C) 使用了單線程,預防多線程可能產(chǎn)生的競爭問題
2. 鍵值對的數(shù)據(jù)結構服務器
3. 豐富的功能
4. 簡單穩(wěn)定,單線程
5. 持久化,發(fā)生斷電或機器故障,數(shù)據(jù)可能會丟失,持久化到硬盤
6. 主從復制,實現(xiàn)多個相同數(shù)據(jù)的redis副本
7. 高可用和分布式,哨兵機制實現(xiàn)高可用,保證redis節(jié)點故障發(fā)現(xiàn)和自動轉移
三 使用場景:
1. 緩存: 合理使用緩存加快數(shù)據(jù)訪問速度,降低后端數(shù)據(jù)源壓力
2. 排行榜: 按照熱度排名,按照發(fā)布時間排名,主要用到列表和有序集合
3. 計數(shù)器應用:視頻網(wǎng)站播放次數(shù),網(wǎng)站瀏覽次數(shù),使用redis計數(shù)
4. 社交網(wǎng)站:贊,踩,粉絲,下拉,刷新
5. 消息隊列: 發(fā)布和訂閱
四 正確安裝和使用
1. Linux上安裝,windows安裝
2. 配置,啟動,操作,關閉
可執(zhí)行文件
作用
Redis-service
啟動redis
Redis-cli
Redsi命令客戶端
Redis-benchmark
基準測試工具
Redis-check-aof
AOF持久化文件檢測和修復工具
Redis-check-dump
RDB持久化文件檢測和修復工具
Redis-sentinel
啟動哨兵
3. redis-service 啟動:
1. 默認配置: redis-service,日志輸出版本信息,端口6379
2. 運行啟動: redis-service
3. 配置文件啟動: redis-service /opt/redis/redis.conf,靈活,生產(chǎn)環(huán)境使用
4. Redis-cli啟動:
1) 交互式: redis-cli -h(host) -p(port) 鏈接到redis服務,沒有h默認鏈接127.0.0.1
2) 命令式: redis-cli get hello //取key=hello的value
3) 停止使用: redis服務 redis-cli shutdown
注意:
A:關閉時,斷開鏈接,持久化文件生成
B:還可以用kill關閉,此方法不會做持久化,還會造成緩沖區(qū)非法關閉,可能會造成AOF和數(shù)據(jù)丟失
4) 重大版本:
1. 版本號第二位為奇數(shù),為非穩(wěn)定版本
2. 第二位為偶數(shù),為穩(wěn)定版本
3. 當前奇數(shù)版本是下一個穩(wěn)定版本的開發(fā)版本(如2.9版本是3.0版本的開發(fā)版本)
五 redis的API應用:
1. redsi 基本通訊模型
例子: 三個客戶端同時執(zhí)行命令
客戶端1: set name test
客戶端2: incr num
客戶端3: incr num
指令
執(zhí)行過程: 發(fā)送指令->執(zhí)行指令->返回結果
執(zhí)行命令: 單線程執(zhí)行,所有命令進入隊列,按照順序執(zhí)行,使用I/O多路復用解決問題
單線程快的原因: 純內(nèi)存訪問,非阻塞I/O,單線程避免線程切換和競爭產(chǎn)生資源消耗
2. 數(shù)據(jù)結構(string)
1. 字符串類型: 實際上可以是字符串(包含xml json),還有數(shù)字,二進制,最大不能超過512MB
2. 設值命令: set age 23 ex 10 //10秒后過期
3. 獲取命令: get age //存在返回value 不存在返回nil
4. 批量設值: mset country
5. 批量獲取mget country
6. 若沒有mget命令,則要執(zhí)行N次get 命令
交互
7. 使用mget=1次網(wǎng)絡請求加redis內(nèi)部N次查詢
N次查詢
8. 計數(shù): incr age //必須為整數(shù)增加1,非整數(shù)返回錯誤,無age鍵從0自增返回1
decr age //整數(shù)age減1
Incrby age 2//整數(shù)age +2
Decrby age 2 //整數(shù) age -2
Incrbyfloat score 1.1 //浮點型 score+1.1
9. append 追加命令: set name hello append name world //追加后成 helloworld
10. 字符串長度: set hello “中航”:strlen hello// 結果6, 每個中文站3個字節(jié)
11. 截取字符串: set name helloworld:getranget name 24// 返回llo
3 數(shù)據(jù)結構 --哈希 hash
1. 是一個string 類型的 filed 和 value 的映射表,hash特適合用于存儲對象
hash
以上圖片命令分別為:
Set user:1:name name
Set user:1:age 19
可以發(fā)現(xiàn),用字符串類型可以存儲,但會過多占用key,浪費內(nèi)存。
可以使用hash類型存儲: hmset user:1 name name age 19。
2.命令: hset key field value
設值: hset usetr:1name name //成功返回1失敗0
取值: hget user:1 name //返回name
刪值: hdel user:1 age
計算個數(shù): hset user:1 name name;hset user:1 AGE 23; hlen user:1 //返回2 user:1有兩個屬性值
批量設值: hmset user:2 name name age 20 sex boy
批量取值: hmget user:2 name age sex
判斷field是否存在:hexists user:2 name //若存在返回1不存在返回0
獲取所有的field: hkeys user:2
獲取user:2所有的value: hvals user:2
獲取user:2 所有field與value: hgetall user:2 //name age sex name 19 boy
增加1: hincrby user:2 age 1 //age+1
Hincrbyfloat user:2 age 2//浮點型加2
3. 應用場景
hash應用場景
Hash類型是稀疏,每個鍵可以有不同的field,若用redis 模擬做關系復雜查詢開發(fā)困難,維護成本高
4. 三種方案實現(xiàn)用戶信息存儲優(yōu)缺點:
1) 原生: set user:1 name name
Set user:1 age 19
優(yōu)點: 簡單直觀,每個鍵對應一個值
缺點: 鍵數(shù)過多,占用內(nèi)存多,用戶信息過于分散,不用于生成環(huán)境
2) 將對象序列化存入reds
Set user:1 serialize(user)
優(yōu)點: 編程簡單,使用合理可減少內(nèi)存空間消耗
缺點: 要控制ziplist與hashtable 兩種編碼轉換,且hashtable會消耗更多內(nèi)存
總結: 對于更新不多的情況下,可以使用序列化,對于value值大于64字節(jié)可以使用hash類型
4數(shù)據(jù)結構-列表(list)
1. 用來存儲多個有序的字符串,一個列表最多可以存2的32次方減1個元素
存儲
因為有序,可以通過索引下標獲取元素或某個范圍元素列表,列表元素可以重復
2. 列表命令:
常用命令
添加命令:
Rpush name cba //從右向左插入 cba 返回3
Lrange name 0-1 //從左道右獲取列表所有元素 返回cba
Lpush key c b a //從左向右插入cba
Linsert name before b teacher //在b之前插入teacher,after為之后,使用lrange name 0-1 查看:c teacher b a
查找命令:
Lrange key start end //索引下標特點: 從左道右為0到N-1
Lindex name -1 //返回最右末尾a,-2返回b
Lien name //返回當前列表長度
Lpop name //把最左邊的第一個元素c刪除
Rpop name //把最右邊的元素a刪除
5. 數(shù)據(jù)結構-集合
1. 保存多元素,與列表不一樣的是不允許有重復元素,且集合是無序的,一個集合最多可以存2的32方減1個元素,除了支持增刪改查,還支持集合交集,并集,差集
set集合
2. 命令:
Exists user //檢查user鍵是否存在
Sadd user a b c //向user 插入3個元素返回3
Sadd user a b //若在插入相同元素則會重復無效返回0
Smenmber user// 獲取user 的所有元素,返回結果無序
Srem user a //返回1,刪除a元素
Scard user // 返回2,計算元素個數(shù)
Sismember user a //判斷元素是否在集合存在,存在返回1,不存在0
Sranmember user 2//隨機返回2個元素,2為元素個數(shù)
Spop user 2 //隨機返回2個元素a b 并將 a b 從集合中刪除
集合交集:
Sadd user:1 name 24 boy
Sadd user:2 name 24 girl //初始化兩個集合
Sinter user:1 user:2 //求集合交集 返回24
3. 使用場景
標簽,社交,查詢,智能推薦
6. 數(shù)據(jù)類型-有序集合
1. 與集合有聯(lián)系,不能重復的成員
集合關系
2. 與list set 對比
set對比
3. 命令:
Zadd key score member [.....]
Zadd user:name 200 name //name的點贊數(shù)1,返回操作成功的條數(shù)1
Zadd user: name 200 name 120 mike 100 lee //返回3
Zadd test:1 nx 100 name //鍵test:1 必須不存在 主要用于添加
Zrange test:1 0-1 withscores //查看點贊與成員名
Zcard test:1 //計數(shù)成員個數(shù)返回1
查看點贊數(shù):
Zadd test:2 nx 100 name //新增一個集合
Zscore test:2 name //查找name的點贊數(shù)返回100
7. 全局命令
1. 查看所有鍵: keys *, set school enjoy, set hello world
2. 鍵總數(shù): dbsize
3. 檢查鍵是否存在: exists key //存在返回1,不存在返回0
4. 刪除鍵: del key
5. 鍵過期: expire key seconds // set name test expire name 10 //10秒過期
6. 鍵的數(shù)據(jù)結構類型: type key
8. 鍵的遍歷
Redis 提供了兩個命令來遍歷所有的鍵
1. 鍵全量遍歷
Mset country china city bj name name //設置3個字符串鍵值對
Keys * //返回所有的鍵 *匹配任意字符串多個字符
Keys *y //以結尾的鍵
Keys n*e //以n開頭以e結尾返回name
Keys n?m //?號代表只匹配一個字符,返回name 全局匹配
Keys n?m* //返回name
Keys [j,i]* //返回以j l 開頭的所有鍵
9. 漸進式遍歷
Mset a a b b //初始化26個字母鍵值對
字符串類型:
SCAN命令用于迭代當前數(shù)據(jù)庫中的數(shù)據(jù)庫
返回結果為: 用于下一次迭代的新的游標4096:所有被迭代的元素如果數(shù)據(jù)集合不是以哈希表做為底層實現(xiàn)的話,則sacn類命令無視count 選項,直接返回數(shù)據(jù)集合的所有元素
Scan 0 match n*//匹配以n開頭的鍵,最大是取10條第一條scan 0開始
六 redis數(shù)據(jù)庫管理
1. select 0//共16個庫 0--15 select 切換數(shù)據(jù)庫
2. Set name name
3. Select 1
4. Get name //隔離了,取不到,和mysql不同庫一樣
其中redis3.0以后的版本慢慢弱化了這個功能,如在redis cluster 中只允許0數(shù)據(jù)庫
原因:
1) redis 單線程,如果多個庫,這些庫使用同一個cpu 彼此會有影響
2) 多數(shù)據(jù)庫,調(diào)試與運維麻煩,若有一個慢查詢,會影響其他可以查詢速度
3) 來回切換,容易混亂
Flushdb: 只清空當前數(shù)據(jù)庫的鍵值對 dbsize 0
Flushall: 清空所有庫的鍵值對
總結
以上是生活随笔為你收集整理的查看redis版本_redis详细介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: modis数据介绍_【更新90篇】地理数
- 下一篇: 用ram实现寄存器堆_Verilog如何