0、pom.xml

<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.56</version>
</dependency>

1.配置文件

#不用 springboot的redisTemplate,所以不用Springboot自身集成的redis配置
redis:
host: localhost
port:
timeout:
passpord: xiaochao
poolMaxTotal:
poolMaxIdle:
poolMaxWait:
passport: xiaochao

2.配置项映射类

package com.everjiankang.miaosha.redis;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component; import lombok.Data; @Data
@Component
@ConfigurationProperties("redis")
public class RedisConfig {
private String host;
private String username;
private String passport;
private int port;
private int timeout;
private String passpord;
private int poolMaxTotal;
private int poolMaxIdle;
private int poolMaxWait;
}

3.配置类

package com.everjiankang.miaosha.config;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map; import javax.sql.DataSource; import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.everjiankang.miaosha.redis.RedisConfig; import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig; @Configuration
public class MyConfig { @Autowired
RedisConfig redisConfig; @Bean
public JedisPool jedisPoolFactory() {
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxIdle(redisConfig.getPoolMaxIdle());
poolConfig.setMaxTotal(redisConfig.getPoolMaxTotal());
poolConfig.setMaxWaitMillis(redisConfig.getPoolMaxWait() * 1000);
return new JedisPool(poolConfig, redisConfig.getHost(), redisConfig.getPort(), redisConfig.getTimeout(), redisConfig.getPasspord());
}
}

4、前缀接口

package com.everjiankang.miaosha.redis;

/**
* 前缀接口
* @author guchunchao
*
*/
public interface KeyPrefix {
/**
* 获取过期时间
* @return
*/
int expireSeconds(); /**
* 获取前缀
* @return
*/
String getPrefix();
}

5、前缀基础实现

package com.everjiankang.miaosha.redis;

public abstract class BaseKeyPrefix implements KeyPrefix{

    private int expireSeconds;

    private String prefix;

    public BaseKeyPrefix(int expireSeconds, String prefix) {
super();
this.expireSeconds = expireSeconds;
this.prefix = prefix;
} public BaseKeyPrefix(String prefix) {
this.expireSeconds = 0;
this.prefix = prefix;
} @Override
public int expireSeconds() { //默认0代表永不过期
return expireSeconds;
} @Override
public String getPrefix() {
String className = getClass().getSimpleName();
return className + ":" + prefix;
}
}

6、前缀实现类

package com.everjiankang.miaosha.redis;

public class UserKey extends BaseKeyPrefix {

    private UserKey(int expireSeconds, String prefix) {
super(expireSeconds, prefix);
} private UserKey(String prefix) {
super(prefix);
} public static UserKey getById = new UserKey("id");
public static UserKey getByName = new UserKey("name"); }

7、Jedis操作Redis类:

package com.everjiankang.miaosha.redis;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import com.alibaba.fastjson.JSON; import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool; @Service
public class RedisService { @Autowired
JedisPool jedisPool; /**
* 获取单个对象
* @param prefix
* @param key
* @param clazz
* @return
*/
public <T> T get(KeyPrefix prefix,String key, Class<T> clazz) {
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
String realKey = prefix.getPrefix() + key;
String value = jedis.get(realKey);
T t = stringToBean(value,clazz);
return t;
} finally {
returnToPool(jedis);
}
} /**
* 设置对象
* @param prefix
* @param key
* @param value
* @return
*/
public boolean set(KeyPrefix prefix, String key, Object value) {
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
String str = beanToString(value);
if(str == null || str.length() <=0)
return false;
int expireSecond = prefix.expireSeconds();
String realKey = prefix.getPrefix() + key;
if(expireSecond <= 0) {
jedis.set(realKey,str);
} else {
jedis.setex(realKey, expireSecond, str);
}
return true;
} finally {
returnToPool(jedis);
}
} /**
* 判断是否存在
* @param prefix
* @param key
* @return
*/
public boolean exist(KeyPrefix prefix, String key) {
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
String realKey = prefix.getPrefix() + key;
return jedis.exists(realKey);
} finally {
returnToPool(jedis);
}
} /**
* 增加
* @param prefix
* @param key
* @param clazz
* @return
*/
public <T> Long incri(KeyPrefix prefix,String key, Class<T> clazz) {
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
String realKey = prefix.getPrefix() + key;
Long incr = jedis.incr(realKey);
return incr;
} finally {
returnToPool(jedis);
}
} /**
* 减少
* @param prefix
* @param key
* @param clazz
* @return
*/
public <T> Long decr(KeyPrefix prefix,String key, Class<T> clazz) {
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
String realKey = prefix.getPrefix() + key;
Long decr = jedis.decr(realKey);
return decr;
} finally {
returnToPool(jedis);
}
} /**
* Java对象转String
* @param value
* @return
*/
private <T> String beanToString(T value) {
if(value == null)
return null;
Class<?> clazz = value.getClass(); if(clazz == int.class || clazz == Integer.class
|| clazz == long.class || clazz == Long.class
|| clazz == float.class || clazz == Float.class
|| clazz == double.class || clazz == Double.class
)
return "" + value;
else if(value instanceof String)
return (String) value;
else
return JSON.toJSONString(value); } /**
* string 转Java
* @param value
* @param clazz
* @return
*/
@SuppressWarnings("unchecked")
private <T> T stringToBean(String value,Class<T> clazz) {
if(value == null)
return null;
if(clazz == int.class || clazz == Integer.class)
return (T) Integer.valueOf(value);
else if( clazz == long.class || clazz == Long.class)
return (T) Long.valueOf(value);
else if(clazz == float.class || clazz == Float.class)
return (T) Float.valueOf(value);
else if(clazz == double.class || clazz == Double.class)
return (T) Double.valueOf(value);
else if(value instanceof String)
return (T) value;
else
return JSON.toJavaObject(JSON.parseObject(value), clazz);
} /**
* 将Jedis链接还回连接池:详情close方法
* @param jedis
*/
private void returnToPool(Jedis jedis) {
if(jedis != null)
jedis.close();
}
}

8、controller调用实例

package com.everjiankang.miaosha.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody; import com.everjiankang.miaosha.model.CodeMsg;
import com.everjiankang.miaosha.model.Result;
import com.everjiankang.miaosha.model.User;
import com.everjiankang.miaosha.redis.RedisService;
import com.everjiankang.miaosha.redis.UserKey;
import com.everjiankang.miaosha.service.UserService; @Controller
@RequestMapping("/test")
public class TestController { @Autowired
UserService userService; @Autowired
RedisService redisService; @PostMapping("/test01")
@ResponseBody
public Result<String> test01() {
return Result.success("hello world");
} @PostMapping("/helloError")
@ResponseBody
public Result<String> helloError() {
return Result.error(CodeMsg.SERVER_ERROR);
} @RequestMapping("/thymeleaf")
public String thymeleaf() {
return "thymeleaf";
} @RequestMapping("/getById/{id}")
@ResponseBody
public Result<User> getById(@PathVariable("id") int id) {
return Result.success(userService.selectByPrimaryKey(id));
} @RequestMapping("/redisGet/{key}")
@ResponseBody
public Result<String> redisGet(@PathVariable("key") String key) {
String string = redisService.get(UserKey.getById,key, String.class);
return Result.success(string);
} @RequestMapping("/redisSet/{key}/{value}")
@ResponseBody
public Result<String> redisSet(@PathVariable("key") String key,@PathVariable("value") String value) {
if(key != null && !"".equals(key.trim()) && value != null && !"".equals(value)) {
boolean result = redisService.set(UserKey.getById,key, value);
if(result)
return Result.success(redisService.get(UserKey.getById,key, String.class));
else
return Result.error(CodeMsg.SERVER_ERROR);
} else {
return Result.error(CodeMsg.SERVER_ERROR);
}
} @RequestMapping("/redisSetUserTest")
@ResponseBody
public Result<User> redisSetUserTest(@PathVariable("key") String key) {
User user = new User();
user.setId(1);
user.setAge(27);
user.setName("xiaochao");
user.setSex(1);
boolean result = redisService.set(UserKey.getById,key, user);
if(result)
return Result.success(user);
else
return Result.error(CodeMsg.SERVER_ERROR);
} @RequestMapping("/redisSetUserTest")
@ResponseBody
public Result<User> redisGetUserTest(@PathVariable("id") String id) { User user = redisService.get(UserKey.getById,id,User.class);
if(user != null)
return Result.success(user);
else
return Result.error(CodeMsg.SERVER_ERROR);
} }

33. Springboot 系列 原生方式引入Redis,非RedisTemplate的更多相关文章

  1. 实例讲解Springboot以Template方式整合Redis及序列化问题

    1 简介 之前讲过如何通过Docker安装Redis,也讲了Springboot以Repository方式整合Redis,建议阅读后再看本文效果更佳: (1) Docker安装Redis并介绍漂亮的可 ...

  2. 实例讲解Springboot以Repository方式整合Redis

    1 简介 Redis是高性能的NoSQL数据库,经常作为缓存流行于各大互联网架构中.本文将介绍如何在Springboot中整合Spring Data Redis,使用Repository的方式操作. ...

  3. springBoot系列教程03:redis的集成及使用

    1.为了高可用,先安装redis集群 参考我的另一篇文章 http://www.cnblogs.com/xiaochangwei/p/7993065.html 2.POM中引入redis <de ...

  4. SpringBoot使用注解方式整合Redis

    1.首先导入使用Maven导入jar包 <dependency> <groupId>org.springframework.boot</groupId> <a ...

  5. SpringBoot系列-整合Mybatis(注解方式)

    目录 一.常用注解说明 二.实战 三.测试 四.注意事项 上一篇文章<SpringBoot系列-整合Mybatis(XML配置方式)>介绍了XML配置方式整合的过程,本文介绍下Spring ...

  6. SpringBoot系列之Spring容器添加组件方式

    SpringBoot系列之Spring容器添加组件方式 本博客介绍SpringBoot项目中将组件添加到Spring容器中的方法,SpringBoot项目有一个很明显的优点,就是不需要再编写xml配置 ...

  7. SpringBoot系列教程之Redis集群环境配置

    之前介绍的几篇redis的博文都是基于单机的redis基础上进行演示说明的,然而在实际的生产环境中,使用redis集群的可能性应该是大于单机版的redis的,那么集群的redis如何操作呢?它的配置和 ...

  8. SpringBoot系列(十四)集成邮件发送服务及邮件发送的几种方式

    往期推荐 SpringBoot系列(一)idea新建Springboot项目 SpringBoot系列(二)入门知识 springBoot系列(三)配置文件详解 SpringBoot系列(四)web静 ...

  9. Java Redis系列1 关系型数据库与非关系型数据库的优缺点及概念

    Java Redis系列1 关系型数据库与非关系型数据库的优缺点及概念 在学习redis之前我们先来学习两个概念,即什么是关系型数据库什么是非关系型数据库,二者的区别是什么,二者的关系又是什么? ** ...

随机推荐

  1. Ubuntu 安装 Docker CE(社区版)

    参考自 https://yeasy.gitbooks.io/docker_practice/install/ubuntu.html#ubuntu-1604- docker-io 是以前早期的版本,版本 ...

  2. loadrunner使用https请求

    1:使用函数 web_set_sockets_option:设置套接字的函数 例如:web_set_sockets_option("SSL_VERSION","TLS&q ...

  3. c# 7.0 6.0 新语法

    1.参考地址:https://docs.microsoft.com/zh-cn/dotnet/csharp/tutorials/exploration/csharp-7?tutorial-step=5 ...

  4. UML 教程

    UML 教程 关键词:部署图, 组件图, 包图, 类图, 复合结构图, 对象图, 活动图, 状态机图, 用例图, 通信图, 交互概述图, 时序图, 时间图 简介 部署图 组件图 包图 类图 复合结构图 ...

  5. SoapUI 学习总结-02 断言

    一 断言 测试指定的restful api是否正常,判断它的响应值是否符合预期标准,需要用到断言知识.在soapUI里断言使用的Groovy语言.在项目中测试起来非常简单,测试过程如下. 1,准备测试 ...

  6. Golang 入门系列(四)如何理解interface接口

    前面讲了很多Go 语言的基础知识,包括go环境的安装,go语言的语法等,感兴趣的朋友,可以先看看之前的文章.https://www.cnblogs.com/zhangweizhong/category ...

  7. windows下redis安装及配置

    1.简介: redis是一个高性能的key-value数据库:redis能读的速度为11万次/秒,写的速度是8.1万次/秒 redis支持丰富的数据类型:String, List, Hash(map) ...

  8. 国内可访问的稳定docker镜像

    可参考:https://yeasy.gitbooks.io/docker_practice/content/install/mirror.html 但在debian 9上进行相应配置后,在pull镜像 ...

  9. 安装inotify-tools监控工具

    安装inotify-tools监控工具 yum install -y inotify-tools 2:查看inotify-tools包的工具程序 [root@dns3 ~]# rpm -ql inot ...

  10. 3 数据分析之Numpy模块(2)

    数组函数 通用元素级数组函数通用函数(即ufunc)是一种对ndarray中的数据执行元素级的运算.我们可以将其看做是简单的函数(接收一个或多个参数,返回一个或者多个返回值). 常用一元ufunc: ...