Redis (二)入門概述


###1. 什麼是redis

Redis是用C語言開發的一個開源的高性能鍵值對(key-value)數據庫。它通過提供多種鍵值數據類型來適應不同場景下的存儲需求,目前爲止Redis支持的鍵值數據類型如下:

  • 字符串類型【String】
  • 散列類型【Hash】
  • 列表類型【List】
  • 集合類型【Set】
  • 有序集合類型【Sorted set】
    ###2. redis的應用場景
    緩存(數據查詢、短連接、新聞內容、商品內容等等)。(最多使用)
    分佈式集羣架構中的session分離。
    聊天室的在線好友列表。
    任務隊列。(秒殺、搶購、12306等等)
    應用排行榜。
    網站訪問統計。
    數據過期處理(可以精確到毫秒)

###3. Redis的安裝
redis是C語言開發,建議在linux上運行,本教程使用Centos6.4作爲安裝環境。
安裝redis需要先將官網下載的源碼進行編譯,編譯依賴gcc環境,如果沒有gcc環境,需要安裝gcc:yum install gcc-c++
 版本說明
本教程使用redis3.0版本。3.0版本主要增加了redis集羣功能。

 源碼下載
從官網下載
http://download.redis.io/releases/redis-3.0.0.tar.gz
將redis-3.0.0.tar.gz拷貝到/usr/local下

 解壓源碼
tar -zxvf redis-3.0.0.tar.gz
 進入解壓後的目錄進行編譯
cd /usr/local/redis-3.0.0
make
 安裝到指定目錄,如 /usr/local/redis
cd /usr/local/redis-3.0.0
make PREFIX=/usr/local/redis install

 redis.conf
redis.conf是redis的配置文件,redis.conf在redis源碼目錄。
注意修改port作爲redis進程的端口,port默認6379。

 拷貝配置文件到安裝目錄下
進入源碼目錄,裏面有一份配置文件 redis.conf,然後將其拷貝到安裝路徑下
cd /usr/local/redis
mkdir conf
cp /usr/local/redis-3.0.0/redis.conf /usr/local/redis/bin

 安裝目錄bin下的文件列表

redis3.0新增的redis-sentinel是redis集羣管理工具可實現高可用。

配置文件目錄:

###4. redis啓動
####4.1. 前端模式啓動
直接運行bin/redis-server將以前端模式啓動,前端模式啓動的缺點是ssh命令窗口關閉則redis-server程序結束,不推薦使用此方法。如下圖:

####4.2. 後端模式啓動
修改redis.conf配置文件, daemonize yes 以後端模式啓動。

執行如下命令啓動redis:
cd /usr/local/redis
./bin/redis-server ./redis.conf

redis默認使用6379端口。

也可更改redis.conf文件,修改端口號:

###5. 通過jedis連接redis單機

####5.1. jar包
pom座標:

	<dependency>
	    	<groupId>redis.clients</groupId>
	    	<artifactId>jedis</artifactId>
	    	<version>2.7.0</version>
		</dependency>

jar包如下:

####5.2. 單實例連接
通過創建單實例jedis對象連接redis服務,如下代碼:

// 單實例連接redis
	@Test
	public void testJedisSingle() {

		Jedis jedis = new Jedis("192.168.101.3", 6379);
		jedis.set("name", "bar");
		String name = jedis.get("name");
		System.out.println(name);
		jedis.close();

	}

#####1. 外部連接不上redis的解決方法
由於linux防火牆默認開啓,redis的服務端口6379並不在開放規則之內,所有需要將此端口開放訪問或者關閉防火牆。
關閉防火牆命令:sevice iptables stop
如果是修改防火牆規則,可以修改:/etc/sysconfig/iptables文件
####5.3. 使用連接池連接
通過單實例連接redis不能對redis連接進行共享,可以使用連接池對redis連接進行共享,提高資源利用率,使用jedisPool連接redis服務,如下代碼:

@Test
public void pool() {
	JedisPoolConfig config = new JedisPoolConfig();
	//最大連接數
	config.setMaxTotal(30);
	//最大連接空閒數
	config.setMaxIdle(2);
	
	JedisPool pool = new JedisPool(config, "192.168.101.3", 6379);
	Jedis jedis = null;

	try  {
		jedis = pool.getResource();
		
		jedis.set("name", "lisi");
		String name = jedis.get("name");
		System.out.println(name);
	}catch(Exception ex){
		ex.printStackTrace();
	}finally{
		if(jedis != null){
			//關閉連接
			jedis.close();
		}
	}
	
}

詳細的連接池配置參數參考下節jedis和spring整合中applicationContext.xml的配置內容。

####5.4. jedis與spring整合
配置spring配置文件applicationContext.xml


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
		http://www.springframework.org/schema/beans/spring-beans-3.2.xsd 
		http://www.springframework.org/schema/mvc 
		http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd 
		http://www.springframework.org/schema/context 
		http://www.springframework.org/schema/context/spring-context-3.2.xsd 
		http://www.springframework.org/schema/aop 
		http://www.springframework.org/schema/aop/spring-aop-3.2.xsd 
		http://www.springframework.org/schema/tx 
		http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">

<!-- 連接池配置 -->
	<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
		<!-- 最大連接數 -->
		<property name="maxTotal" value="30" />
		<!-- 最大空閒連接數 -->
		<property name="maxIdle" value="10" />
		<!-- 每次釋放連接的最大數目 -->
		<property name="numTestsPerEvictionRun" value="1024" />
		<!-- 釋放連接的掃描間隔(毫秒) -->
		<property name="timeBetweenEvictionRunsMillis" value="30000" />
		<!-- 連接最小空閒時間 -->
		<property name="minEvictableIdleTimeMillis" value="1800000" />
		<!-- 連接空閒多久後釋放, 當空閒時間>該值 且 空閒連接>最大空閒連接數 時直接釋放 -->
		<property name="softMinEvictableIdleTimeMillis" value="10000" />
		<!-- 獲取連接時的最大等待毫秒數,小於零:阻塞不確定的時間,默認-1 -->
		<property name="maxWaitMillis" value="1500" />
		<!-- 在獲取連接的時候檢查有效性, 默認false -->
		<property name="testOnBorrow" value="true" />
		<!-- 在空閒時檢查有效性, 默認false -->
		<property name="testWhileIdle" value="true" />
		<!-- 連接耗盡時是否阻塞, false報異常,ture阻塞直到超時, 默認true -->
		<property name="blockWhenExhausted" value="false" />
	</bean>
	
	<!-- redis單機 通過連接池 -->
	<bean id="jedisPool" class="redis.clients.jedis.JedisPool" destroy-method="close">
		<constructor-arg name="poolConfig" ref="jedisPoolConfig"/>
		<constructor-arg name="host" value="192.168.25.145"/>
		<constructor-arg name="port" value="6379"/>
	</bean>

//測試代碼:
private ApplicationContext applicationContext;

	@Before
	public void init() {
		applicationContext = new ClassPathXmlApplicationContext(
				"classpath:applicationContext.xml");
	}

	@Test
	public void testJedisPool() {
	JedisPool pool = (JedisPool) applicationContext.getBean("jedisPool");
			try  {
			jedis = pool.getResource();
			
			jedis.set("name", "lisi");
			String name = jedis.get("name");
			System.out.println(name);
		}catch(Exception ex){
			ex.printStackTrace();
		}finally{
			if(jedis != null){
				//關閉連接
				jedis.close();
			}
		}
	}

分享一個學習網址:http://www.runoob.com/redis/redis-tutorial.html

發佈了212 篇原創文章 · 獲贊 599 · 訪問量 52萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章