Redis從基礎到精通(一)-推薦看看這篇!_wenjin文瑾

Redis從基礎到精通

一 . Linux下安裝Redishtml

  1. 下載安裝包 redis官網:https://redis.io/,下載完成 redis-4.0.9.tar.gz
    在這裏插入圖片描述
  2. 啓動Linux,上傳安裝包至/home/wenjin目錄下
    在這裏插入圖片描述
  3. 移動安裝包至opt目錄下 mv redis-4.0.9.tar.gz /opt
  4. 解壓 tar -zxvf redis-4.0.9.tar.gz
  5. 進入解壓後的文件,能夠看到redis的配置文件
    在這裏插入圖片描述
  6. 安裝gcc環境 yum install gcc-c++ 執行make命令 make install命令
  7. redis默認安裝在 /usr/local/bin
    在這裏插入圖片描述
  8. 將redis配置文件複製至當前文件夾下 cp /opt/redis-4.0.9/redis.conf wconfig
    在這裏插入圖片描述
  9. redis默認不是後臺啓動的,修改配置文件 vim redis.conf 修改daemonize no 爲 daemonize yes
    在這裏插入圖片描述
  10. 啓動redis服務,在bin目錄下執行 redis-server wconfig/redis.conf
    在這裏插入圖片描述
  11. 使用redis自帶客戶端鏈接測試 redis-cli -p 6379
    在這裏插入圖片描述

二 . Redis基礎知識c++

redis有16個數據庫,默認爲第0個數據庫
切換數據庫 select 序號
在這裏插入圖片描述
查看全部的key


redis

127.0.0.1:6379[3]> keys *
1) "age"
127.0.0.1:6379[3]>
清除當前數據庫 FLUSHDB
清除全部數據庫 FLUSHALL
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379>

Redis是單線程的!!
官方表示Redis是基於內存操做的,CPU不是Redis的性能瓶頸,Redis的性能瓶頸是根據計算機的內存和網絡帶寬,既然可使用單線程來實現就使用單線程實現了!
Redis是C語言寫的,官方提供的數據爲100000+QPS,性能很是之高!

mongodb

Redis爲何單線程還這麼快?
1. 誤區1:高性能的服務器必定是多線程的?
2. 誤區2:多線程(CPU上下文切換!)必定比單線程高!
核心:Redis是將全部的數據放在內存中,因此說Redis使用單線程去操做效率就是最高的,(多線程CPU上下文切換耗時間!!),對於內存系統來講,沒有上下文切換效率就是最高的!屢次讀寫都是在一個CPU 上,在內存狀況下這個就是最佳方案!


數據庫

三 . Redis五大數據類型json

在這裏插入圖片描述

查詢未知命令----Redis中文網站 http://www.redis.cn/commands.html# Redis-keyvim

127.0.0.1:6379> keys *    //查看當前庫全部的key 
(empty list or set)
127.0.0.1:6379> flushall   //清除全部的庫
OK
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set name wenjin   
OK
127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379> set age 22
OK
127.0.0.1:6379> keys *
1) "name"
2) "age"
127.0.0.1:6379> exists name  //查看key是否存在
(integer) 1
127.0.0.1:6379> exists name1
(integer) 0
127.0.0.1:6379> move name 1   //一出key到目標庫
(integer) 1
127.0.0.1:6379> keys *
1) "age"
127.0.0.1:6379> select 1  //切換庫
OK
127.0.0.1:6379[1]> keys *
1) "name"
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> keys *
1) "age"
127.0.0.1:6379> set name wenwen
OK
127.0.0.1:6379> keys *
1) "name"
2) "age"
127.0.0.1:6379> expire name 10  //設置key過時時間,單位是秒
(integer) 1
127.0.0.1:6379> ttl name  //查看當前key的剩餘時間
(integer) 6
127.0.0.1:6379> ttl name
(integer) 3
127.0.0.1:6379> ttl name
(integer) 0
127.0.0.1:6379> type age  //查看key的類型
string
127.0.0.1:6379>

String類型緩存

127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set name1 wenjin
OK
127.0.0.1:6379> get name1
"wenjin"
127.0.0.1:6379> append name1 ",qianyu"  //追加字符串
(integer) 17
127.0.0.1:6379> get name1
"wenjin,qianyu"
127.0.0.1:6379> append name2 "hello"  //追加字符串,若是當前字符串不存在,則爲set
(integer) 5
127.0.0.1:6379> strlen name2   //查看字符串長度!
(integer) 5
127.0.0.1:6379>

作自增i++,例如瀏覽量服務器

127.0.0.1:6379> set view 0
OK
127.0.0.1:6379> get view
"0"
127.0.0.1:6379> incr view   //自加
(integer) 1
127.0.0.1:6379> incr view
(integer) 2
127.0.0.1:6379>
127.0.0.1:6379> incr view
(integer) 3
127.0.0.1:6379> decr view  //自減
(integer) 2
127.0.0.1:6379> decr view
(integer) 1
127.0.0.1:6379> decr view
(integer) 0
127.0.0.1:6379> decr view
(integer) -1
127.0.0.1:6379> incrby view 30   //自加多
(integer) 29
127.0.0.1:6379> decrby view 20   //自減多
(integer) 9
127.0.0.1:6379>

字符串替換和截取網絡

//字符串範圍 range
127.0.0.1:6379> set key1 "hello,wenjin"
OK
127.0.0.1:6379> get key1
"hello,wenjin"
127.0.0.1:6379> getrange key1 0 4     //截取字符串【0,3】
"hello"
127.0.0.1:6379> get key1
"hello,wenjin"
127.0.0.1:6379> getrange key1 0 -1    //獲取所有字符串
"hello,wenjin"
127.0.0.1:6379> set key2 abdfdgdjkj
OK
127.0.0.1:6379> get key2
"abdfdgdjkj"
127.0.0.1:6379> setrange key2 2 xxx   //字符串替換
(integer) 10
127.0.0.1:6379> get key2
"abxxxgdjkj"

重點:setex和setnx基礎用法及分佈式鎖使用場景

#setex (set with expire)      //設置過時時間    
#setnx (set if not existr)    //設置不存在的key-value (在分佈式鎖中經常使用)
127.0.0.1:6379> setex key3 40 danaomeng    //設置key3的值在40秒後過時
OK
127.0.0.1:6379> ttl key3     //查看key3的過時時間
(integer) 35
127.0.0.1:6379> ttl key3
(integer) 32
127.0.0.1:6379> setnx mykey hahhahaha    //若是meykey不存在,則設置mykey
(integer) 1
127.0.0.1:6379> keys *
1) "mykey"
2) "key1"
3) "key2"
4) "i"
5) "name"
127.0.0.1:6379> setnx mykey wewewewe   //若是mykey存在,則設置失敗
(integer) 0
127.0.0.1:6379> keys *
1) "mykey"
2) "key1"
3) "key2"
4) "i"
5) "name"
127.0.0.1:6379> get mykey
"hahhahaha"

批量設置字符串

#mset   #mget
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3   //同時設置多個值
OK
127.0.0.1:6379> mget k1 k2 k3     //同時獲取多個值
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> keys *
1) "k3"
2) "k2"
3) "k1"
127.0.0.1:6379> msetnx k1 v1 k4 v4    //msetnx是一個原子性操做,要麼一塊兒成功!要麼一塊兒失敗!
(integer) 0
127.0.0.1:6379>

設置對象
#對象

set user:1 {name:wenjin,age:22}   #這隻一個user:1對象,值用一個json字符串來保存一個對象!
#這裏key是一個巧妙的設計: user:{id}:{filed}
127.0.0.1:6379> mset user:1:name liusan user:1:age 33
OK
127.0.0.1:6379> mget user:1:name user:1:age
1) "liusan"
2) "33"
127.0.0.1:6379>

getset用法

#getset   //先get後set   
127.0.0.1:6379> getset desc redis    //若是不存在值則,則返回nil
(nil)
127.0.0.1:6379> get desc
"redis"
127.0.0.1:6379> getset desc mongodb   //若是存在值,則返回原來的值,設置新的值!
"redis"
127.0.0.1:6379> get desc
"mongodb"
127.0.0.1:6379>

String類型使用場景:value除了咱們的字符串還能夠是數字
* 計數器
* 統計多單位數量
* 粉絲數
* 對象緩存存儲
* 等等等等
**





基礎部分先寫到這裏,後期內容我會進一步跟進,歡迎各位小夥伴一塊兒探討!

**

相關文章
相關標籤/搜索