Redis內存數據庫-基礎知識


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM