redis存10万条数据_redis详细介绍
一 介紹
1. redis介紹(redis安裝在磁盤,redsi數據存儲在內存)
服務器交互
2. Redis是一種基于鍵值對(key-value)數據庫,其中value可以為string. hash. List. Set. Zset 等多種數據結構,可以滿足很多應用場景。還提供了鍵過期,發布訂閱,事務,流水線,等附加功能。
3. 流水線:redis的流水線功能允許客戶端一次將多個命令請求發送服務器,并將被執行的多個命令請求的結果在一個命令回復中全部返回客戶端,使用這個功能可以有效地減少客戶端在執行多個命令時需要與服務器進行通信的次數。
二 特性:
1. 速度快,數據放在內存中,官方給出的讀寫性能10萬/s,與機器性能也有關系:
A) 數據放內存中是速度快的主要原因
B) C語音實現,與操作系統距離近
C) 使用了單線程,預防多線程可能產生的競爭問題
2. 鍵值對的數據結構服務器
3. 豐富的功能
4. 簡單穩定,單線程
5. 持久化,發生斷電或機器故障,數據可能會丟失,持久化到硬盤
6. 主從復制,實現多個相同數據的redis副本
7. 高可用和分布式,哨兵機制實現高可用,保證redis節點故障發現和自動轉移
三 使用場景:
1. 緩存: 合理使用緩存加快數據訪問速度,降低后端數據源壓力
2. 排行榜: 按照熱度排名,按照發布時間排名,主要用到列表和有序集合
3. 計數器應用:視頻網站播放次數,網站瀏覽次數,使用redis計數
4. 社交網站:贊,踩,粉絲,下拉,刷新
5. 消息隊列: 發布和訂閱
四 正確安裝和使用
1. Linux上安裝,windows安裝
2. 配置,啟動,操作,關閉
可執行文件
作用
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,靈活,生產環境使用
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關閉,此方法不會做持久化,還會造成緩沖區非法關閉,可能會造成AOF和數據丟失
4) 重大版本:
1. 版本號第二位為奇數,為非穩定版本
2. 第二位為偶數,為穩定版本
3. 當前奇數版本是下一個穩定版本的開發版本(如2.9版本是3.0版本的開發版本)
五 redis的API應用:
1. redsi 基本通訊模型
例子: 三個客戶端同時執行命令
客戶端1: set name test
客戶端2: incr num
客戶端3: incr num
指令
執行過程: 發送指令->執行指令->返回結果
執行命令: 單線程執行,所有命令進入隊列,按照順序執行,使用I/O多路復用解決問題
單線程快的原因: 純內存訪問,非阻塞I/O,單線程避免線程切換和競爭產生資源消耗
2. 數據結構(string)
1. 字符串類型: 實際上可以是字符串(包含xml json),還有數字,二進制,最大不能超過512MB
2. 設值命令: set age 23 ex 10 //10秒后過期
3. 獲取命令: get age //存在返回value 不存在返回nil
4. 批量設值: mset country
5. 批量獲取mget country
6. 若沒有mget命令,則要執行N次get 命令
交互
7. 使用mget=1次網絡請求加redis內部N次查詢
N次查詢
8. 計數: incr age //必須為整數增加1,非整數返回錯誤,無age鍵從0自增返回1
decr age //整數age減1
Incrby age 2//整數age +2
Decrby age 2 //整數 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個字節
11. 截取字符串: set name helloworld:getranget name 24// 返回llo
3 數據結構 --哈希 hash
1. 是一個string 類型的 filed 和 value 的映射表,hash特適合用于存儲對象
hash
以上圖片命令分別為:
Set user:1:name name
Set user:1:age 19
可以發現,用字符串類型可以存儲,但會過多占用key,浪費內存。
可以使用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
計算個數: 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 模擬做關系復雜查詢開發困難,維護成本高
4. 三種方案實現用戶信息存儲優缺點:
1) 原生: set user:1 name name
Set user:1 age 19
優點: 簡單直觀,每個鍵對應一個值
缺點: 鍵數過多,占用內存多,用戶信息過于分散,不用于生成環境
2) 將對象序列化存入reds
Set user:1 serialize(user)
優點: 編程簡單,使用合理可減少內存空間消耗
缺點: 要控制ziplist與hashtable 兩種編碼轉換,且hashtable會消耗更多內存
總結: 對于更新不多的情況下,可以使用序列化,對于value值大于64字節可以使用hash類型
4數據結構-列表(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. 數據結構-集合
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,計算元素個數
Sismember user a //判斷元素是否在集合存在,存在返回1,不存在0
Sranmember user 2//隨機返回2個元素,2為元素個數
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. 數據類型-有序集合
1. 與集合有聯系,不能重復的成員
集合關系
2. 與list set 對比
set對比
3. 命令:
Zadd key score member [.....]
Zadd user:name 200 name //name的點贊數1,返回操作成功的條數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 //計數成員個數返回1
查看點贊數:
Zadd test:2 nx 100 name //新增一個集合
Zscore test:2 name //查找name的點贊數返回100
7. 全局命令
1. 查看所有鍵: keys *, set school enjoy, set hello world
2. 鍵總數: dbsize
3. 檢查鍵是否存在: exists key //存在返回1,不存在返回0
4. 刪除鍵: del key
5. 鍵過期: expire key seconds // set name test expire name 10 //10秒過期
6. 鍵的數據結構類型: 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命令用于迭代當前數據庫中的數據庫
返回結果為: 用于下一次迭代的新的游標4096:所有被迭代的元素如果數據集合不是以哈希表做為底層實現的話,則sacn類命令無視count 選項,直接返回數據集合的所有元素
Scan 0 match n*//匹配以n開頭的鍵,最大是取10條第一條scan 0開始
六 redis數據庫管理
1. select 0//共16個庫 0--15 select 切換數據庫
2. Set name name
3. Select 1
4. Get name //隔離了,取不到,和mysql不同庫一樣
其中redis3.0以后的版本慢慢弱化了這個功能,如在redis cluster 中只允許0數據庫
原因:
1) redis 單線程,如果多個庫,這些庫使用同一個cpu 彼此會有影響
2) 多數據庫,調試與運維麻煩,若有一個慢查詢,會影響其他可以查詢速度
3) 來回切換,容易混亂
Flushdb: 只清空當前數據庫的鍵值對 dbsize 0
Flushall: 清空所有庫的鍵值對
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的redis存10万条数据_redis详细介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 上传文件 微信小程序input_快速上手
- 下一篇: div滚动到指定位置 vue_【Vue