java redis的应用_Redis-Java 交互的应用
一、首先介绍一下Redis
Redis是目前业界使用最广泛的内存数据存储。相比memcached,Redis支持更丰富的数据结构,例如hashes, lists, sets等,同时支持数据持久化。除此之外,Redis还提供一些类数据库的特性,比如事务,HA,主从库。可以说Redis兼具了缓存系统和数据库的一些特性,因此有着丰富的应用场景。本文介绍Redis在Spring Boot中典型的应用场景。
Redis缓存数据类型有5种,分别是String(字符串)、List(列表)、Hash(哈希)、Set(无序,不重复集合)、ZSet(sorted set:有序,不重复集合)。
二、先下载redis 我这里使用的是window64 版本
这是教程链接: http://blog.csdn.net/jinwufeiyang/article/details/52156817
Redis 下载链接 :https://github.com/MicrosoftArchive/redis/releases
双击图上的标记的 ,如成功便如图下
三、下面介绍java如何配置
这是我的项目结构
首先pom中引入jar包
org.springframework.session
spring-session-data-redis
application.properties 配置
# default-store in spring session. it will be set in redis only outside.
spring.session.store-type=none
# REDIS (RedisProperties)
# Redis数据库索引(默认为0)
spring.redis.database=0# Redis服务器地址
spring.redis.host=127.0.0.1# Redis服务器连接端口
spring.redis.port=6379# Redis服务器连接密码(默认为空)
spring.redis.password=# 连接池最大连接数(使用负值表示没有限制)
spring.redis.pool.max-active=8# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max-wait=-1# 连接池中的最大空闲连接
spring.redis.pool.max-idle=8# 连接池中的最小空闲连接
spring.redis.pool.min-idle=0# 连接超时时间(毫秒)
spring.redis.timeout=0
RedisController 配置
@RestControllerpublic classRedisController {
@AutowiredprivateRedisServiceImpl service;//添加
@RequestMapping(value = "/add", method =RequestMethod.GET)public voidtest() {
System.out.println("start.....");
RedisModel m= newRedisModel();
m.setName("张三");
m.setTel("1111");
m.setAddress("深圳1");
m.setRedisKey("zhangsanKey01");
service.put(m.getRedisKey(), m,-1);
RedisModel m2= newRedisModel();
m2.setName("张三2");
m2.setTel("2222");
m2.setAddress("深圳2");
m2.setRedisKey("zhangsanKey02");
service.put(m2.getRedisKey(), m2,-1);
RedisModel m3= newRedisModel();
m3.setName("张三3");
m3.setTel("2222");
m3.setAddress("深圳2");
m3.setRedisKey("zhangsanKey03");
service.put(m3.getRedisKey(), m3,-1);
System.out.println("add success end...");
}//查询所有对象
@RequestMapping(value = "/getAll", method =RequestMethod.GET)
@ResponseBodypublicObject getAll() {returnservice.getAll();
}//查询所有key
@RequestMapping(value = "/getKeys", method =RequestMethod.GET)
@ResponseBodypublicObject getKeys() {returnservice.getKeys();
}//根据key查询
@RequestMapping(value = "/get", method =RequestMethod.GET)publicObject get(String key) {
RedisModel m= newRedisModel();
m.setRedisKey(key);returnservice.get(m.getRedisKey());
}//删除
@RequestMapping(value = "/remove", method =RequestMethod.GET)
@ResponseBodypublic voidremove() {
RedisModel m= newRedisModel();
m.setRedisKey("zhangsanKey01");
service.remove(m.getRedisKey());
}//判断key是否存在
@RequestMapping(value = "/isKeyExists", method =RequestMethod.GET)
@ResponseBodypublic voidisKeyExists() {
RedisModel m= newRedisModel();
m.setRedisKey("zhangsanKey01");boolean flag =service.isKeyExists(m.getRedisKey());
System.out.println("zhangsanKey01 是否存在: "+flag);
}//查询当前缓存的数量
@RequestMapping(value = "/count", method =RequestMethod.GET)
@ResponseBodypublicObject count() {returnservice.count();
}//清空所有key
@RequestMapping(value = "/empty", method =RequestMethod.GET)
@ResponseBodypublic voidempty() {
service.empty();
}
IRedisService 配置
public abstract class IRedisService{
@Autowiredprotected RedisTemplateredisTemplate;
@Resourceprotected HashOperationshashOperations;/*** 存入redis中的key
*
*@return
*/
protected abstractString getRedisKey();/*** 添加
*
*@paramkey key
*@paramdoamin 对象
*@paramexpire 过期时间(单位:秒),传入 -1 时表示不设置过期时间*/
public void put(String key, T doamin, longexpire) {
hashOperations.put(getRedisKey(), key, doamin);if (expire != -1) {
redisTemplate.expire(getRedisKey(), expire, TimeUnit.SECONDS);
}
}/*** 删除
*
*@paramkey 传入key的名称*/
public voidremove(String key) {
hashOperations.delete(getRedisKey(), key);
}/*** 查询
*
*@paramkey 查询的key
*@return
*/
publicT get(String key) {returnhashOperations.get(getRedisKey(), key);
}/*** 获取当前redis库下所有对象
*
*@return
*/
public ListgetAll() {returnhashOperations.values(getRedisKey());
}/*** 查询查询当前redis库下所有key
*
*@return
*/
public SetgetKeys() {returnhashOperations.keys(getRedisKey());
}/*** 判断key是否存在redis中
*
*@paramkey 传入key的名称
*@return
*/
public booleanisKeyExists(String key) {returnhashOperations.hasKey(getRedisKey(), key);
}/*** 查询当前key下缓存数量
*
*@return
*/
public longcount() {returnhashOperations.size(getRedisKey());
}/*** 清空redis*/
public voidempty() {
Set set =hashOperations.keys(getRedisKey());
set.stream().forEach(key->hashOperations.delete(getRedisKey(),key));
}
RedisServiceImpl 配置
@Servicepublic class RedisServiceImpl extends IRedisService{private static final String REDIS_KEY = "TEST_REDIS_KEY";
@OverrideprotectedString getRedisKey() {return this.REDIS_KEY;
}
}
RedisModel 配置
public class RedisModel implementsSerializable {private String redisKey;//redis中的key
private String name;//姓名
private String tel;//电话
private String address;//住址
publicString getRedisKey() {returnredisKey;
}public voidsetRedisKey(String redisKey) {this.redisKey =redisKey;
}publicString getName() {returnname;
}public voidsetName(String name) {this.name =name;
}publicString getTel() {returntel;
}public voidsetTel(String tel) {this.tel =tel;
}publicString getAddress() {returnaddress;
}public voidsetAddress(String address) {this.address =address;
}
RedisConfig配置
@Configurationpublic classRedisConfig {/*** 注入 RedisConnectionFactory*/@Autowired
RedisConnectionFactory redisConnectionFactory;/*** 实例化 RedisTemplate 对象
*
*@return
*/@Beanpublic RedisTemplatefunctionDomainRedisTemplate() {
RedisTemplate redisTemplate = new RedisTemplate<>();
initDomainRedisTemplate(redisTemplate, redisConnectionFactory);returnredisTemplate;
}/*** 设置数据存入 redis 的序列化方式
*
*@paramredisTemplate
*@paramfactory*/
private void initDomainRedisTemplate(RedisTemplateredisTemplate, RedisConnectionFactory factory) {
redisTemplate.setKeySerializer(newStringRedisSerializer());
redisTemplate.setHashKeySerializer(newStringRedisSerializer());
redisTemplate.setHashValueSerializer(newJdkSerializationRedisSerializer());
redisTemplate.setValueSerializer(newJdkSerializationRedisSerializer());
redisTemplate.setConnectionFactory(factory);
}/*** 实例化 HashOperations 对象,可以使用 Hash 类型操作
*
*@paramredisTemplate
*@return
*/@Beanpublic HashOperations hashOperations(RedisTemplateredisTemplate) {returnredisTemplate.opsForHash();
}/*** 实例化 ValueOperations 对象,可以使用 String 操作
*
*@paramredisTemplate
*@return
*/@Beanpublic ValueOperations valueOperations(RedisTemplateredisTemplate) {returnredisTemplate.opsForValue();
}/*** 实例化 ListOperations 对象,可以使用 List 操作
*
*@paramredisTemplate
*@return
*/@Beanpublic ListOperations listOperations(RedisTemplateredisTemplate) {returnredisTemplate.opsForList();
}/*** 实例化 SetOperations 对象,可以使用 Set 操作
*
*@paramredisTemplate
*@return
*/@Beanpublic SetOperations setOperations(RedisTemplateredisTemplate) {returnredisTemplate.opsForSet();
}/*** 实例化 ZSetOperations 对象,可以使用 ZSet 操作
*
*@paramredisTemplate
*@return
*/@Beanpublic ZSetOperations zSetOperations(RedisTemplateredisTemplate) {returnredisTemplate.opsForZSet();
}
Redis 实现session 共享 sessionConfig 配置
@Configuration
@EnableRedisHttpSession(maxInactiveIntervalInSeconds= 86400*30)public classSessionConfig {
}
调用方法
HttpSession session;
session.setAttribute("data", "Session 共享 9966");
String name= "端口号:9966========="+ session.getAttribute("data");
分别运行两个一样的配置 session 就共享了
源码 良心制作 :https://gitee.com/xdymemory00/FuZaiJunHeng_Redis_session-GongXiang
nginx +Redis window64 版本工具:https://gitee.com/xdymemory00/Redis_Nginx-GongJu.git
运行之后收工!!!!!!!!!!
java redis的应用_Redis-Java 交互的应用相关推荐
- java redis工具类_redis Java工具类详解
redis 工具 [Java]代码 private static ShardedJedisPool sharedJedisPool; public synchronized static void i ...
- java redis 网络断开_Redis长时间连接后自动断开
从日志看2小时 [DEBUG] 22:02:48.206 org.nutz.ioc.impl.NutIoc.get(NutIoc.java:151) - Get 'emailAlertService' ...
- java redis释放连接_redis在应用中使用连接不释放问题解决
今天测试,发现redis使用的时候,调用的链接一直不释放.后查阅蛮多资料,才发现一个配置导致的.并不是他们说的服务没有启动导致的. 1)配置文件 #redis连接配置================= ...
- java redis集群操作,java操作redis3.0集群
java(JedisCluster)操作redis集群 这里只是几个简单的demo,直接上代码吧,没啥好说的 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ...
- java redis缓存使用_redis缓存在项目中的使用
关于redis为什么能作为缓存这个问题我们就不说了,直接来说一下redis缓存到底如何在项目中使用吧: 1.redis缓存如何在项目中配置? 1.1redis缓存单机版和集群版配置?(redis的客户 ...
- java redis事务机制_Redis 事务机制
Redis 事务:可以一次执行多个命令,本质是一组命令的集合.一个事务中的所有命令都会序列化,按顺序串行化执行而不会被其它命令插入,一次性.顺序性.排他性的执行一系列命令. 一.常用命令 [1] :开 ...
- java redis 主从 哨兵_Redis主从复制与哨兵机制
Redis主从复制 1.redis的复制功能是支持多个数据库之间的数据同步.一类是主数据库(master)一类是从数据库(slave),主数据库可以进行读写操作,当发生写操作的时候自动将数据同步到从数 ...
- java redis 主从配置_Redis实现主从复制(MasterSlave)
Redis实现主从复制(Master&Slave) Redis主从复制 1.是什么 1.单机有什么问题: 单机故障 容量瓶颈 qps瓶颈 主机数据更新后根据配置和策略,自动同步到备机的mast ...
- java redis 商品秒杀_redis编写lua脚本实现商品秒杀
编写lua脚本 --是否秒杀 local hasBuy = redis.call('sismember',KEYS[1],ARGV[1]) if hasBuy~=0 then return 0; en ...
- java redis模糊查询_Redis模糊查询
最近使用Redis优化项目功能,其中有一部分为模糊查询,找了很多帖子,也没有找到很好的解决方案和思路,最终皇天不负有心人啊,终于让我找到了!!! 可以通过Redis中keys命令进行获取key值,具体 ...
最新文章
- ubuntu12.04默认gcc4.6.3,如何升级到gcc4.8
- 和初学者谈谈如何学好单片机编程技术
- 深度学习之循环神经网络(2)循环神经网络原理
- ZZULIOJ 1105: 判断友好数对(函数专题)
- mysql定时任务 分钟_mysql定时任务
- 陶哲轩实分析 命题 7.3.4 (Cauchy 准则) 证明
- 字节跳动联邦学习平台通过中国信通院首批评估 数据安全能力得到专业验证
- Android使用BaseAdapter绑定ListView实现不同item的TextView多种文字变色
- axure6.5汉化最新正式破解版本下载(有注册码)
- Object对象转JSON字符串
- 今天是本学期的第几周的第几天? (15 分) C语言
- 离散数学——基础推理
- edge保存页面html,Edge浏览器怎么保存网页 保存网页方法一览
- plc的毕业设计冷门题目_PLC毕业设计----PLC毕业设计题目汇总
- 判断是不是数字 Java_java如何判断是不是数字
- Golang使用mgo.v2包操作MongoDB的基础示例
- git常用命令和基本操作
- stm32学习笔记——通用计时器基本原理
- xshell4连接ubuntu,报错No matching outgoing encryption
- 人工智能中的认识导航技术
热门文章
- js中使用slice进行补0日期和时间
- polkit启动失败_linux某服务启动失败,提示Authorization not available. Check if polkit...问题解决...
- android studio 本地html,android - 从当前HTML文件Android Studio中打开本地HTML文件? - 堆栈内存溢出...
- java 自定义登录态_java – 自定义HTTP状态代码
- mysql临时关闭查询日志_mysql故障排错临时打开通用日志和慢查询日志
- Android属性动画赏析,Android源码分析—属性动画的工作原理
- 玩转springboot2.x之自定义项目内自动配置
- Oracle(五)PL/SQL编程语言
- Android App优化之提升你的App启动速度之实例挑战
- python入门第八章 商品数量检测 头像格式检测