你不知道的Redis一-Redis入門

目錄

一、Redis入門

1.1 redis簡介

1.2 Redis特性

1.3 redis性能高性能原因

1.3 redis使用場景

1.4 redis基本操作

二、Redis數據結構介紹

2.1 字符串

2.2 哈希(Hash)

2.2.1 hash存儲對象

2.2.2 hash常用命令

2.2.3 hash對象存放優點

2.2.4 內部編碼

2.3 列表

2.3.1 list簡介

2.3.2 list常用命令

2.4 集合

2.4.1 集合應用場景

2.4.2 set命令:

2.4.3 使用示例

2.5 有序集合(ZSET)

2.5.1 常用場景

三、redis常用命令

3.1 常用命令

3.2  redis數據庫管理


一、Redis入門

1.1 redis簡介

Redis是一個開源的使用ANSI C語言編寫、支持網絡、可基於內存亦可持久化的日誌型、Key-Value數據庫,並提供多種語言的API其中value 可以爲string、hash、list、set、zset 等多種數據結構,可以滿足很多應用場景。還提供了鍵過期,發佈訂閱,事務,流水線,等附加功能

流水線

Redis 的流水線功能允許客戶端一次將多個命令請求發送給服務器,並將被執行的多個命令請求的結果在一個命令回覆中全部返回給客戶端,使用這個功能可以有效地減少客戶端在執行多個命令時需要與服務器進行通信的次數。

數據存放

1,Redis安裝在磁盤;

2,Redis數據存儲在內存

redis簡單使用

比如說,數據庫有一張表Order訂單表, 表主鍵orderid

1.2 Redis特性

  1. 速度快,數據放在內存中,官方給出的讀寫性能10 萬/S,與機器性能也有關
  2. 鍵值對的數據結構服務器
  3. 豐富的功能:見上功能
  4. 簡單穩定:單線程
  5. 持久化:發生斷電或機器故障,數據可能會丟失,持久化到硬盤
  6. 主從複製:實現多個相同數據的redis 副本
  7. 高可用和分佈式:哨兵機制實現高可用,保證redis 節點故障發現和自動轉移
  8. 客戶端語言多:java php python c c++ nodejs 等

1.3 redis性能高性能原因

  1. 純內存訪問
  2.  非阻塞I/O(使用多路複用)
  3. 單線程避免線程切

1.3 redis使用場景

1,緩存:合理使用緩存加快數據訪問速度,降低後端數據源壓力

2,排行榜:按照熱度排名,按照發布時間排行,主要用到列表和有序集合

3,計數器應用:視頻網站播放數,網站瀏覽數,使用redis 計數

4,社交網絡:贊、踩、粉絲、下拉刷新

5,消息隊列:發佈和訂閱

1.4 redis基本操作

  可執行文件

  作用

  redis-server

  啓動redis

  redis-cli

  redis命令行客戶端

  redis-benchmark

  基準測試工具

  redis-check-aof

  AOF持久化文件檢測和修復工具

  redis-check-dump

  RDB持久化文件檢測和修復工具

  redis-sentinel

  啓動哨兵

  redis-trib

  cluster集羣構建工具

二、Redis數據結構介紹

2.1 字符串

字符串類型:實際上可以是字符串(包括XML JSON),還有數字(整形 浮點數),二進制(圖片 音頻 視頻),最大不能超過512MB

命令 備註
set age 23 ex 10 10秒後過期  px 10000 毫秒過期
setnx name test  不存在鍵name時,返回1設置成功;存在的話失敗0
set age 25 xx   存在鍵age時,返回1成功
get age  存在則返回value, 不存在返回nil
set country china city beijing 批量設值
mget country city address   批量獲取
   

注意:若沒有mget命令,則要執行nget命令

命令 備註
incr age     必須爲整數自加1,非整數返回錯誤,無age鍵從0自增返回1
decr age   整數age減1
incrby age 2 整數age+2
decrby age 2 整數age -2
ncrbyfloat score 1.1 浮點型score+1.1
append name world 追加指令
getrange name 2 4 截取字符串

2.2 哈希(Hash)

2.2.1 hash存儲對象

redis得hash和JAVA的hash結構是一樣的,我們可以將一些數據庫的熱點數據寫入redis中。例如:

1,用戶表數據如下:

2,存儲到Redis, 使用字符串如何完成存儲操作?

3,哈希hash是一個string類型的field和value的映射表,hash特適合用於存儲對象

操作指令:  hmset user:1 name Dk age 18

2.2.2 hash常用命令

命令 備註
hset key field value  hset user:1 name Dk//成功返回1,失敗返回0
hget user:1 name 取值
hdel user:1 age  刪只值
hlen user:1  計算個數
hmset user:2 name Dk age 23 sex boy 批量設值
hmget user:2 name age sex 批量取值
hexists user:2 name 判斷field是否存在
hkeys user:2 獲取所有field
hvals user:2 批量取值
hgetall user:2 獲取user:2所有field與value
hincrby user:2 age 1  增加1
hincrbyfloat user:2 age 2 增加2 浮點

 

2.2.3 hash對象存放優點

1,原生:set user:1:name Dk;

               set user:1:age  23;

               set user:1:sex boy;

      優點:簡單直觀,每個鍵對應一個值

      缺點:鍵數過多,佔用內存多,用戶信息過於分散,不用於生產環境

 

2,將對象序列化存入redis

      set user:1 serialize(userInfo);

      優點:編程簡單,若使用序列化合理內存使用率高

      缺點:序列化與反序列化有一定開銷,更新屬性時需要把userInfo全取出來進行反序列化,更新後再序列化到redis

 

3,使用hash類型

        hmset user:1 name Dk age 23 sex boy

   優點:簡單直觀,使用合理可減少內存空間消耗

   缺點:要控制ziplist與hashtable兩種編碼轉換,且hashtable會消耗更多內存erialize(userInfo);

2.2.4 內部編碼

hash的內部編碼主要有ziplist<壓縮列表>和hashtable<哈希表>兩種,大家感興趣的話後面可以單獨個章節介紹下這兩種數據結構

 當field 個數少且沒有大的value 時,內部編碼爲ziplist

如:hmset user:3 name Dk age 24; object encoding user:3 //返回ziplist

當value 大於64 字節,內部編碼由ziplist 變成hashtable

如:hset user:4 address “fsgst64 字節”; object encoding user:3 //返回hashtable

 

2.3 列表<list>

2.3.1 list簡介

用來存儲多個有序的字符串,一個列表最多可存2的32次方減1個元素

因爲有序,可以通過索引下標獲取元素或某個範圍內元素列表,列表元素可以重複

2.3.2 list常用命令

命令 備註
rpush Dk c b a 從右向左插入cba, 返回值3
lrange Dk 0 -1  從左到右獲取列表所有元素 返回 c b a
lpush key c b a 從左向右插入cba
linsert Dk before b teacher 在b之前插入teacher, after爲之後,使用lrange Dk 0 -1 查看
lrange key start end 索引下標特點:從左到右爲0到N-1
lindex Dk -1 返回最右末尾a,-2返回b
llen Dk  返回當前列表長度
lpop Dk 把最左邊的第一個元素c刪除
rpop Dk 把最右邊的元素a刪除

 

2.4 集合<set>

2.4.1 集合應用場景

用戶標籤,社交,查詢有共同興趣愛好的人,智能推薦

保存多元素,與列表不一樣的是不允許有重複元素,且集合是無序,一個集合最多可存2的32次方減1個元素,除了支持增刪改查,還支持集合交集、並集、差集;

2.4.2 set命令:

命令 備註
exists user 檢查user鍵值是否存在
sadd user a b c 向user插入3個元素,返回3
sadd user a b 若再加入相同的元素,則重複無效,返回0
smember user 獲取user的所有元素,返回結果無序
srem user a  返回1,刪除a元素
scard user  返回2,計算元素個數

 

2.4.3 使用示例

當我們要根據用戶標籤篩選有同興趣愛好的人,實現智能推薦,可以按照這種方式進行計算

1、給用戶添加標籤:

  sadd user:1:fav basball fball pq

  sadd user:2:fav basball fball  

  ............

2、或者標籤添加用戶

  sadd basball:users user:1 user:2

  sadd fball:users user:1 user:2

  .......

3、計算出共同感興趣的人:

  sinter user:1:fav user2:fav

 

2.5 有序集合(ZSET

2.5.1 常用場景

常用於排行榜,如視頻網站需要對用戶上傳視頻做排行榜,或點贊數。與集合有聯繫,不能有重複的成員

三、redis常用命令

3.1 常用命令

   1,查看所有鍵:

             keys *   set school enjoy   set hello world

              keys *ool   ----->   school

   2,鍵總數 :

             dbsize         //2個鍵,如果存在大量鍵,線上禁止使用此指令

   3,檢查鍵是否存在:

             exists key    //存在返回1,不存在返回0

   4,鍵過期:

             expire key seconds        //set name test  expire name 10,表示10秒過期

               ttl key                            // 查看剩餘的過期時間

  5,鍵的數據結構類型:

             type key                        //返回string,鍵不存在返回none

3.2  redis數據庫管理

redis數據庫管理方式

select 0   選擇數據庫

flushdb   清除數據庫

flushall  清除所有數據

dbsize  數據大小

默認支持16個數據庫;可以理解爲一個命名空間

跟關係型數據庫不一樣的點

  1. redis不支持自定義數據庫名詞
  2. 每個數據庫不能單獨設置授權
  3. 每個數據庫之間並不是完全隔離的。 可以通過flushall命令清空redis實例面的所有數據庫中的數據

通過  select dbid 去選擇不同的數據庫命名空間 。 dbid的取值範圍默認是0 -15

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章