redis smembersmap_Redis数据类型及常用API
1、redis特性
速度快:redis是內(nèi)存型
持久化:redis可以持久化
數(shù)據(jù)結(jié)構(gòu):redis支持多種數(shù)據(jù)結(jié)構(gòu),string hash list set zset
多語言客戶端:redis支持多種客戶端語言
功能豐富:發(fā)布訂閱、事務、pipeline、bitmap、geo
簡單:上手簡單,開源
復制:自帶RDB和AOF主從復制
高可用分布式:自帶的分布式
redis是單線程:純內(nèi)存,非阻塞IO,避免線程切換和靜態(tài)消耗
redis使用場景:緩存系統(tǒng),計數(shù)器,消息隊列,排行榜,社交網(wǎng)絡,實時系統(tǒng)
2、redis的啟動方式
默認啟動 redis-server
參數(shù)啟動 redis-server -h 127.0.0.1 -p 6379
配置啟動(推薦)
3、redis通用命令
通用命令:
keys * 遍歷所有的key (o(n))該命令一般不在生產(chǎn)環(huán)境使用 scan 或者熱備節(jié)點可以遍歷
dbsize 計算key的總數(shù) (o(1))
exists key 檢查key是否存在 存在返回1 不存在返回 0
del key 刪除指定的key
expire key seconds 設置key在seconds秒后過期
ttl key 查看key剩余的過期時間 -2 代表已經(jīng)不存在 -1 代表key存在,并且沒有過期時間
persist key 去掉key的過期時間
type key 返回key的類型 返回值包括:string hash list set zset none(不存在)
*
string字符串:
使用場景:緩存 計數(shù)器 分布式鎖
get 獲取key對應的value
set 設置key-value 不管key是否存在,都設置
del 刪除key-value
incr key自增1,如果key不存在,自增后get(key)=1
decr key自減1,如果key不存在,自減后get(key)=-1
incrby key自增k,如果不存在,自增后get(key)=k
decrby key自減k,如果不存在,自減后get(key)=-k
實際使用:記錄網(wǎng)站每個用戶個人主頁的訪問量
incr userid:pageview(單線程,無競爭)
setnx key不存在,才設置
set key value xx key存在才設置
mget 批量獲取key原子操作 一次獲取的key值有限
mset 批量設置key
n次get = n次網(wǎng)絡時間+n次命令時間
1次mget = 1次網(wǎng)絡時間+n次命令時間
getset key newvalue set key newvalue并返回舊的value
append key value 將value追加到舊的value
strlen key 返回字符串得長度
incrbyfloat key 增加key對應的值
getrange key start end 獲取字符串指定下標的所有值
setrange key index value 設置指定下標所有對應的值
hash類型
使用場景:存儲個人信息,記錄網(wǎng)站每個用戶的個人主頁訪問量
hget key field 獲取hash對應的field的value
hset key field value 設置hash key 對應的field的value
hdel key field 刪除hash key 對應field的value
hexists key field 判斷key是否有field
hlen key 獲取hash key field的數(shù)量
hmget key field1 field2 批量獲取hash key的一批field對應的值
hmset key field1 value1 field2 value2 批量設置hash key的一批field value
hgetall key 獲取hash對應的key的所有field的value
hvals key 返回hash key對應所有field的value
hkeys key 返回hash key對應所有field
hsetnx key field value設置hash key對應field的value(如field已存在,則失敗)
hincrby key field intCounter hash key對應field的value自增intCounter
hincrbyfloat key field floatCounter hincrby的浮點數(shù)版
list隊列類型
使用場景 timeLine
rpush key value1 value2 從列表右端插入值
lpush key value1 value2 從列表左端插入值
linsert key before|after value newValue 在list指定的值前|后插入newValue
lpop key 從列表左側(cè)彈出一個item
rpop key 從列表右側(cè)彈出一個item
lrem key count value 根據(jù)count的值,從列表中刪除所有value相等的項
count > 0 從左到右,刪除最多count個value相等的項
count < 0 從右到左,刪除最多Math.abs(count)個value相等的項
count = 0 刪除所有value相等的項
ltrim key start end 按照索引范圍修剪列表
lrange key start end (包含end) 獲取列表指定索引范圍的索引item
lindex key index 獲取列表指定索引的item
llen key 獲取列表的長度
lset key index newValue 設置列表指定索引值為newValue
blpop key timeout lpop阻塞版本,timeout是阻塞超時時間,timeout=0為永遠不阻塞
brpop key timeout rpop阻塞版本,timeout是阻塞超時時間,timeout=0為永遠不阻塞
*
set集合類型
使用場景:抽獎系統(tǒng),like 贊 踩,標簽
sadd key element 向集合key添加element(如果element已經(jīng)存在,添加失敗)
srem key element 將集合key中的element移除掉
scard key 計算集合大小
sismember key element 判斷element是否在集合內(nèi)
srandmember key 從集合中隨機抽取count個元素 (不改變原集合)
smembers key 獲取集合所有元素
spop key 從集合中彈出element (改變原集合)
sdiff key 差集
sinter key 交集
sunion key 并集
*
zset有序集合
使用場景:排行榜
zadd key score element(可以是多對)添加score和element
zrem key element(可以是多對) 刪除元素
zscore key element 返回元素的分數(shù)
zrank key element 返回元素的排名
zincrby key increScore element 增加或減少元素的分數(shù)
zcard key 返回元素的總個數(shù)
zrange key start end 返回指定索引范圍內(nèi)的升序元素
zrangebyscore key minScore maxScore 返回指定分數(shù)范圍內(nèi)的升序元素
zcount key minScore maxScore 返回有序集合內(nèi)在指定分數(shù)范圍內(nèi)的個數(shù)
zremrangebyrank key start end 刪除指定排名內(nèi)的升序元素
zremrangebyscore key minScore maxScore 刪除指定分數(shù)內(nèi)的升序元素
zrevrank 返回元素的排名 降序
zrevrange 返回指定分數(shù)范圍內(nèi)的降序元素
zrevrangebyscore 返回有序集中指定分數(shù)區(qū)間內(nèi)的所有成員
zinterscore 計算一個或多個有序集的交集
zunionscore 計算一個或多個有序集的并集
4、redis的特性
慢查詢
生命周期:①發(fā)送命令②排隊③執(zhí)行命令④返回結(jié)果
慢查詢發(fā)生在第3階段,客戶端超時不一定慢查詢,但慢查詢是客戶端超時的一個可能
slowlog-max-len 先進先出隊列 固定長度 保存在內(nèi)存中
slowlog-log-slower-than 慢查詢閾值 slowlog-log-slower-than=0 記錄所有命令 slowlog-log-slower-than < 0 不記錄所有命令
修改配置文件
config get slowlog-max-len=128
config get slowlog-log-slower-than=10000
修改配置文件重啟
動態(tài)配置
config set slowlog-max-len 1000
config set slowlog-log-slower-than 1000
慢查詢命令:
slowlog get[n]:獲取慢查詢隊列長度
slowlog len:獲取慢查詢隊列長度
slowlog reset:清空慢查詢隊列
注意:
slowlog-max-len 不要設置過大,默認10ms,通常設置1ms
slowlog-log-slower-than不要設置過小,通常設置1000左右
理解命令生命周期
定期持久化慢查詢
pipeline
網(wǎng)絡命令通信模型:
傳輸命令=》返回結(jié)果
一次時間 = 一次網(wǎng)絡時間 + 一次命令時間
批量網(wǎng)絡命令通信模型:
n次時間 = n次網(wǎng)絡時間 + n次命令時間
流水線:
1次pipeline(n條命令) = 1次網(wǎng)絡時間 + n次命令時間
注意:
*redis的命名時微秒級別
pipeline每次條數(shù)要控制住*
使用建議
注意每次pipeline攜帶的數(shù)據(jù)量
pipeline每次只能作用在一個Redis節(jié)點上
M操作與pipeline的區(qū)別
發(fā)布訂閱
發(fā)布者:publisher channel message 返回訂閱者的個數(shù)
訂閱者:subscriber channel 一個或多個
取消訂閱:unscribe channel 一個或多個
訂閱模式:psubscribe [pattern] punsubscribe channel
頻道:channel
bitmap位圖
使用場景:獨立用戶統(tǒng)計
setbit key offset value 給位圖指定索引設置值
getbit key offset 獲取位圖指定索引的值
bitcount key [start end] 獲取位圖指定范圍(從start到end,單位為字節(jié),如果不指定就是獲取全部)位值為1的個數(shù)
bitop op destkey key [key ...] 做多個Bitmap的and(交集)、or(并集)、not(非)、xor(異或)操作并將結(jié)果保存在destkey中
bitos key targetBit [start] [end] 計算位圖指定范圍(start到end,單位為字節(jié),如果不指定就是獲取全部)第一個偏移量對應的值等于targetBit的位置
注意
1、type=string,最大512MB
2、注意setbit時的位移量,可能有較大的耗時
3、bitmap不是絕對的好
HyperLogLog
基于HtperLogLog算法:極小的空間完成獨立數(shù)據(jù)量統(tǒng)計,本質(zhì)還是字符串
pfadd key element 向hyperloglog添加元素
pfcount key 計算hyperloglog的獨立總數(shù)
pfmerge destkey sourcekey 合并多個hyperloglog數(shù)據(jù)
注意
1、是否能容忍錯誤(錯誤率0.81%)
2、是否需要單條數(shù)據(jù)
GEO地理信息
存儲經(jīng)緯度,計算兩地距離,范圍計算等
geoadd key longtitude latitude member增加地理位置信息
geopos key member [member] 獲取地理位置信息
geodist key member1 member2 獲取兩個地理位置的距離
注意
1、since 3.2+
2、type geokey = zset
3、沒有刪除API:zrem key member
總結(jié)
以上是生活随笔為你收集整理的redis smembersmap_Redis数据类型及常用API的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: redis发布订阅c接口_Redis 发
- 下一篇: false shell 判断_Shell