redis緩存應用(一)

基本概述

對於網站首頁每天有大量的人訪問,對數據庫造成很大的訪問壓力,甚至是癱瘓。那如何解決呢?我們通常的做法有兩種:一種是數據緩存、一種是網頁靜態化
redis
redis是一款開源的Key-Value數據庫,運行在內存中,由ANSI C編寫。企業開發通常採用Redis來實現緩存。同類的產品還有memcache 、memcached 、MongoDB等。
jedis
Jedis是Redis官方推出的一款面向Java的客戶端,提供了很多接口供Java語言調用。可以在Redis官網下載,當然還有一些開源愛好者提供的客戶端,如Jredis、SRP等等,推薦使用Jedis。
Spring-data-redis
Spring-data-redis是spring大家族的一部分,提供了在srping應用中通過簡單的配置訪問redis服務,對reids底層開發包(Jedis, JRedis, and RJC)進行了高度封裝,RedisTemplate提供了redis各種操作、異常處理及序列化,支持發佈訂閱,並對spring 3.1 cache進行了實現。
spring-data-redis針對jedis提供瞭如下功能:
1.連接池自動管理,提供了一個高度封裝的“RedisTemplate”類
2.針對jedis客戶端中大量api進行了歸類封裝,將同一類型操作封裝爲operation接口
ValueOperations:簡單K-V操作
SetOperations:set類型數據操作
ZSetOperations:zset類型數據操作
HashOperations:針對map類型的數據操作
ListOperations:針對list類型的數據操作
RedisTemplate
spring 封裝了 RedisTemplate 對象來進行對redis的各種操作,它支持所有的 redis 原生的 api
這個bean的配置在spring-redis.xml中
在這裏插入圖片描述

安裝

因爲Redis是一個開源的使用ANSI C語言編寫,所以需要虛擬機環境有gcc環境

rpm -qa | grep gcc
yum install gcc

上傳redis-5.0.4.tar.gz
解壓
進入解壓目錄執行編譯命令:make
編譯完成後會在src文件夾內生成文件redis-server、redis-benchmark、redis-cli
在這裏插入圖片描述
將redis-server、redis-benchmark、redis-cli拷貝到/usr/ redis-5.0.4

cp redis-server ../
cp redis-benchmark ../
cp redis-cli ../

因爲我們需要遠程連接,需要將bind項註釋、保護模式改爲no、設置密碼
vim redis.conf
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
啓動方式一前臺啓動:在redis安裝目錄 ./redis-server redis.conf
啓動方式二後臺啓動:在redis安裝目錄 ./redis-server redis.conf &
方式二啓動完成後 輸入ctrl + c 退出 使用ps -ef | grep redis 可以查詢到進程
在這裏插入圖片描述

Spring Data Redis入門Demo

構建jar工程SpringDataRedisDemo
pom依賴信息
jar工程需要引入編譯插件

<properties>
    <spring.version>4.2.4.RELEASE</spring.version>
    <junit.version>4.12</junit.version>
</properties>
<dependencies>
    <!-- Spring -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aspects</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-support</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>${junit.version}</version>
    </dependency>

    <!-- 緩存 -->
    <dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
        <version>2.8.1</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-redis</artifactId>
        <version>1.7.2.RELEASE</version>
    </dependency>

</dependencies>

<build>
    <plugins>
        <plugin><!--jar工程需要編譯插件,進行編譯-->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.7.0</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
    </plugins>
</build>

在src/main/resources下創建redis-config.properties

redis.host=192.168.2.123
redis.port=6379
redis.pass=root
redis.database=0#使用0號數據庫
redis.maxIdle=300
redis.maxWait=3000
redis.testOnBorrow=true

在src/main/resources下創建spring-redis.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:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
		http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context
		http://www.springframework.org/schema/context/spring-context.xsd">

    <context:property-placeholder location="classpath:redis-config.properties" />

    <!-- redis 相關配置 -->
    <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <property name="maxIdle" value="${redis.maxIdle}" />
        <property name="maxWaitMillis" value="${redis.maxWait}" />
        <property name="testOnBorrow" value="${redis.testOnBorrow}" />
    </bean>

    <bean id="JedisConnectionFactory"
          class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
        <property name="hostName" value="${redis.host}" />
        <property name="port" value="${redis.port}" />
        <property name="password" value="${redis.pass}" />
        <property name="database" value="${redis.database}" />
        <property name="poolConfig" ref="poolConfig" />
    </bean>

    <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
        <property name="connectionFactory" ref="JedisConnectionFactory" />
    </bean>

</beans>

maxIdle :最大空閒數
maxWaitMillis:連接時的最大等待毫秒數
testOnBorrow:在提取一個jedis實例時,是否提前進行驗證操作;如果爲true,則得到的jedis實例均是可用的

創建測試類
Redis中存儲數據是通過key-value存儲的,對於value的類型有以下幾種:

  • 字符串
    在這裏插入圖片描述

  • 字符串列表(list):List類型是按照插入順序排序的字符串鏈表
    在這裏插入圖片描述

  • 字符串集合(set):和List不同,Set是沒有記錄順序的字符集合,且不允許出現重複的元素

  • 哈希(hash):String Key和String Value的map容器,該類型非常適合於存儲值對象的信息
    在這裏插入圖片描述

  • 有序字符串集合(sorted set):Sorted-Set和Set類型極爲相似,主要差別是Sorted-Sets中的每一個成員都會有一個分數(score)與之關聯

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:spring-redis.xml")
public class Test1 {
	
	@Autowired
	private RedisTemplate redisTemplate;

	@Test
	public void setValue() {
		redisTemplate.boundValueOps("name").set("123");
	}

	@Test
	public void getValue() {
		String str = (String) redisTemplate.boundValueOps("name").get();
		System.out.println(str);
	}

	@Test
	public void deleteValue() {
		redisTemplate.delete("name");
	}	
}

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章