redis的介紹與簡單使用
目錄
一、簡介
redis是一種完全開源的非關係型key_value資料庫,很多公司也叫其為快取資料庫,為什麼這麼稱號呢?就是因為很多公司都是通過高可用redis叢集去實現專案上快取資料的目的。
為什麼 用redis作為快取呢?有的公司用memcached。首先就是因為redis的讀寫速度非常快,其次redis有多種資料結構供選擇,不僅如此,Redis還有原生的叢集模式;
對於資料量大,很少修改且經常查詢的資料,就可以放到快取中,比如我們系統中最常用的使用者角色許可權就經常放到快取中。
除了作為快取使用,在分散式系統中,redis還經常被用作分散式鎖來控制分散式程式的執行。
作為快取資料庫,redis有以下幾個特點:
1.redis支援持久化,可以將記憶體中資料放到磁碟中,即使redis重啟,資料存在,可以載入繼續使用。
2.redis支援的資料型別有5種,除了基本的key_value型別的資料,還有list,set,zset,hash等4種資料結構形式,
3.redis還可以設定資料過期時間,到期後資料自動清除。
4.redis也支援主從備份,使用master_slave模式可以實現主從備份。
5.Redis的效能極高-理論上的讀速度是110000次/s,寫速度是81000次/s
6.災難恢復,redis資料丟失了可以用過aof進行恢復
二、redis的5種基本資料型別介紹
我們先再redis種新增一些資料,然後用桌面管理工具RedisDesktopManager來看下資料的樣式
1.字串String型別:
特點:由位元組組成的序列,是最基本的一種型別。
redis 127.0.0.1:6379> SET string_demo "hello world"
OK
redis 127.0.0.1:6379> GET string_demo
"hello world"
2.列表list:
特點:由多個字串值組成的有序可重複的序列,連結串列結構。
redis 127.0.0.1:6379> lpush listdemo redis (integer) 1 redis 127.0.0.1:6379> lpush listdemo mongodb (integer) 2 redis 127.0.0.1:6379> lpush listdemo rabbitmq (integer) 3 redis 127.0.0.1:6379> lrange listdemo 0 10 1) "rabbitmq" 2) "mongodb" 3) "redis"
3.雜湊hash:
特點:類似Map<String,String>的容器,可以將多個的key_value形似的鍵值對資料儲存到一個指定的key。每個hash可以儲存4294967295個鍵值對。
redis 127.0.0.1:6379> HMSET hashdemo book1 "abc" book2 "def"
"OK"
redis 127.0.0.1:6379> HGET hashdemo book1
"abc"
redis 127.0.0.1:6379> HGET hashdemo book2
"def"
4.集合set:
特點:無序且不可重複
redis 127.0.0.1:6379> sadd runoob redis
(integer) 1
redis 127.0.0.1:6379> sadd runoob php
(integer) 1
redis 127.0.0.1:6379> sadd runoob java
(integer) 1
redis 127.0.0.1:6379> smembers runoob
1) "php"
2) "redis"
3) "java"
5.有序集合zset:
特點:和set類似,不允許重複,特點是每個成員都會有一個分數與之關聯
redis 127.0.0.1:6379> zadd zsetdemo 70 go
(integer) 1
redis 127.0.0.1:6379> zadd zsetdemo 80 redis
(integer) 1
redis 127.0.0.1:6379> zadd zsetdemo 90 java
(integer) 1
redis 127.0.0.1:6379> zadd zsetdemo 100 mysql
(integer) 0
到此,redis的5種基本資料結構就介紹完了,但是,在實際專案中使用redis並不是那麼簡單,需要根據具體的業務型別來決定選擇什麼樣的資料結構來進行快取。
三、redis作為快取會遇到的問題
1.快取穿透:
簡單的說就是每次查詢redis快取都沒查到,導致去mysql等資料庫查詢,給資料庫增加了壓力。
2.快取擊穿:
短時間超高併發訪問某個快取的值,但是剛好快取到了失效的時間了,導致大量的請求訪問到資料庫上。
3.快取雪崩:
某一個時間段,快取集中過期失效。
其實,以上三種問題歸根到底,都是屬於快取沒有發揮出應有的作用,導致資料庫的壓力變大,可能造成資料庫崩潰或宕機。
針對以上幾種問題的解決辦法網上有很多,感興趣的夥伴不防嘗試一下。