一、Redis介紹
1、介紹
通常,在系統中,我們會把數據交由數據庫來存儲,但傳統的數據庫增刪查改的性能較差,且比較復雜。根據 80/20 法則,百分之八十的業務訪問集中在百分之二十的數據上。是否可以有一個存在於物理內存中的數據中間層,來緩存一些常用的數據,解決傳統數據庫數據讀寫性能問題。常用的數據都存儲在內存中,讀寫性能非常可觀。
Redis是一個開源的使用ANSI C語言編寫、支持網絡、可基於內存亦可持久化的日志型的高性能的key-value數據庫。它支持存儲的value類型包括 string(字符串)、list(鏈表)、set(集合)、zset(sorted set有序集合)和 hash(哈希類型)。這些數據類型都支持push/pop、add/remove及取交集並集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支持各種不同方式的排序。redis會周期性的把更新的數據寫入磁盤或者把修改操作寫入追加的記錄文件,並且在此基礎上實現了master-slave(主從)同步。
2、redis 優勢
> redis數據庫完全在內存中,使用磁盤僅用於持久性。不僅可用作緩存,更可為一種key-value存儲,他完全可替代后端的存儲服務,但需要做好備份。
> Redis可以將數據復制到任意數量的從服務器。
> Redis的速度非常快,每秒能執行約11萬集合,每秒約81000+條記錄。
> 支持豐富的數據類型,Redis支持大多數開發人員已經知道的像列表,集合,有序集合,散列數據類型。這使得它非常容易解決各種各樣的問題,因為我們知道哪些問題是可以通過它的數據類型處理更好。
> 所有Redis操作是原子的,這保證了如果兩個客戶端同時訪問的Redis服務器將獲得更新后的值。
> Redis是一個多功能實用的工具,可以在多個用例如緩存,消息,隊列使用(Redis原生支持發布/訂閱);任何短暫的數據,應用程序,如Web應用程序會話,網頁命中計數,熱點排行等。就看什么樣的業務場景以及你怎么去設計使用好它的數據結構。
二、Redis安裝
1、Linux下安裝
1、安裝
首先可以從redis官網找一個穩定版下載:https://redis.io/download
# cd /usr/local # wget http://download.redis.io/releases/redis-4.0.2.tar.gz # tar zxf redis-4.0.2.tar.gz # cd redis-4.0.2
# #直接make則安裝到src目錄下,可以通過如下方式安裝到指定目錄
# make PREFIX=/usr/local/redis install
安裝完后,在/usr/local/redis/bin下可以看到如下文件,同時在redis-4.0.2/src/也是存在的。
各個文件如下:
redis-benchmark Redis性能測試工具 redis-check-aof 檢查aof日志工具 redis-check-rdb 檢查rdb日志工具 redis-cli 連接用的客戶端
redis-sentinel Redis集群的管理工具 監控多個master-slave集群,發現master宕機后能進行自動切換 redis-server Redis服務程序
啟動服務:
# cd /usr/local/redis/bin # ./redis-server
# #上面是以默認的配置啟動服務,可以根據指定的配置文件啟動服務
# #首先將配置文件復制到安裝目錄下
# cp /usr/local/src/redis-4.0.2/redis.conf /usr/local/redis/
# #指定配置文件啟動
# ./redis-server ../redis-conf
這樣就算安裝成功了:默認端口可以看到使用的是6379.
會發現啟動的redis一致占據着終端,修改redis.conf,讓redis以后台進程的形式運行。
# vim redis.conf
# #修改 daemonize 為 yes 即可,然后重新啟動,就不會占據終端了。
測試:./redis-cli 啟動客戶端
2、注冊成服務
將redis注冊成系統服務,不然每次都要到安裝目錄下手動啟動服務.
如果服務開着,首先把服務關掉:./redis-cli shutdown
首先將redis目錄下的初始化腳本拷貝到/etc/rc.d/init.d目錄,同時重命名為redis
# cp /usr/local/src/redis-4.0.2/utils/redis_init_script /etc/rc.d/init.d/redis
修改redis腳本
a) 第二行增加如下內容:# chkconfig: 2345 80 90
b) 原腳本EXEC和CLIEXEC的值改到安裝目錄下.
c) 在$EXEC $CONF 后邊加一個&,表示讓redis作為后台服務啟動,否則該服務會獨占輸入屏。
d) 可以看到在/etc/init.d/redis文件中有這么一行:CONF="/etc/redis/${REDISPORT}.conf",啟動時的默認配置文件為/etc/redis/6379.conf。於是將redis配置文件拷貝到/etc/redis/下,並命名為 6379.conf 。
# mkdir /etc/redis # cp /usr/local/src/redis-4.0.2/redis.conf /etc/redis/6379.conf
e) 至此修改完畢,注冊服務
# chkconfig --add redis
f) 啟動服務和停止服務命令
# service redis start # service redis stop
2、Windows下安裝
1、安裝
首先下載windows版redis:https://github.com/MicrosoftArchive/redis/releases
這里我下載解壓版:
下載完成后,解壓即可:可以看到如下文件.
redis-server.exe Redis啟動程序
redis.windows.conf 配置文件
通過如下命令啟動:這樣就代表啟動成功。同樣會一直占用着終端。
啟動客戶端進行測試:
2、注冊成系統服務
redis-server.exe --service-install redis.windows.conf
3、Redis數據庫
redis安裝完成之后,可以使用圖形化管理工具RedisDesktopManager,可以很方便的查看redis的所有數據。
通過管理工具我們可以看到redis的數據庫:
redis默認有16個數據庫,可以通過配置文件修改。
redis下,數據庫是由一個整數索引標識,默認啟用0數據庫,通過select命令可以切換數據庫。且每個數據庫都有屬於自己的空間,不必擔心之間的key沖突。
* flushdb,清空當前數據庫,flushall,清空所有數據庫。
三、Redis通用key操作命令
redis有很多數據類型,如string、list、set、zset等等,這里先學習redis對於key的操作命令,再學習數據類型的操作。
首先插入幾條數據:
1、 keys:查詢key
可以使用模糊查詢key,有三個通配符 *、?、[]。* 通配任意字符,? 通配單個字符,[] 通配某一個字符。
2、randomkey:隨機取一個key
例如抽獎時可用於隨機抽取一個人。
3、exists key:判斷key是否存在,返回1/0
4、type key:判斷key存儲的值的類型
返回的類型可能有string、list、set、zset、hash等,但不包括int、boolean、long這種基本類型,其以字符串形式保存。
5、rename key newkey:重命名key
如果newkey 已經存在,則newkey的原值被覆蓋
6、renamenx key newkey:重命名key
nx > not exists,即newkey不存在時才修改,發生修改時返回1,未發生修改返回0。
7、del key1 key2 ... keyn:刪除key
不存在的key忽略,返回真正刪除的key的數量
8、move key dbid:將key移動到dbid數據庫
9、expire key seconds:設置key的生命周期,單位秒
pexpire key milliseconds:設置生命周期,單位毫秒。
redis的key默認是永久有效的。
10、ttl key:查詢key的生命周期,返回秒數
pttl key:返回毫秒數。
對於不存在的key、已經過期的key返回-2;永久有效的key,返回-1。
11、expireat key timestamp:設置key的過期時間,timestamp為unix的時間戳
pexpireat key milliseconds-timestamp:unix時間為毫秒。
需要將過期的時間轉為Unix時間戳。
12、persist key:把指定的key設為永久有效
可以將設置過期時間的key轉為永久有效。
最后:
不要使用太長的鍵,例如,不要使用一個 1024 字節的鍵,不僅是因為內存占用,而且在數據集中查找鍵時需要多次耗時的鍵比較。
不要使用太短的鍵。用”u1000flw” 取代”user:1000:followers” 作為鍵並沒有什么實際意義,后者更具有可讀性,相對於鍵對象本身以及值對象來說,增加的空間微乎其微。
堅持一種模式 (schema)。例如,”object-type:id” 就不錯,就像”user:1000”。點或者橫線常用來連接多單詞字段,如”comment:1234:reply.to”,或者”comment:1234:reply-to”。
鍵的最大大小是 512MB。
參考:http://wiki.jikexueyuan.com/project/redis-guide/
基礎學習完,下一章學具體數據類型的操作!!!