Redis內存數據庫-基礎知識

Redis是什麼

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的主要做用 :

以電商網站爲例,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

相關文章
相關標籤/搜索