1. 程式人生 > >redis學習筆記(1)

redis學習筆記(1)

多個 edi exp abcd 沒有 cores nosql數據庫 mem 總結

最近在學習redis,做了比較詳細的學習筆記,分享給大家,歡迎一起討論和學習

第一部分,簡單介紹redis 和 redis的基本操作

NoSQL的特點 :
數據庫種類繁多,但是一個共同的特點都是去掉關系數據庫的關系型特性.
數據之間無關系,這樣就非常容易擴展,也無形之間,在架構的層面上帶來了可擴展的能力.
NoSQL無需事先為要存儲的數據建立字段,隨時可以存儲自定義的數據格式,
而在關系型數據庫裏,曾刪字段是一件很麻煩的事情,數據量大就容易卡死.

redis 是什麽,能幹什麽
redis 是一個基於內存的以key-value存儲的並且支持持久化nosql數據庫,
可以用來做緩存,消息隊列,等

一, redis 基本操作命令
get key --得到key
set key string --設置key
keys * --查看所有的key
EXISTS key --判斷這個key是否存在
move key db --移動key到某個庫,當前庫就沒有了
expire key --給key設置過期時間,單位秒,過期後key就清除
ttl key --查看key還有多少秒過期,-1表示永不過期,-2表示已過期,其他的數字是單位秒.
type key --查看key是什麽數據類型.
DEL key --刪除某個key


redis數據類型
1,String --單key 單value
set/get/del/append/strlen


incr 自加1,
decr 自減1
incrby 加上多少
decrby 減去多少
--必須是數字才能進行加減

getrange --獲取指定區間內的值,類似於截取字符串,getrange key 0 3;獲取key第0到第3個中間的字符串.
setrange --設置指定區間範圍內的值,setrange key 位置 具體值. 原來位置的值將被替換.
--加入test="abcdef", setrange test 0 xxx,把test從第0位開始,設置成xxx4. 結果是"xxxdef"

setex(set with expire)鍵秒值,set k1 10 abc,設置一個鍵是k1,值是abc, 存活10秒,


setnx(set if not exist),setnx k1 abc , 如果k1存在,就不會設置.

mset(more set) --同時設置多個key, mset k1 a k2 b k3 c
mget --同時get多個key, mget k1 k2 k3
msetnx --同時設置多個值,只要其中有一個key重復的,就不成功, 所有key不存在的才成功.
getset(先get再set) --

2,List --單key多value
lpush --lpush list0 1 2 3 4 5 6 7,從左邊開始依次寫入數據,(先進後出)
rpush --rpush list1 1 2 3 4 5 6 7,從右邊開始依次寫入數據,(先進先出)
lrange --lrange list0 0 -1,從左邊,依次取出數據.

lpop --從左邊,取出第一個值,清除
rpop --從右邊,取出第一個值,清除

lindex --根據索引下標獲得元素,(從上到下),索引從0開始.
llen --獲取list的長度

lrem key --刪除N個value, lrem list0 2 a, 在list裏面刪除2個a.
ltrim key --截取指定範圍的值後再復制給key.index開始,index結束

rpoplpush 源 目標 --rpoplpush list0 list1,list0右邊出站一個,從左邊追加上list1上;

lset key index value --給某個下標設置具體的值;
insert key before 值 after --把befrore 和after 插入到已經存在的值前後.

List總結:
它是一個字符串鏈表,left,right都可以插入添加,
如果鍵不存在,創建新的鏈表; 鍵存在,新增內容; 如果值全部移除,對應的鍵也消失;
鏈表的操作無論是頭和尾效率都高,但對中間元素操作,效率就低;


3,Set --單key多value
sadd --添加set元素;sadd set01 1 1 2 2 3 3,重復的會不添加;
smembers --取出set元素;SMEMBERS set01
sismember --sismember key 元素,判斷是否存在元素

scard --scard key;獲取集合裏面的元素的個數.
srem key value --刪除集合中某個元素;srem set01 1

srandmember key 某個整數(例如:3) --在key裏面,隨機出3個value;
spop key --隨機出棧,一次出一個;

smove key1 key2 key1某個值 --把key1裏面某個值移到key2,值的遷移;

數學集合類:
差集:sdiff key1 key2 --在第一個set裏面,不在第二個set裏面
交集:sinter --都在兩個set裏面
並集:sunion --在key1,或在key2裏面, 有去重功能


4,Hash --kv模式不變,但v是一個鍵值對;
hset --hset user id 11(key 是user,value 是 id:11),
hget --hget user id:
hmset --同時設置多個k v,hmset cust id 11 name xiepng sex man
hmget --同時獲取多個key的值, hmget cust id name sex
hgetall --獲取這個key裏面的所有的 k v, hgetall cust
hdel --刪除這個key裏面的額某個 k v ;

hlen --計算設個key的長度,裏面有幾個 k v ;

hexists key --在key裏面是否存在某個值,hexists cust id

hkeys key --獲取這個key下面所有的keys,, hkeys cust;
hvals key --獲取這個key下面所有的values,, hvals cust;

hincrby --某個指定的key加上某個整數(加小數會報錯)
hincrbyfloat--某個指定的key加上某個小數 (加正數也不會報錯)

hsetnx --如果不存在就set某個可以;重復了不添加(只能加單個key)


5,ZSet --(有序集合,sorted set)
在set基礎上,加一個score.
之前set是 k1 v1 k2 v2
現在是 k1 score v1 k2 score v2

zadd --zadd zset1 60 v1 70 v2 80 v3 90 v4 100 v5
zrange --zrange zset1 0 -1
ZRANGE zset01 0 -1 withscores ,

zrangebyscore key 開始score 結束score ,withscores(,不包含 limit開始下標,多少個;
-- ZRANGEBYSCORE zset1 (60 (90 limit 0 1
返回zset1裏面score是60到90之間的(不包含60和90),範圍是從第0個開始,截取1個

zrem key 某個score下對應的value值;作用是刪除元素;-- ZREM zset1 v5

zcard --ZCARD zset1 ;計算這個key裏面有多少個 kv對
zcount key score區間; --ZCOUNT zset1 60 90,計算這個key裏面的score在這個範圍內的有多少個;
zrank key values值,作用是獲取下標值,這個value是第幾個下標;--ZRANK zset1 v4
zscore key 對應值,獲取分數;--ZSCORE zset1 v2

zrevrank key values值,作用是逆序獲得下標值; -- ZREVRANK zset1 v4
zrevrange 逆轉取出指定範圍內的值 ; --ZREVRANGE zset1 0 -1
zrevrangebyscore key score2 score1 ;逆轉取出score範圍內的值 --ZREVRANGEBYSCORE zset1 90 60

要刪除zset 整個集合, 直接del key 即可;

redis學習筆記(1)