系统性学习,移步IT-BLOG

一、简介


对于类似于首页这种每天都有大量的人访问,对数据库造成很大的压力,严重时可能导致瘫痪。解决方法:一种是数据缓存、一种是网页静态化。今天就讨论数据缓存的实现

Redis:是一种开源的 Key-Value 数据库,运行在内存中,企业开发通常采用 Redis 来实现缓存。同类的产品还有 memcache、memchached、MongoDB 等。
Jedis:是 Redis 官方推出的一款面向 Java 的客户端,提供了很多接口以供 Java 语言调用。可以在 Redis 官网下载当然还有一些开源爱好者提供的客户端,如:Jredis、SRP 等等,推荐使用 Jedis
Spring Data Redis:是 Spring 大家族的一部分提供了在 Spring 应用中通过简单的配置访问 redis 服务,对 redis 底层开发包(Jedis,JRedis,RPC)进行了高度封装,RedisTemplate 提供了 redis 各种操作,异常处理及序列化,支持发布订阅
Spring-data-Redis 针对 jedis 提供了如下功能:
【1】连接池自动管理,提供了一个高度封装的 “RedisTemplate” 类。
【2】针对 jedis 客户端中大量 api 进行了归类封装,将同一类型操作封装为 operation 接口,例如:
      ValueOperations:简单 K-V 操作
      SetOperations:set 类型数据操作
      ZSetOperationszset 类型数据操作
      HashOperations针对 map 类型的数据操作
      ListOperations针对 list 类型的数据操作

二、需要依赖的 jar 包如下:(jedis 与 spring-data-redis 相关的 jar 包)


 1 <!-- 缓存 -->
2 <dependency>
3 <groupId>redis.clients</groupId>
4 <artifactId>jedis</artifactId>
5 <version>2.8.1</version>
6 </dependency>
7 <dependency>
8 <groupId>org.springframework.data</groupId>
9 <artifactId>spring-data-redis</artifactId>
10 <version>1.7.2.RELEASE</version>
11 </dependency>

三、Spring Data Redis 入门案例


第一步:创建一个 maven project 项目,以 jar 包的形式创建。引入 Spring 及 Redis 的相关 Jar 包(pom.xml 文件内容如下)

 1 <project xmlns="http://maven.apache.org/POM/4.0.0"
2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
4 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5 <modelVersion>4.0.0</modelVersion>
6 <groupId>com.pinyougou-itcast</groupId>
7 <artifactId>springDataRedis</artifactId>
8 <version>0.0.1-SNAPSHOT</version>
9
10 <!-- 集中定义依赖版本号 -->
11 <properties>
12 <spring.version>4.2.4.RELEASE</spring.version>
13 </properties>
14
15 <dependencies>
16 <!-- Spring -->
17 <dependency>
18 <groupId>org.springframework</groupId>
19 <artifactId>spring-context</artifactId>
20 <version>${spring.version}</version>
21 </dependency>
22 <dependency>
23 <groupId>org.springframework</groupId>
24 <artifactId>spring-beans</artifactId>
25 <version>${spring.version}</version>
26 </dependency>
27 <dependency>
28 <groupId>org.springframework</groupId>
29 <artifactId>spring-webmvc</artifactId>
30 <version>${spring.version}</version>
31 </dependency>
32 <dependency>
33 <groupId>org.springframework</groupId>
34 <artifactId>spring-jdbc</artifactId>
35 <version>${spring.version}</version>
36 </dependency>
37 <dependency>
38 <groupId>org.springframework</groupId>
39 <artifactId>spring-aspects</artifactId>
40 <version>${spring.version}</version>
41 </dependency>
42 <dependency>
43 <groupId>org.springframework</groupId>
44 <artifactId>spring-jms</artifactId>
45 <version>${spring.version}</version>
46 </dependency>
47 <dependency>
48 <groupId>org.springframework</groupId>
49 <artifactId>spring-context-support</artifactId>
50 <version>${spring.version}</version>
51 </dependency>
52 <dependency>
53 <groupId>org.springframework</groupId>
54 <artifactId>spring-test</artifactId>
55 <version>${spring.version}</version>
56 </dependency>
57 <!-- 缓存 -->
58 <dependency>
59 <groupId>redis.clients</groupId>
60 <artifactId>jedis</artifactId>
61 <version>2.8.1</version>
62 </dependency>
63 <dependency>
64 <groupId>org.springframework.data</groupId>
65 <artifactId>spring-data-redis</artifactId>
66 <version>1.7.2.RELEASE</version>
67 </dependency>
68 </dependencies>
69 </project>

第二步:启动 redis 服务端,并在项目的 src/main/resource 中创建 properties/redis-config.properties 配置文件

 1 # Redis settings
2 # server IP
3 redis.host=192.168.88.131
4 # server port
5 redis.port=6379
6 # server pass
7 redis.pass=
8 # use dbIndex
9 redis.database=0
10 # \u63A7\u5236\u4E00\u4E2Apool\u6700\u591A\u6709\u591A\u5C11\u4E2A\u72B6\u6001\u4E3Aidle(\u7A7A\u95F2\u7684)\u7684jedis\u5B9E\u4F8B
11 redis.maxIdle=300
12 # \u8868\u793A\u5F53borrow(\u5F15\u5165)\u4E00\u4E2Ajedis\u5B9E\u4F8B\u65F6\uFF0C\u6700\u5927\u7684\u7B49\u5F85\u65F6\u95F4\uFF0C\u5982\u679C\u8D85\u8FC7\u7B49\u5F85\u65F6\u95F4(\u6BEB\u79D2)\uFF0C\u5219\u76F4\u63A5\u629B\u51FAJedisConnectionException\uFF1B
13 redis.maxWait=3000
14 # \u5728borrow\u4E00\u4E2Ajedis\u5B9E\u4F8B\u65F6\uFF0C\u662F\u5426\u63D0\u524D\u8FDB\u884Cvalidate\u64CD\u4F5C\uFF1B\u5982\u679C\u4E3Atrue\uFF0C\u5219\u5F97\u5230\u7684jedis\u5B9E\u4F8B\u5747\u662F\u53EF\u7528\u7684
15 redis.testOnBorrow=true

第三步:在 src/main/resource 中创建 spring/applicationContext-redis.xml 配置文件

 1 <?xml version="1.0" encoding="UTF-8"?>
2 <beans xmlns="http://www.springframework.org/schema/beans"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
4 xmlns:context="http://www.springframework.org/schema/context"
5 xmlns:mvc="http://www.springframework.org/schema/mvc"
6 xmlns:cache="http://www.springframework.org/schema/cache"
7 xsi:schemaLocation="http://www.springframework.org/schema/beans
8 http://www.springframework.org/schema/beans/spring-beans.xsd
9 http://www.springframework.org/schema/context
10 http://www.springframework.org/schema/context/spring-context.xsd
11 http://www.springframework.org/schema/mvc
12 http://www.springframework.org/schema/mvc/spring-mvc.xsd
13 http://www.springframework.org/schema/cache
14 http://www.springframework.org/schema/cache/spring-cache.xsd">
15
16 <context:property-placeholder location="classpath*:properties/*.properties" />
17
18 <!-- redis 相关配置 -->
19 <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
20 <property name="maxIdle" value="${redis.maxIdle}" />
21 <property name="maxWaitMillis" value="${redis.maxWait}" />
22 <property name="testOnBorrow" value="${redis.testOnBorrow}" />
23 </bean>
24
25 <!-- Spring Data Redis 相关配置 -->
26 <bean id="JedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
27 p:host-name="${redis.host}" p:port="${redis.port}" p:password="${redis.pass}" p:pool-config-ref="poolConfig"/>
28
29 <!-- 在业务配置中主要通过 此模板调用redis 进行数据操作 -->
30 <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
31 <property name="connectionFactory" ref="JedisConnectionFactory" />
32 </bean>
33
34 </beans>

第四步:数据操作之 String 值类型操作

 1 package com.yintong.test;
2
3 import org.junit.Test;
4 import org.junit.runner.RunWith;
5 import org.springframework.beans.factory.annotation.Autowired;
6 import org.springframework.data.redis.core.RedisTemplate;
7 import org.springframework.test.context.ContextConfiguration;
8 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
9
10 @RunWith(SpringJUnit4ClassRunner.class)
11 @ContextConfiguration(locations="classpath:spring/applicationContext-redis.xml")
12 public class StringDemo {
13
14 @Autowired
15 private RedisTemplate redisTemplate;
16 @Test
17 public void setValue() {//redis中设置值
18 redisTemplate.boundValueOps("name").set("zzx");
19 }
20 @Test
21 public void getValue() {
22 String name = (String) redisTemplate.boundValueOps("name").get();
23 System.out.println(name);
24 }
25 @Test
26 public void deleteValue(){
27 redisTemplate.delete("name");;
28 }
29 }

第五步:Set 数据类型操作

 1 package com.yintong.test;
2
3 import java.util.Set;
4
5 import org.junit.Test;
6 import org.junit.runner.RunWith;
7 import org.springframework.beans.factory.annotation.Autowired;
8 import org.springframework.data.redis.core.BoundSetOperations;
9 import org.springframework.data.redis.core.RedisTemplate;
10 import org.springframework.test.context.ContextConfiguration;
11 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
12
13 @RunWith(SpringJUnit4ClassRunner.class)
14 @ContextConfiguration(locations="classpath:spring/applicationContext-redis.xml")
15 public class SetDemo {
16 @Autowired
17 private RedisTemplate redisTemplate;
18 /**
19 * 存入值:Bound系列操作示例,Bound系列操作的优势在于只需要绑定一次,然后可以进行一个系列的操作,代码十分精炼。
20 */
21 @Test
22 public void setValue() {//redis中设置值
23 BoundSetOperations boundSetOps = redisTemplate.boundSetOps("nameSet");
24 boundSetOps.add("zzx");
25 boundSetOps.add("love");
26 boundSetOps.add("fj");
27 }
28 /**
29 * 提取值
30 */
31 @Test
32 public void getValue() {
33 Set members = redisTemplate.boundSetOps("nameSet").members();
34 System.out.println(members);
35 }
36 /**
37 * 删除集合中的某一个值
38 */
39 @Test
40 public void deleteValue(){
41 redisTemplate.boundSetOps("nameset").remove("孙权");
42 }
43 /**
44 * 删除整个集合
45 */
46 @Test
47 public void deleteAllValue(){
48 redisTemplate.delete("nameset");
49 }
50 }

结果展示:

第六步:List 类型操作

 1 package com.yintong.test;
2
3 import java.util.List;
4
5 import org.junit.Test;
6 import org.junit.runner.RunWith;
7 import org.springframework.beans.factory.annotation.Autowired;
8 import org.springframework.data.redis.core.RedisTemplate;
9 import org.springframework.test.context.ContextConfiguration;
10 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
11
12 @RunWith(SpringJUnit4ClassRunner.class)
13 @ContextConfiguration(locations="classpath:spring/applicationContext-redis.xml")
14 public class TestList {
15 @Autowired
16 private RedisTemplate redisTemplate;
17 /**
18 * 右压栈:后添加的对象排在后边
19 */
20 @Test
21 public void setValueList() {
22 redisTemplate.boundListOps("nameList").rightPush("zzx");
23 redisTemplate.boundListOps("nameList").rightPush("fj");
24 }
25 /**
26 * 显示右压栈集合
27 */
28 @Test
29 public void getValueList() {
30 List range = redisTemplate.boundListOps("nameList").range(0, -1);
31 System.out.println(range);
32 }
33 /**
34 * 左压栈:后添加的对象排在前边
35 */
36 @Test
37 public void testSetValue2(){
38 redisTemplate.boundListOps("nameList").leftPush("love");
39 }
40 /**
41 * 查询集合某个元素
42 */
43 @Test
44 public void testSearchByIndex(){
45 Object index = redisTemplate.boundListOps("nameList").index(1);
46 System.out.println(index);
47 }
48 /**
49 * 移除集合某个元素
50 */
51 @Test
52 public void testRemoveByIndex(){
53 redisTemplate.boundListOps("nameList").remove(1, "zzx");
54 }
55 }

第七步:Hash 类型操作

 1 package com.yintong.test;
2
3 import java.util.List;
4 import java.util.Set;
5
6 import org.junit.Test;
7 import org.junit.runner.RunWith;
8 import org.springframework.beans.factory.annotation.Autowired;
9 import org.springframework.data.redis.core.RedisTemplate;
10 import org.springframework.test.context.ContextConfiguration;
11 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
12
13 @RunWith(SpringJUnit4ClassRunner.class)
14 @ContextConfiguration(locations="classpath:spring/applicationContext-redis.xml")
15 public class TestHash {
16 @Autowired
17 private RedisTemplate redisTemplate;
18 //插入值
19 @Test
20 public void setValue() {
21 redisTemplate.boundHashOps("nameHash").put("zzx", "boy");
22 redisTemplate.boundHashOps("nameHash").put("fj", "girl");
23 }
24 //提取所有的KEY
25 @Test
26 public void getKey() {
27 Set keys = redisTemplate.boundHashOps("nameHash").keys();
28 System.out.println(keys);
29 }
30 //获取所有值
31 @Test
32 public void getValues() {
33 List values = redisTemplate.boundHashOps("nameHash").values();
34 System.out.println(values);
35 }
36 @Test
37 //根据key获取值(常用)
38 public void getValueByKey() {
39 Object nameValue = redisTemplate.boundHashOps("nameHash").get("zzx");
40 System.out.println(nameValue);
41 }
42 @Test
43 //根据key溢出值
44 public void deleteKey() {
45 redisTemplate.boundHashOps("nameHash").delete("zzx");
46 }
47 }


 ----关注公众号,获取更多内容----

Spring Data Redis 框架的更多相关文章

  1. Spring Data Redis 详解及实战一文搞定

    SDR - Spring Data Redis的简称. Spring Data Redis提供了从Spring应用程序轻松配置和访问Redis的功能.它提供了与商店互动的低级别和高级别抽象,使用户免受 ...

  2. spring mvc Spring Data Redis RedisTemplate [转]

    http://maven.springframework.org/release/org/springframework/data/spring-data-redis/(spring-data包下载) ...

  3. Spring Data Redis简介以及项目Demo,RedisTemplate和 Serializer详解

    一.概念简介: Redis: Redis是一款开源的Key-Value数据库,运行在内存中,由ANSI C编写,详细的信息在Redis官网上面有,因为我自己通过google等各种渠道去学习Redis, ...

  4. spring data redis 理解

    前言 Spring Data Redis project,应用了Spring概念来开发使用键值形式的数据存储的解决方案.我们(官方)提供了一个 "template" ,这是一个高级 ...

  5. Spring Data Redis 让 NoSQL 快如闪电(2)

    [编者按]本文作者为 Xinyu Liu,文章的第一部分重点概述了 Redis 方方面面的特性.在第二部分,将介绍详细的用例.文章系国内 ITOM 管理平台 OneAPM 编译呈现. 把 Redis ...

  6. Spring Data Redis 让 NoSQL 快如闪电 (1)

    [编者按]本文作者为 Xinyu Liu,详细介绍了 Redis 的特性,并辅之以丰富的用例.在本文的第一部分,将重点概述 Redis 的方方面面.文章系国内 ITOM 管理平台 OneAPM 编译呈 ...

  7. spring data redis使用1——连接的创建

    spring data redis集成了几个Redis客户端框架,Jedis , JRedis (Deprecated since 1.7), SRP (Deprecated since 1.7) a ...

  8. Spring Data Redis学习

    本文是从为知笔记上复制过来的,懒得调整格式了,为知笔记版本是带格式的,内容也比这里全.点这里 为知笔记版本 Spring Data Redis 学习 Version 1.8.4.Release 前言 ...

  9. Redis(八):spring data redis 理解

    前言 Spring Data Redis project,应用了Spring概念来开发使用键值形式的数据存储的解决方案.我们(官方)提供了一个 "template" ,这是一个高级 ...

  10. Spring Data Redis整体介绍 (一)

    为什么使用Spring Data Redis 首先Spring Data Redis 是Spring 框架提供的用于操作Redis的客户端. Spring框架是一个全栈Java程序框架,通过DI.AO ...

随机推荐

  1. 在Unity3D中开发的Sketch Shader

    Pencil Sketch Shader 特点 此素描渲染风格的Shader是顶点片元Shader,由本人手动编写完成. 此素描渲染风格的Shader已经在移动设备真机上进行过测试,可以直接应用到您的 ...

  2. json字符串让里面的""和null不显示出来

    工具类 ------------------------------------------------------------------------------------------------ ...

  3. NOI模板复习组——图论部分

    1.最小生成树: kruscal: #include <cstdio> #include <cmath> #include <cstring> #include & ...

  4. windows根据文件名找到进程,并杀死进程。

    背景:最近因为工作原因,装了360杀毒引擎,完了就卸载了.发现一直提示文件正在使用无法删除.文件无法访问等等.经过一系列操作,安全模式下都无法删除,恶心死了... 1.shirt + del 按文件夹 ...

  5. visio2019 破解

    链接:https://pan.baidu.com/s/14AU8GFXhgjp87pK1bIK8UA?pwd=ju61 提取码:ju61 --来自百度网盘超级会员V5的分享 可能需要关闭防火墙和win ...

  6. C 语言 scanf 格式化输入函数

    C 语言 scanf 格式化输入函数 函数概要 scanf 函数从标准输入流中读取格式化字符串.与 printf 格式化输出函数相反,scanf 函数是格式化输入函数. 函数原型 #include & ...

  7. Dependencies 和 Libraries 的区别

    Dependencies 和 Libraries 的区别 - 如何导入 jar 包 虽然现在的项目大多数人更愿意使用 Maven 等工具构建,但是在学习 Project Structure 这块的时候 ...

  8. Python爬虫之用Selenium做爬虫

    我们在用python做爬虫的时候,除了直接用requests的架构,还有Scrapy.Selenium等方式可以使用,那么今天我们就来聊一聊使用Selenium如何实现爬虫. Selenium是什么? ...

  9. css穿透

    https://www.cnblogs.com/linjiangxian/p/13183412.html

  10. vue中模块化后mapState的使用

    代码如下: 相当于声明了一个变量name,然后以state入参取得其modules文件夹中user文件里的name属性.因为在模块(如user)中,在抛出时的export default中添加了一句: ...