Redis是一個開源的,高性能,C語言開發的 ,鍵值對(key-value)存儲數據的NOSQL數據庫。java
NOSQL :Not Only Sql 泛指非關係型數據庫 Redis/ MongoDB/ Hbasemysql
關係型數據庫: mysql/ oracle/ sybase /sqlServerc++
1;在互聯網時代來臨以前 ,企業的一些內部信息管理系統,一個單個的數據庫的實例就能夠應付系統的功能需求redis
單數據庫實例sql
2:隨着系統訪問用戶的增多 ,數據量的增大,單個數據庫的實例已經知足不了系統頻繁讀取數據(權限的驗證,系統的默認配置)的需求 。數據庫
緩存 (ehCache/MemCached)+ 數據庫實例vim
3: 緩存雖然能夠緩解數據庫的讀取壓力 ,可是數據量的寫入壓力持續增大 ,這個時候咱們須要採起數據庫主從機制進行讀寫分離後端
緩存 (ehCache/MemCached)+ 主從數據庫 + 讀寫分離緩存
4: 數據量再次增大,讀寫分離之後,主數據庫的寫庫的壓力出現瓶頸服務器
緩存 (ehCache/MemCached)+ 主從數據庫 + 讀寫分離 +分庫分表
5:互聯網和大數據的時代的來林,關係型數據庫已經不能很好的存儲一些併發性大,實時性高,並且格式不固定的數據
Nosql數據庫+主從數據庫 + 讀寫分離 +分庫分表
Redis的主要做用 : 快
以電商網站爲例,Redis在系統架構中的位置
直播平臺 好友列表
新品秒殺/12306搶票 --記錄物品的庫存記錄
電商網站的商品排行 ---利用有序列表存儲商品的銷售狀況
網站商品的點贊數/評論數/網站訪問記錄 --高併發 可是記錄不精確
數據過時處理 -redis對數據能夠設置生命週期(單點登錄)
分佈式集羣架構中的session分離
官網地址 : https://redis.io/
安裝redis
Linux系統下安裝redis
安裝過程:
(1)安裝編譯器:yum install gcc-c++
(2)下載Redis源碼並上傳到服務器
(3)解壓Redis壓縮包:tar -zxvf *redis*
(4)進入Redis目錄進行編譯:make
(5)安裝Redis:make PREFIX=/user/local/redis install
(6)將redis.conf拷貝到Redis安裝目錄:cp redis.conf /user/local/redis
(7)進入安裝目錄,更改redis.conf文件:vim redis.conf --> daemonize no 改成 yes
(8)啓動redis後端模式:./bin/redis-server ./redis.conf
String/Hash/List/Set/sorted set
字符串類型 String
列表類型 list
集合類型 set
有序集合類型 sorted set
散列類型 hash
讀取速度每秒10000/S
寫入速度8100/S
Key不要過長(佔用內存 最大可容納數據長度爲512M) 不要太短(下降可閱讀性)
* String
K-V格式中 V是一個字符串對象
Set k1 v1
Get k1
Del k1
Incr num (自增1 若是沒有設置值默認爲1)
Decr num (自減1)
Incrby num 5 (自增5)
Decrby num 5 (自減 5)
Append num 4 (追加4)返回字符串長度位數 *不是數學+ 是拼接
應用場景: 秒殺商品/商品點贊
Set mobile_huawei 1000
Decr mobile_huawei
* Hash
K-V格式中 V是一個Hash類型 其實java裏面的Map<String,object>
Hset student _bluesky id 1
Hset student _bluesky name bluesky
Hset student _bluesky sex boy
賦值命令
Hset myhash username summer
Hset myhash age 18
Hmset myhash username admin age 20
取值命令
Hget myhash username
Hget myhash username age
Hgetall myhash
刪除命令
Hdel myhash username age
Del myhash (刪除myhash)
Hincrby myhash age 5 (增長5)
其餘命名
Hexists myhash username 判斷myhash中是否包含username包含返回1不然返回0
Hlen myhash 獲取myhash中的字段數
Hkeys myhash 獲取全部的 key
Hvals myhash 獲取全部的值
應用場景: 電商網站的商品詳細信息
Hmset iphone:0001 id 1 name 6s price 3999 imageurl /pic/iphone.png
Hget iphone:0001 name
Hgetall iphone:0001
* list
K-V格式中 V是一個list類型 其實java裏面的LinkedList
把他當作一個竹子,兩邊是打通了
從左插入記錄 lpush summer_book 1 2 3
從右插入記錄 rpush summer_book 4 5 6
從左彈出記錄 lpop summer_book 1
從右彈出記錄 lpush summer_book 1
列表裏面的記錄順序(竹子)
3 2 1 4 5 6
應用場景: 商品的評論
Lpush t_shirt:comment good1/Lpush t_shirt:comment good2/Lpush t_shirt:comment good3
Lrange t_shirt:comment 0 10
Lpush mylist 1 2 3 從左插入記錄
Rpush mylist a b c 從右插入記錄
Lrange mylist 開始索引位置 結束索引位置(-1最後一個)
Lpop mylist 左側彈出(至關於刪除)
Rpop mylist 右側彈出(至關於刪除)
Lpush mylist 左側插入
Rpush mylist 右側插入
Lrem mylist 刪除幾個元素 刪除哪一個元素
Lset mylist 索引位置 插入的值
Linsert mylist before 哪一個值前面 要插入的值
Linsert mylist after 哪一個值後面 要插入的值
Rpoplpush 集合1 集合2
* Set
K-V格式中 V是一個set類型 set是無序的/set裏面的元素具備惟一性、
Sadd summer_friends blue_sky bigVoice mosheng mike
Sadd maybe_friends blue_sky bigvoice tdd world okyoung
應用場景: 獨立IP進行網站投票 /微信朋友圈的共同好友
Sadd myset a b c 添加 a b c
不能添加劇復的值
Srem myset a c 移除a c
Smembers myset 查看全部值
Sismember myset a 查看集合裏面是否包含a包含返回1 不然返回0
Sadd myset2 a b c 差集運算
Sadd myset3 a c 1 交集運算
Sdiff myset2 myset3 myset2 和myset3相差的是b
Sinter myset2 myset3 myset2 和myset3相交的是a c
Sunion myset2 myset3 並集運算 合併集合 相同的會去掉(值不能重複)
Scard myset 獲取集合數量
Srandmember myset 隨機獲取集合中的一個值
Sdiffstore myset4 myset2 myset3 將myset2 和myset3中相差的值放到myset4裏面
Sinterstore myset4 myset2 myset3 將myset2 和myset3中相交的值放到myset4裏面
Sunionstore myset4 myset2 myset3 將myset2 和myset3中相併的值放到myset4裏面
* sorted-set
遊戲排名 熱點話題中應用
K-V格式中 V是一個Zset類型 zset是有序的? 怎麼作到有序
應用場景: 商品的銷售排行榜
zadd phone_sales 100 huawei 99 iphone 98 vivo 97 oppo
Zrange phone_sales 0 -1 with score 從小到大
Zrevrange phone_sales 0 -1 with score 從大到小
若有侵權,請聯繫:13212115095