雖然在專案中已經使用了redis,但是用得比較初級,估計也不太合規,完全無法發揮出redis的巨大威力。因此系統地學習了一下redis的基礎知識,更深入的內容在以後的專案實戰中逐步地學習和實踐把。
nosql,not only sql,泛指非關係型資料庫。隨著現在網際網路技術的發展,傳統關係型資料庫已經無法滿足我們的需求,因此出現了非關係型資料庫。而非關係型資料庫的種類也紛繁多樣,能夠應對各種各樣的使用場景。
現有的網際網路場景,有如下的這些需求:
- 高併發的讀,高併發的寫;
- 海量資料;
- 高擴充套件性,高可用性;
目前比較流行的nosql資料庫有:
- mongodb,couchdb:文件性資料庫;
- redis,memcache:鍵值對資料庫;
- neo4j:圖形資料庫;
- hbase,cassandra:列資料庫。
redis是乙個key-value的鍵值對資料庫。
c語言開發的開源的資料庫。
支援的資料型別:
- 字串;
- 雜湊;
- 列表;
- 集合;
- 有序集合。
常見的應用場景:
- 快取;
- 任務佇列;
- 分布式集群架構中的session分離;
- ……
字串string
雜湊hash
雜湊的操作命令如下:
- hset:賦值命令;hset hashkey name xx;
- hmset:批量賦值命令;hmset hashkey name xx age 18;
- hget:取值命令;hget hashkey a;
- hmget:獲取多個值;hmget hashkey name age;
- hgetall:獲取所有值;hgetall hashkey;
- hdel:刪除鍵值對;hdel hashkey name;
- del:刪除整個雜湊;del hashkey;
- hincrby:雜湊鍵值對的值增加給定值;hincrby hashkey age 2;
- hexists:判斷某個鍵是否存在;hexists hashkey age;
- hlen:獲取雜湊中鍵值對個數;hlen hashkey;
- hkeys:獲取雜湊中的鍵;hkeys hashkey;
- hvals:獲取雜湊中的值;hvals hashkey;
列表list
列表的操作命令如下:
- lpush:頭部新增;lpush listkey a b c;
- rpush:尾部新增;rpush listkey aa bb cc;
- lrange:檢視列表;lrange listkey start end; (0開始計數,-1代表尾部);
- lpop:頭部彈出,返回頭部第乙個元素;lpop listkey;
- rpop:尾部彈出,返回尾部第乙個元素;rpop listkey;
- llen:獲取列表元素個數;llen listkey;
- lpushx:當listkey存在時進行頭部新增;lpushx listkey x;
- rpushx:當listkey存在時進行尾部新增;
(刪除count個value,如果count大於0,從頭到尾遍歷;count小於0,從尾到頭遍歷;count等於0,刪除所有對應值);
- lset:設定某個索引位置處的值;lset listkey index value;
- linsert:在某個位置處插入值;
linsert listkey before a xx;
linsert listkey after a xx;
- rpoplpush:從某個list尾部彈出,然後壓入另乙個list頭部;
rpoplpush listkey1 listkey2;
場景:訊息佇列
集合set
集合的操作命令如下:
- sadd:向集合新增元素;sadd setkey a b c;
- srem:從集合中刪除元素;srem setkey a b;
- smembers:檢視集合中的元素;smembers setkey;
- sismember:判斷元素是否在集合中;sismember setkey a;
- sdiff:集合的差集運算;sdiff setkey1 setkey2;
sdiff命令與key的順序有關,以第乙個引數為基準進行差集運算;
- sinter:集合的交集運算;sinter setkey1 setkey2;
- sunion:集合的並集運算;sunion setkey1 setkey2;
- scard:檢視集合的元素個數;scard setkey;
- srandmember:隨機獲取乙個集合元素;srandmember setkey;
- sdiffstore:將差集儲存到乙個新的集合;sdiffstore newsetkey setkey1 setkey2;
- sinterstore:將交集儲存到乙個新的集合;
- sunionstore:將並集儲存到乙個新的集合;
set的使用場景:
唯一性的使用場景。
有序集合sorted-set
sorted-set中的每乙個成員都有乙個分數與之關聯,元素唯一,分數可以不唯一。
有序集合的命令如下:
- zadd:新增元素;zadd zsetkey 20 a 30 b;
若引數中的元素已經存在,則更新分數;返回值的個數中不包含更新分數的元素;
- zscore:檢視元素的分數;zscore zsetkey a;
- zcard:檢視zset中的元素個數;zcard zsetkey;
- zrem:刪除某個元素;zrem zsetkey a;
- zrange:按範圍查詢;
withscores選項可以帶出分數;
- zrevrange:反向排序檢視;
- zremrangebyrank:按照索引範圍執行刪除;
- zremrangebyscore:按分數範圍執行刪除;
- zrangebyscore:檢視分數範圍內的元素;
- zincrby:給指定元素增加分數;zincrby zsetkey 3 a;
- zcount:檢視某個分數範圍內的元素個數;zcount zsetkey 80 90;
使用場景:
譬如積分排行榜之類的。
針對keys的操作命令如下:
- keys *:檢視所有的key;
- keys my*(keys my?):萬用字元的檢視;
- del:刪除指定的key;
- exists:判斷key是否存在;
- rename:重新命名key;
- expire:設定過期時間,單位是秒;
- ttl:檢視距離過期的剩餘時間;
- type:檢視key對應的值的型別;
多資料庫:redis有多個資料庫;有16個資料庫;
- select: 選擇資料庫命令;select 2;
- move:移動指定key到某個資料庫;move xxkey 2;
事務:
- multi:開啟事務;
- exec:提交;
- discard:回滾;
rdb和aof可以單獨使用,也可以混合使用。
rdb方式的持久化
預設支援的持久化方式;
在指定時間間隔內將記憶體資料快照寫入檔案;
優點:方便備份;重新啟動效率高;
缺點:資料丟失不可避免;
aof方式的持久化
記錄日誌到檔案中;
三種方式:每修改同步;每秒同步;不同步;
優點:更高的資料安全性;日誌檔案友好;
缺點:重新啟動效率低;檔案大;
redis 學習筆記
本文寫作源於最近產品中部分功能用到了redis redis在功能上是乙個與memecache類似的軟體,但它比memecache提供了更強大的功能。redis本質上是乙個key value型別的記憶體資料庫。其value可以是string,list,set,sorted set,hash。很多地方都...
redis學習筆記
1.redis的無序集合 sadd命令產生乙個無序集合 smembers檢視集合元素 sismember用於檢視集合是否存在,匹配項包括集合名和元素個數。匹配成功返回1,匹配失敗返回0 2.有序集合 zadd 生成乙個有序集合。zrange檢視正序的集合,zrevrange檢視反序的集合 set和g...
redis學習筆記
redis啟動伺服器和客戶端的相關命令 string型別 乙個key對應乙個value set key value 比如 set name geyule setnx 如果key存在返回0,nx表示not exist setex 指定有效期 setrange 替換 setrange key n val...