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");
	}	
}

在这里插入图片描述

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