SpringData Redis的简单使用
SpringDate Redis是在Jedis框架的基础之上对Redis进行了高度封装,通过简单的属性配置就可以通过调用方法完成对Redis数据库的操作,而且SpringData Redis使用了连接工厂(JedisConnectionFactory),相比于Jedis框架性能更好。
Spring集成Jedis要使用的jar包
<!-- Jedis 与spring整合 -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.5.1</version>
</dependency>
在xml中的配置
<!-- Redis 连接池 -->
<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
<!-- 最小保持idle状态的对象数 -->
<property name="minIdle" value="20"/>
<!-- 最大能够保持idel状态的对象数-->
<property name="maxIdle" value="50"/>
<!-- 最大分配的对象数 -->
<property name="maxTotal" value="2048"/>
<!-- 当池内没有返回对象时,最大等待时间 -->
<property name="maxWaitMillis" value="3000"/>
<!-- 当调用borrow Object方法时,是否进行有效性检查 -->
<property name="testOnBorrow" value="true"/>
</bean>
<!-- business Redis 连接工厂 -->
<bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
destroy-method="destroy">
<!-- Redis地址 -->
<property name="hostName" value="127.0.0.1"/>
<!-- Redis端口 -->
<property name="port" value="6379"/>
<!-- Redis库索引 -->
<property name="database" value="0"/>
<!-- Redis连接池 -->
<property name="poolConfig" ref="poolConfig"/>
<property name="usePool" value="true"/>
<!-- 连接redis的密码 -->
<property name="password" value="123456"/>
</bean>
<!--针对String的序列化工具-->
<bean id="stringRedisSerializer" name="stringRedisSerializer"
class="org.springframework.data.redis.serializer.StringRedisSerializer"/>
<!-- SpringData Redis默认使用的序列化工具 -->
<bean id="jdkSerializationRedisSerializer" name="jdkSerializationRedisSerializer"
class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer"/>
<!-- RedisTemplate类配置 -->
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
<property name="connectionFactory" ref="jedisConnectionFactory"/>
<property name="keySerializer" ref="stringRedisSerializer"/>
<property name="hashKeySerializer" ref="stringRedisSerializer"/>
<property name="hashValueSerializer" ref="jdkSerializationRedisSerializer"/>
<property name="valueSerializer" ref="jdkSerializationRedisSerializer"/>
</bean>
通过使用RedisTemplate类的opsForValue()方法获取封装操作value为字符串的各种命令的方法的操作对象、opsForList()方法获取封装操作value为列表的各种命令的方法的操作对象、opsForSet()方法获取封装操作value为集合的各种命令的方法的操作对象、opsForHash()方法获取封装操作value为字符串的各种命令的方法的操作对象、opsForZSet()方法获取封装操作value为有序集合的各种命令的方法的操作对象、opsForHyperLogLog()方法获取封装操作基数统计的各种命令的方法的操作对象。通过获取的操作对象,直接调用封装的方法对Redis数据库进行操作。
备注:Redis是String类型的key-value类型的nosql数据库,对于对象,我们可以将在value里存储的对象进行json序列化,然后储存在Redis中,其中要使用到json序列化工具,SpringData Redis提供了json序列化工具类(JacksonJsonRedisSerializer<T>),使用过程中遇到了一点麻烦,参考网上的事例自己写了一个json序列化工具类,代码如下
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.SerializationException;
import org.springframework.util.Assert;
import org.springframework.util.StringUtils; import com.fasterxml.jackson.annotation.JsonTypeInfo.As;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectMapper.DefaultTyping; public class MyJacksonJsonRedisSerializer implements RedisSerializer<Object> { private final ObjectMapper mapper; public MyJacksonJsonRedisSerializer() {
this((String) null);
} public MyJacksonJsonRedisSerializer(String classPropertyTypeName) { this(new ObjectMapper()); if (StringUtils.hasText(classPropertyTypeName)) {
mapper.enableDefaultTypingAsProperty(DefaultTyping.NON_FINAL,
classPropertyTypeName);
} else {
mapper.enableDefaultTyping(DefaultTyping.NON_FINAL, As.PROPERTY);
}
} public MyJacksonJsonRedisSerializer(ObjectMapper mapper) { Assert.notNull(mapper, "ObjectMapper must not be null!");
this.mapper = mapper;
} @Override
public byte[] serialize(Object source) throws SerializationException { if (source == null) {
return new byte[0];
} try {
return mapper.writeValueAsBytes(source);
} catch (JsonProcessingException e) {
throw new SerializationException("Could not write JSON: "
+ e.getMessage(), e);
}
} @Override
public Object deserialize(byte[] source) throws SerializationException {
return deserialize(source, Object.class);
} public <T> T deserialize(byte[] source, Class<T> type)
throws SerializationException { Assert.notNull(
type,
"Deserialization type must not be null! Pleaes provide Object.class to make use of Jackson2 default typing."); if (source == null || source.length == 0) {
return null;
} try {
return mapper.readValue(source, type);
} catch (Exception ex) {
throw new SerializationException("Could not read JSON: "
+ ex.getMessage(), ex);
}
}
}
SpringData Redis的简单使用的更多相关文章
- redis 的简单命令
以下实例讲解了如何启动 redis 客户端: 启动 redis 客户端,打开终端并输入命令 redis-cli.该命令会连接本地的 redis 服务. $redis-cli redis > re ...
- Redis的简单了解以及主从复制
1.Redis的简单了解 Redis是一种高性能的分布式NoSql数据库,持久存储,高并发,数据类型丰富,通过现场申请内存空间,同时可以配置虚拟内存.五种数据类型:string(字符串,这种格式和me ...
- Redis主从复制简单介绍
由于本地环境的使用,所以搭建一个本地的Redis集群,本篇讲解Redis主从复制集群的搭建,使用的平台是Windows,搭建的思路和Linux上基本一致! (精读阅读本篇可能花费您15分钟,略读需5分 ...
- Redis 的简单运算
Redis 的简单运算 命令 说明 备注 incr key 在原字段上加 1 只能对整数操作 incrby key increment 在原字段上加上整数 (increment) 只能对整数操作 de ...
- python redis 实现简单的消息订阅
python + redis 实现简单的消息订阅 订阅端 import redis from functools import wraps class Subscribe: def __init__( ...
- springdata+redis配置详解
springdata设计初衷是位简化数据类型和数据的持久化存储,它并不局限是关系型数据库还是nosql数据库,都提供了简化的数据库连接,让数据获取变得更加的简单.所有这些的实现有统一的api提供. 本 ...
- Redis的简单动态字符串实现
Redis 没有直接使用 C 语言传统的字符串表示(以空字符结尾的字符数组,以下简称 C 字符串), 而是自己构建了一种名为简单动态字符串(simple dynamic string,sds)的抽象类 ...
- Redis——分布式简单使用
Redis简介:Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API. Redis安装:参考博客http://www ...
- Redis的简单介绍及在Windows下环境搭建
简单介绍 1,Redis是什么 最直接的还是看官方的定义吧. Redis is an open source (BSD licensed), in-memory data structure stor ...
随机推荐
- readelf命令
//查看文件头信息 readelf -h [file] //查看文件依赖的动态库 readelf -d [file] //查看文件中的符号 readelf -s [file]
- java 的 数字、汉字 和 字母 的所占字节长度 与 字符长度 (邮件限制50个汉字)
public static void main(String[] args) { String a = "餿餿餿餿餿z"; byte[] bytes = a.getBytes( ...
- 微信小程序与H5数据传递
这的场景是 小程序webview 加载 H5应用 需求点: 1. 小程序的登录code 需要与H5应用的sessionId建立绑定关系 2.H5内发起微信小程序支付,支付参数传递到小程序,支付结果传递 ...
- Win10安装Keras+Tensorflow+Opencv
Win10安装keras 安装 Anaconda 清华加速下载链接: https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 我选择的版本是: A ...
- android29之UI控件的抽屉式实现方法之一(DrawerLayout和NavigationView)
添加依赖 implementation 'com.google.android.material:material:1.2.0-alpha06' 在Layout中创建两个Xml布局文件,header. ...
- Delphi Unicode转中文
function UniCode2GB(S : String):String;Var I: Integer;beginI := Length(S);while I >=4 do begintry ...
- docker 概览 (1)
Docker Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化.容器是完全使 ...
- SVM家族(一)
SVM家族简史 故事要从20世纪50年代说起,1957年,一个叫做感知器的模型被提出, 1963年, Vapnikand Chervonenkis, 提出了最大间隔分类器,SVM诞生了. 1992年, ...
- 不停机还能替换代码?6年的 Java程序员表示不可思议
相信很多人都有这样一种感受,自己写的代码在开发.测试环境跑的稳得一笔,可一到线上就抽风,不是缺这个就是少那个反正就是一顿报错,而线上调试代码又很麻烦,让人头疼得很.不过, 阿里巴巴出了一款名叫Arth ...
- DEDE Fatal error: Maximum execution time of 30 seconds exceeded 致命 错误: 最大的 执行 时间 为 30 秒
刚安的DEDE 5.7 -SP1-GBK的 为何一登录后台点任何链接都显示超过30秒 后台假死 网上搜的方法一般都是更改执行时间上限,其目的是为了解决一些大的数据,真的需要30秒以上的执行时 ...