1. 程式人生 > 資料庫 >redis的介紹與簡單使用

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.快取雪崩:

某一個時間段,快取集中過期失效。

其實,以上三種問題歸根到底,都是屬於快取沒有發揮出應有的作用,導致資料庫的壓力變大,可能造成資料庫崩潰或宕機。

針對以上幾種問題的解決辦法網上有很多,感興趣的夥伴不防嘗試一下。