Redis是什麼 Redis是一個開源的,高性能,C語言開發的 ,鍵值對(key-value)存儲數據的NOSQL資料庫。 基本概念 NOSQL :Not Only Sql 泛指非關係型資料庫 Redis/ MongoDB/ Hbase 關係型資料庫: mysql/ oracle/ sybase / ...
Redis是什麼
Redis是一個開源的,高性能,C語言開發的 ,鍵值對(key-value)存儲數據的NOSQL資料庫。
基本概念
NOSQL :Not Only Sql 泛指非關係型資料庫 Redis/ MongoDB/ Hbase
關係型資料庫: mysql/ oracle/ sybase /sqlServer
資料庫應用的發展歷史
1;在互聯網時代來臨之前 ,企業的一些內部信息管理系統,一個單個的資料庫的實例就可以應付系統的功能需求
單資料庫實例
2:隨著系統訪問用戶的增多 ,數據量的增大,單個資料庫的實例已經滿足不了系統頻繁讀取數據(許可權的驗證,系統的預設配置)的需求 。
緩存 (ehCache/MemCached)+ 資料庫實例
3: 緩存雖然可以緩解資料庫的讀取壓力 ,但是數據量的寫入壓力持續增大 ,這個時候我們需要採取資料庫主從機制進行讀寫分離
緩存 (ehCache/MemCached)+ 主從資料庫 + 讀寫分離
4: 數據量再次增大,讀寫分離以後,主資料庫的寫庫的壓力出現瓶頸
緩存 (ehCache/MemCached)+ 主從資料庫 + 讀寫分離 +分庫分表
5:互聯網和大數據的時代的來林,關係型資料庫已經不能很好的存儲一些併發性大,實時性高,而且格式不固定的數據
Nosql資料庫+主從資料庫 + 讀寫分離 +分庫分表
Redis有什麼用
Redis的主要作用 : 快
以電商網站為例,Redis在系統架構中的位置
Redis的應用場景
直播平臺 好友列表
新品秒殺/12306搶票 --記錄物品的庫存記錄
電商網站的商品排行 ---利用有序列表存儲商品的銷售情況
網站商品的點贊數/評論數/網站訪問記錄 --高併發 但是記錄不精確
數據過期處理 -redis對數據可以設置生命周期(單點登陸)
分散式集群架構中的session分離
Redis怎麼用
官網地址 : 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
Redis的五大數據類型以及應用
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 從大到小
JAVA操作redis ----- jedis
Redis的高級知識: Redis的持久化 Redis的主從 Redis集群
如有侵權,請聯繫:13212115095