(一)爲什麼要用Nosql
如果你是計算機本科學生 ,那麼一定使用過關係型數據庫mysql。在請求量小的情況下,使用mysql不會有任何問題,但是一旦同時有成千上萬個請求同時來訪問系統時,就會出現卡頓甚至系統崩潰的情況。最典型的例子就是早期的12306購票網站,一旦到了購票高峯期,12306肯定崩潰。造成這個原因的罪魁禍首就是關係型數據庫。
爲了解決這兩個問題,非關係型數據庫出現了,非關係型數據庫有兩個特點:
(二)redis介紹
Redis是用C語言開發的一個開源的高性能鍵值對(key-value)數據庫,他有如下幾個特徵:
4.多數據類型支持:字符串類型(string)、列表類型(list)、散列類型(hash)、集合類型(set)、有序集合類型(sorted_set)
Redis的應用場景也非常廣泛,如熱點新聞、購票搶票、即時信息查詢、時效性信息控制、消息隊列、分佈式鎖等等。
(三)redis數據類型操作
介紹完nosql和redis後就開始正式操作redis了,確保你此時已經下載安裝redis服務,並且已經打開服務。
3.1 string類型
set key value
get key
del key
添加修改多個數據
mset key1 value1 key2 value2 ...
mget key1 key2...
strlen key
append key value
多操作指令看上去似乎是對單操作指令的簡單相加,但其實不然。一條指令執行有三個地方需要耗時:發送指令、處理指令、返回結果。當使用多操作指令的時候,發送和返回都只執行一次,相比較多次只從單操作指令減少了大筆時間。
incr key
incrby key increment
incrbtfloat key increment
decr key
decrby key increment
setex key seconds value
psetex key milliseconds value
以上就是string類型的語法操作,對於key值的命名規範也有指定的約定,比如對於一個微博大V的粉絲數,微博數,關注數可以用下面的方法命名:
user:id:123456:fans
user:id:123456:blogs
user:id:123456:focus
3.2hash類型
hash類型主要用於在一個存儲空間內保存多個鍵值對信息。比如上面微博的三項基本數據,如果按照上面的方式就需要三條數據,這裏就可以中hash存儲。
hset key field value
hget key field
hgetall key
hdel key field
hmset key field1 value1 field2 value2...
hmget key field1 field2
hlen key
hexists key field
hkeys key
hvals key
hincrby key field increment
hincrbyfloat key field increment
hash類型的操作至此也結束了,需要注意的是,hash類型下的value只能存儲字符串,不允許存儲其他數據類型,不存在嵌套現象。每個hash可以存儲2^32-1個鍵值對。
3.3 list類型
list類型數據用於存儲多個數據,並對數據進入存儲空間的順序進行區分。list類型的數據可以保存多個數據,底層使用雙向鏈表存儲結構實現。
既然是雙向鏈表的方式實現,那麼就可以從左右兩邊添加和修改數據,下面是具體操作
lpush key value1 value2...
rpush key value1 value2...
lrange key start stop (stop=-1時表示最後一個元素)
lindex key index
llen key
lpop key
rpop key
blpop key1 key2 timeout
brpop key1 key2 timeout
這條命令的意思是當列表中沒有元素時,會等待timeout指定的時間,期間一旦有數據加入到List列表中,就會顯示出來,否則時間到了後就顯示爲空。
lrem key count value
3.4 set類型
set類型與hash存儲結構完全相同,不同點在於,set僅存儲鍵,不存儲值,並且值不允許爲空。
添加數據
sadd key member1 member2...
smembers key
srem key member1 member2...
scard key
sismember key member
srandmember key [count]
spop key
sinter key1 key2 ..
sunion key1 key2 ..
sdiff key1 key2 ..
sinterstore destination key1 key2 ..
sunionstore destination key1 key2 ..
sdiffstore destination key1 key2 ..
smove source destination member
set的操作到這裏就結束了,要注意set類型的數據不允許重複,且set雖然與hash存儲結構相同,但是無法啓用hash中的存儲空間
3.5 sorted_set類型
sorted_set在set的基礎上添加了可排序字段,使得存儲可按可排序字段來排序,這個可排序字段稱爲score。
zadd key score1 member1 score2 member2 ...
zrange key start stop [withscores]
zrevrange key start stop [withscores]
zrem key member1 member2...
zrangebyscore key min max [withscores] [limit]
zrevrangebyscore key max min [withscores]
zremrangebyrank key start stop
zremrangebyscore key min max
zcard key
zcount key min max
zinterstore destination numkeys key1 key2...(求交集,默認求出score的和,可以修改爲最大值最小值等等)
zunionstore destination numkeys key1 key2...