標籤:style blog http io color ar os 使用 java
1. NoSql是以key-value形式儲存,和傳統的關係型資料庫不一樣,不一定遵循傳統資料庫的一些基本要求,比如說遵循SQL標準,ACID屬性,表結構等等,這類資料庫主要有一下特點:非關係型的,分布式的,開源的,水平可擴充的。
2. NoSql的特點:
a) 處理超大量的資料。
b) 運行在便宜的pc伺服器叢集上
c) 擊碎了效能瓶頸。
3. NoSql適用情境
a) 對資料高並發讀寫。(咱們在對mysql進行上萬次的寫操作,那麼咱們的硬碟io就可能無法承受了)
b) 對海量資料的高效率儲存和訪問。
c) 對資料的高可擴充和高可用性。(資料庫可以增加一個伺服器節點來完成資料移轉和資料庫維護)
4. Redis 是完全開源免費的,遵守BSD協議,先進的key - value持久化產品。它通常被稱為(資料結構伺服器),因為值(value)可以是 字串(String), 雜湊(Map), 鏈表(list), 集合(sets) 和 有序集合(sorted sets)等類型.
5. Redis是一個key-value儲存系統。它支援儲存的value類型很多,包括string,list,set,zset(有序集合).這些資料類型都支援push/pop,add/remove及取交集和並集及更豐富的操作,Redis支援各種不同方式的排序(因為redis中有zset資料結構,這是通過一個鍵來儲存它的順序)。為了保證效率,資料都是緩衝在記憶體中,它可以周期性的把更新的資料寫入磁碟或者把修改操作寫入追加的記錄檔案。(把修改操作寫入追加的記錄檔案這個類似於mysql中的bin-log,儲存的都是更新資料,插入資料和刪除資料的相關操作)
6. Redis提供的API語言:http://www.redis.io/clients
7. Redis適用場合
a) 應用程式直接存取Redis資料庫
注意:這樣直接存取Redis資料庫可能存在某些問題,讀寫都是直接操作資料庫,這樣做比較簡單,但是如果某天我的某台Redis資料庫down掉了,那我的資料就會永久的丟失。
b) 應用程式直接存取Redis,只有Redis訪問失敗時才訪問Mysql
分析:首先我們的應用程式直接先訪問我們的Redis server,向redis裡面寫。此時redis會跟後面的mysql叢集進行同步。當redis服務down掉以後,應用伺服器會去找後面的mysql。
Redis更加實用的情境:
取最新N個資料的操作
熱門排行榜應用,取TOP N操作
需要精確設定到期時間的應用(可以對鍵設定到期時間,這個mysql就無法做到)
計數器應用
Uniq操作,擷取某段時間所有資料排重值
即時系統,反垃圾系統。
Pub/Sub構建即時訊息系統。(發布與訂閱是redis專屬的系統)
構建隊列系統。
緩衝
8. mysql與redis、mongodb的比較
Redis |
Mysql |
mongodb |
有庫的概念 |
有庫的概念 |
有庫的概念 |
無表的概念 |
有表的概念 |
集合 |
無欄位的概念 |
有欄位的概念(行,列) |
無欄位的概念 |
1.http://www.redis.io/download
2.可以在linux下運行如下命令進行安裝
$ wget http://download.redis.io/releases/redis-2.8.17.tar.gz$ tar xzf redis-2.8.17.tar.gz$ cd redis-2.8.17$ make
安裝完成後 /opt/redis-2.8.17/src目錄下會出現編譯後的redis服務程式redis-server,還有用於測試的用戶端程式redis-cli
3.下面啟動redis服務
[[email protected] redis-2.8.17]# src/redis-server
[8491] 02 Nov 22:45:39.989 # Warning: no config file specified, using the default config. In order to specify a config file use src/redis-server /path/to/redis.conf
[8491] 02 Nov 22:45:39.991 * Increased maximum number of open files to 10032 (it was originally set to 1024).
[8491] 02 Nov 22:45:39.992 # Warning: 32 bit instance detected but no memory limit set. Setting 3 GB maxmemory limit with ‘noeviction‘ policy now.
_._
_.-``__ ‘‘-._
_.-`` `. `_. ‘‘-._ Redis 2.8.17 (00000000/0) 32 bit
.-`` .-```. ```\/ _.,_ ‘‘-._
( ‘ , .-` | `, ) Running in stand alone mode
|`-._`-...-` __...-.``-._|‘` _.-‘| Port: 6379
| `-._ `._ / _.-‘ | PID: 8491
`-._ `-._ `-./ _.-‘ _.-‘
|`-._`-._ `-.__.-‘ _.-‘_.-‘|
| `-._`-._ _.-‘_.-‘ | http://redis.io
`-._ `-._`-.__.-‘_.-‘ _.-‘
|`-._`-._ `-.__.-‘ _.-‘_.-‘|
| `-._`-._ _.-‘_.-‘ |
`-._ `-._`-.__.-‘_.-‘ _.-‘
`-._ `-.__.-‘ _.-‘
`-._ _.-‘
`-.__.-‘
[8491] 02 Nov 22:45:39.995 # Server started, Redis version 2.8.17
[8491] 02 Nov 22:45:39.997 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add ‘vm.overcommit_memory = 1‘ to /etc/sysctl.conf and then reboot or run the command ‘sysctl vm.overcommit_memory=1‘ for this to take effect.
[8491] 02 Nov 22:45:39.997 * The server is now ready to accept connections on port 6379
注意這種方式啟動redis 使用的是預設配置。也可以通過啟動參數告訴redis使用指定設定檔使用下面命令啟動.
[[email protected] redis-2.8.17]# src/redis-server redis.conf
redis.conf是一個預設的設定檔。我們可以根據需要使用自己的設定檔。
啟動redis服務進程後,就可以使用測試用戶端程式redis-cli和redis服務互動了。
1.輸入以下命令
[[email protected] redis-2.8.17]# src/redis-cli 127.0.0.1:6379> set yml blingOK127.0.0.1:6379> get yml"bling"127.0.0.1:6379>
這裡示範了get和set命令操作簡單類型value的例子。foo是key ,bar是個string類型的value
沒linux的可以通過這個線上的來練習,當然線上版的很多管理相關的命令是不支援的。
http://try.redis-db.com/
1.用戶端jar:http://www.java2s.com/Code/Jar/j/DownloadJRedisjar.htm
MAVEN地址:http://mvnrepository.com/artifact/redis.clients/jedis/2.6.0
2.在eclipse中建立一個maven項目,然後添加jredis包依賴。下面是個簡單的執行個體
1 package com.bling.redis; 2 3 import redis.clients.jedis.Jedis; 4 5 6 /** 7 * Hello world! 8 * 9 */10 public class App 11 {12 public static void main( String[] args )13 {14 Jedis j = new Jedis("192.168.168.128",6379);15 String key = "yml";16 j.set(key, "hello redis jun !");17 String value = new String(j.get(key));18 19 String key2 = "count";20 j.incr(key2);21 j.incr(key2);22 String value2 = new String(j.get(key2));23 System.out.println( "value = "+value );24 System.out.println( "value2 = "+value2 );25 }26 }
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.bling.redis</groupId> <artifactId>com.bling.redis</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>com.bling.redis</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <!-- jredis(用戶端工具) --> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.6.0</version> </dependency> </dependencies></project>
運行結果如下:
value = hello redis jun !
value2 = 2
redis環境搭建(Linux)、Jredis