1. Redis的簡介
- Redis是一個開源(BSD許可),內存存儲的數據結構服務器,可用做數據庫,高速緩存和消息隊列代理
- 它支持字符串、哈希表、列表、集合、有序集合,位圖,hyperloglogs等數據類型
- 內置複製、Lua腳本、LRU收回、事務以及不一樣級別磁盤持久化功能,同時經過Redis Sentinel提供高可用,經過Redis Cluster提供自動分區。
- 簡言之,Redis是一種面向「鍵/值」對數據類型的內存數據庫,能夠知足咱們對海量數據的快速讀寫需求。
2. Redis的特色
- Redis支持數據的持久化,能夠將內存中的數據保存在磁盤中,重啓的時候能夠再次加載進行使用
- Redis不單單支持簡單的k-v類型的數據,同時還提供list,set,zset,hash等數據結構的存儲
- Redis支持數據的備份,即master-slave主從模式的數據備份
3. Redis的優點
- 性能極高——Redis讀的速度爲11w/s,寫的速度爲8.1w/s
- 豐富的數據類型 (Strings,Lists,Hashes,Sets即Ordered Sets )
- 原子性——Redis的全部操做都是原子性的,同時Redis還支持對幾個操做合併後的原子性執行
- 豐富的特性——Redis還支持publish/subscribe,通知,key過時等特性。
4. 經常使用的NoSql數據庫
-
hbasejava
-
redisnode
- 基於內存的nosql數據庫
- 通常使用redis作緩存或者隊列
-
mogodbpython
- 在結構化數據比較簡單的狀況下,可使用mogodb代替mysql,做爲一個高性能的數據庫
5. Redis的安裝
5.1 Redis單機版的安裝
- 準備源碼安裝包
redis-3.2.0.tar.gzmysql
- 解壓
tar -zxvf redis-3.2.0.tar.gz -C /opt/linux
- 重命名
mv redis-3.2.0/ redisc++
- 安裝gcc編譯器
yum -y install gccredis
- 編譯安裝源碼
make && make installsql
注意:編譯安裝完成以後會在src目錄下出現redis的相關命令shell
-
修改redis.conf的配置項數據庫
bind node1 (默認是127.0.0.1,這是本地迴環地址,只能本地應用程序之間進行通訊)
daemonize yes(後臺運行)
logfile /opt/redis/logs/redis.log(日誌文件,目錄必須存在)
- 啓動Redis-Server
src/redis-server redis.conf
- 啓動redis客戶端
src/redis-cli -h uplooking05 -p 6379
5.2 Redis集羣的安裝
- 把前面安裝好的單機版的redis拷貝到uplooking04 uplooking03
- 修改redis.conf
bind uplookingxxxxx
- 在從節點(uplooking04 uplooking05) redis.conf 末尾追加
slaveof uplooking03 6379
- 修改從節點爲只讀不寫(redis官方推薦的)(uplooking04 uplooking05)
slave-read-only yes
slave-read-only no
ps:注意啓動集羣時儘可能先啓動主節點再啓動從節點
6. Redis中配置的查看
Redis的配置文件位於Redis的安裝目錄之下,文件名爲redis.conf。能夠經過config命令來查看或設置配置項
config get confName: 獲取配置的值
config set confName confVal: 設置配置的值
7. Redis中的數據類型
- string(字符串)
- hash(哈希)
- list(列表)
- set(集合)
- zset(sorted set)有序的集合
8. 數據類型之String(字符串)
- string是redis中最基本的數據類型
- 一個key對應一個value
- string類型的value是基於二進制存儲的,因此徹底能夠存儲圖片和影音等二進制數據
- key的大小最大512mb
- 存儲數據: set name value
- 讀取數據: get name
- 刪除redis中的key說對應的value: del key
9. 數據類型之Hash(哈希)
- Redis hash 是一個鍵值對集合。Redis hash是一個string類型的field和value的映射表,hash特別適合用於存儲對象 object
- 存儲一個數據: HSET KEY fieldName value
- 獲取數據: HGET KEY fieldName
- 設置多個數據: HMSET info sex nan address gansu
- 獲取多個數據: HMGET info sex address
- 刪除hash中的多個個鍵值對: HDEL info admin ...
- 刪除redis中的key說對應的value: del key
10. 數據類型之List(列表)
Redis列表是簡單的字符串列表,按照插入順序排序。你能夠添加一個元素到列表的頭部(左邊)或者尾部(右邊)
- 首部添加數據: LPUSHloves java c++ python..
- 尾部添加元素: RPUSH linux hadoop..
- 查看數據: lrange loves 0 10000
- 首部移除元素: LPOP loves
- 尾部移除元素: RPOP loves
列表最多可存儲 232-1元素 (4294967295, 每一個列表可存儲40多億)。
11. 數據類型之Set(集合)
Redis的Set是string類型的無序集合。
- 集合中添加元素: SADD key member member ,member ...
- SMEMBERS loves
- 集合中的元素是不能重複,若是添加的value已經存在在redis中則返回0,不存在則返回1
12. 數據類型之ZSet(有序集合)
- Redis zset和set同樣也是string類型元素的集合,且不容許重複的成員。不一樣的是每一個元素都會關聯一個double類型的分數。redis正是經過分數來爲集合中的成員進行從小到大的排序
- zset的成員是惟一的,但分數(score)卻能夠重複
- 給zset添加數據: ZADD loves 5 java
- 獲取固定得分範圍的數據: ZRANGEBYSCORE loves 1 20
13. Redis中的經常使用命令
13.1 鍵值對相關
- keys * 取出當前全部的key
- exists name 查看redis是否有name這個key
- del name 刪除key name
- expire confirm 100 設置confirm這個key100秒過時
- ttl confirm 獲取confirm 這個key的有效時長
- persist confirm 移除confirm這個key的過時時間
- select 0 (在redis中總共有16個數據庫,默認是0號數據庫)
- move confirm 1 將當前數據庫中的key移動到其餘的數據庫中
- randomkey 隨機返回數據庫裏面的一個key
- rename key2 key3 重命名key2 爲key3
- type key2 返回key的數據類型
13.2 服務器相關
- select 0~15 編號的數據庫
- quit /exit 退出客戶端
- dbsize 返回當前數據庫中全部key的數量
- info 返回redis的相關信息
- ==flushdb 刪除當前選擇數據庫中的全部key==
- ==flushall 刪除全部數據庫中的數據==
14. Reds中的API操做
-
pom依賴
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
-
經常使用操做
package com.uplooking.bigdata.redis;
import org.junit.Test;
import redis.clients.jedis.Jedis;
public class RedisTest {
@Test
public void testString() {
//建立Jedis
Jedis jedis = new Jedis("uplooking03");
jedis.select(0);
jedis.set("name", "value");
System.out.println(jedis.get("name"));
}
@Test
public void testHash() {
//建立Jedis
Jedis jedis = new Jedis("uplooking03");
jedis.select(0);
jedis.hset("info", "name", "admin");
jedis.hset("info", "age", 12 + "");
System.out.println(jedis.hget("info", "name"));
}
@Test
public void testList() {
//建立Jedis
Jedis jedis = new Jedis("uplooking03");
jedis.select(0);
jedis.rpush("loves", "java", "c++", "python");
jedis.lpop("loves");
System.out.println(jedis.lrange("loves", 0, 10000));
System.out.println(jedis.rpop("loves"));
System.out.println(jedis.lrange("loves", 0, 10000));
}
}
15. Redis可視化工具
RedisDesktopManager