Redis是一种nosql数据库,在开发中常用做缓存。Jedis是redis在Java中的redis- client.建立Maven Project之后,在POM.xml中

  1. 添加jedis和spring-data-redis的依赖如下:
    <dependency>  <groupId>redis.clients</groupId>  <artifactId>jedis</artifactId>  <version>2.0.0</version>  <type>jar</type>  <scope>compile</scope>  </dependency>  <!-- spring-redis -->  <dependency>  <groupId>org.springframework.data</groupId>  <artifactId>spring-data-redis</artifactId>  <version>1.0.0.RELEASE</version>  </dependency>
  1. Redis连接数据库参数如下:applicationContext-redis.properties
    #redis config  redis.pool.maxActive=100  redis.pool.maxIdle=20  redis.pool.maxWait=1000  redis.pool.testOnBorrow=true  redis.hostname=localhost  redis.port=6379  redis.password=
  1. 在上下文配置中使用key-value读取方式读取properties中的值:
    <!-- Jedis 连接池配置-->  <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">  <property name="maxActive" value="${redis.pool.maxActive}" />  <property name="maxIdle" value="${redis.pool.maxIdle}" />  <property name="maxWait" value="${redis.pool.maxWait}" />  <property name="testOnBorrow" value="${redis.pool.testOnBorrow}" />  </bean>  <!-- Jedis ConnectionFactory 数据库连接配置-->  <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">  <property name="hostName" value="${redis.hostname}" />  <property name="port" value="${redis.port}" />  <property name="password" value="${redis.password}" />  <property name="poolConfig" ref="jedisPoolConfig" />  </bean>  <!—- redisTemplate配置,redisTemplate是对Jedis的对redis操作的扩展,有更多的操作,封装使操作更便捷 -->   <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"                                   p:connection-factory-ref="jedisConnectionFactory" />
  1. 上面redisTemplate已经基本配置完成。接下来创建User类,必须实现或者间接实现Serializable接口:
    Redis存储对象是使用序列化,spring-data-redis已经将序列化的功能内置,不需要我们去管,我们只需要调用api就可以使用。SerialVersionUID字段对序列化扩展有用,为了以后扩展或者缩减字段时不会造成反序列化出错。
  2. 注解注入RedisTemplate
public class RedisTemplateTest {@SuppressWarnings("rawtypes")@Autowiredprivate RedisTemplate redisTemplate;@SuppressWarnings("unchecked")public void findAll() {// -----------------String类型数据操作 start--------------------ValueOperations<String, String> stringOperations = redisTemplate.opsForValue();// String类型数据存储,不设置过期时间,永久性保存stringOperations.set("string1", "fiala");// String类型数据存储,设置过期时间为80秒,采用TimeUnit控制时间单位stringOperations.set("string2", "fiala", 80, TimeUnit.SECONDS);// 判断key值是否存在,存在则不存储,不存在则存储stringOperations.setIfAbsent("string1", "my fiala");stringOperations.setIfAbsent("string3", "my fiala");String value1 = stringOperations.get("string1");String value2 = stringOperations.get("string3");System.out.println(value1);System.out.println(value2);// -----------------String类型数据操作 end--------------------// -----------------其他值类型数据操作 start--------------------Demo demo = new Demo();demo.setId("1");demo.setName("fiala");List<Demo> demos = new ArrayList<Demo>();ValueOperations<String, Object> valueOperations = redisTemplate.opsForValue();// 设置value为对象类型,且不设置过期时间,默认永久valueOperations.set("value1", demo);// 设置value为对象类型,设置过期时间为80秒,时间单位由TimeUnit控制valueOperations.set("value2", demos, 80, TimeUnit.SECONDS);Demo demo1 = (Demo) valueOperations.get("value1");System.out.println(demo1.toString());// -----------------其他值类型数据操作 end--------------------// -----------------List数据类型操作 start------------------ListOperations<String, Object> listOperations = redisTemplate.opsForList();for (int i = 0; i < 5; i++) {Demo listDemo = new Demo();listDemo.setId("\"" + i + "\"");listDemo.setName("fiala" + i);listOperations.leftPush("list1", listDemo);listOperations.rightPush("list2", listDemo);}// 可给数据排序Demo demo2 = (Demo) listOperations.leftPop("list1");Demo demo3 = (Demo) listOperations.rightPop("list2");System.out.println(demo2.toString());System.out.println(demo3.toString());// -----------------List数据类型操作 end------------------// -----------------set数据类型操作 start------------------SetOperations<String, Object> setOperations = redisTemplate.opsForSet();for (int i = 0; i < 5; i++) {Demo setDemo = new Demo();setDemo.setId("\"" + i + "\"");setDemo.setName("fiala" + i);setOperations.add("set1", setDemo);}Demo demo4 = (Demo) setOperations.pop("set1");System.out.println(demo4.toString());// -----------------set数据类型操作 end------------------// -----------------zset数据类型操作 start------------------ZSetOperations<String, Object> zSetOperations = redisTemplate.opsForZSet();zSetOperations.add("zset", "fiala", 0);zSetOperations.add("zset", "my fiala", 1);System.out.println(zSetOperations.rangeByScore("zset", 0, 1));// -----------------zset数据类型操作 end------------------// -----------------hash数据类型操作 start------------------HashOperations<String, Object, Object> hashOperations = redisTemplate.opsForHash();Map<String, String> map = new HashMap<String, String>();map.put("map1", "fiala1");map.put("map2", "fiala2");hashOperations.putAll("hash", map);System.out.println(hashOperations.entries("hash"));// -----------------hash数据类型操作 start------------------}
}

附: 大部分的用户都喜欢用RedisTemplate,它相应的包是org.springframework.data.redis.core。该模板实际是Redis模块的核心类,因为它的功能丰富。模板为Redis交互提供了高级抽象。虽然RedisConnection提供接受和返回二进制值(字节数组)的低级方法,但该模板可以处理序列化和连接管理,使得用户不需要处理太多的细节。
此外,模板提供了操作视图(按照Redis命令参考分组),它们提供了丰富的、现成的接口用于对特定类型或者特定键的操作(通过KeyBound接口),如下所述:

接口 描述
Key类型操作
ValueOperations 操作Redis String(或者Value)类型数据
ListOperations 操作Redis List类型数据
SetOperations 操作Redis Set类型数据
ZSetOperations操作 Redis ZSet(或者Sorted Set)类型数据
HashOperations 操作Redis Hash类型数据
HyperLogLogOperations 操作Redis HyperLogLog类型数据,比如:pfadd,pfcount,…
GeoOperations 操作Redis Geospatial类型数据,比如:GEOADD,GEORADIUS,…​)
Key绑定操作
BoundValueOperations Redis字符串(或值)键绑定操作
BoundListOperations Redis列表键绑定操作
BoundSetOperations Redis Set键绑定操作
BoundZSetOperations Redis ZSet(或Sorted Set)键绑定操作
BoundHashOperations Redis Hash键绑定操作
BoundGeoOperations Redis Geospatial 键绑定操作

一旦经过配置,该模板就是线程安全的,它可以被多个实例重复使用。
开箱即用,RedisTemplate使用了基于Java的串行器来进行大部分的操作。这就意味着,任何对象通过模板的读写都会通过Java来进行序列化/反序列化。该模板的序列化机制改变起来也很容易,并且Redis模块在org.springframework.data.redis.serializer包中提供了多种可用的实现,详情请参考Serializers。你也可以通过设置enableDefaultSerializer属性为false,将其他的序列化实现都设置成null,并将RedisTemplate和原生的字节数组一起使用。注意该模板的key不允许为null值,除非底层序列化程序可以接受。获取更多序列化器的信息,请阅读javadoc。
使用实例:
上面是官网上介绍的大概的功能,RedisTemplate提供了很多方法,详细具体的方法请参考官网:http://docs.spring.io/spring-data/redis/docs/current/api/org/springframework/data/redis/core/RedisTemplate.html。

使用Spring-Data-Redis存储对象(redisTemplate)相关推荐

  1. spring mvc Spring Data Redis RedisTemplate [转]

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

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

    转载自  一文搞定 Spring Data Redis 详解及实战 SDR - Spring Data Redis的简称. Spring Data Redis提供了从Spring应用程序轻松配置和访问 ...

  3. Spring Data Redis 实践

    前言 Spring Data Redis是Spring Data大家族的一部分,提供了基于spring应用的简易配置与redis服务访问,它为存储与交互提供了低级(low-level)和高级的(hig ...

  4. Spring Data Redis存储库

    8. Redis存储库 使用Redis存储库允许在Redis哈希中无缝地转换和存储域对象,应用自定义映射策略并利用二级索引. Redis存储库至少需要Redis Server 2.8.0版. 8.1. ...

  5. Spring认证中国教育管理中心-Spring Data Redis框架教程三

    原标题:Spring认证中国教育管理中心-Spring Data Redis框架教程三 10.15.支持类 Packageorg.springframework.data.redis.support提 ...

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

    2019独角兽企业重金招聘Python工程师标准>>> 把 Redis 当作数据库的用例 现在我们来看看在服务器端 Java 企业版系统中把 Redis 当作数据库的各种用法吧.无论 ...

  7. Spring Data Redis学海拾贝

    简介: Redis redis是一款开源的Key-Value数据库,运行在内存中,由ANSI C编写.企业开发通常采用Redis来实现缓存.同类的产品还有memcache .memcached .Mo ...

  8. Spring Data Redis 多源

    完整代码:Ciiiiing/springboot_multi_redis 最近需要在同一个项目中访问多个 redis 而 spring data redis 默认是只支持一个数据源的,那就需要我们自己 ...

  9. 使用Spring Data Redis操作Redis(集群版)

    说明:请注意Spring Data Redis的版本以及Spring的版本!最新版本的Spring Data Redis已经去除Jedis的依赖包,需要自行引入,这个是个坑点.并且会与一些低版本的Sp ...

  10. Redis - Spring Data Redis 操作 Jedis 、Lettuce 、 Redisson

    文章目录 官网 Jedis VS Lettuce Jedis Code POM依赖 配置文件 配置类 单元测试 Lettuce Code Redisson Code POM依赖 配置文件 配置类 单元 ...

最新文章

  1. 信息安全系统设计基础第五周学习总结
  2. JDK动态代理和CGLIB代理的区别
  3. Vue04 -- 计算属性用法(v-for的筛选排序)
  4. 项目受源代码管理。向源代码管理注册此项目时出错。建议不要对此项目进行任何更改...
  5. linux之nautilus .命令浏览当前文件目录
  6. word2vec原理_word2vec论文阅读笔记
  7. c++ primer 函数传值1
  8. vue 给标签添加data属性_在Vue中获取自定义属性方法:data-id的实例
  9. Android OMX介绍(总括)
  10. Kmeans算法解析(非常详细)
  11. 美团团购订单系统优化记
  12. 联想笔记本重装系统声卡驱动未安装报错代码28,声音图标显示红叉没有声音
  13. 计算机基础知识vf试题及答案,2016年计算机二级考试《VF》上机试题及答案(1)
  14. 从零开始学习C语言 Day 036
  15. 记一次天池比赛 - 性能挑战赛道
  16. C语言谭浩强第三版第九章例题及课后题:预处理命令
  17. 实体中list属性为空或者null,设置为空数组
  18. Task Office for Mac(GTD办公软件)
  19. 高中数学必修五:数列压轴小题秒杀技巧
  20. 提供家用咖啡电子秤厨房秤方案芯片CS1238

热门文章

  1. python数组和链表的区别_数组和链表的区别 - toddler的个人空间 - OSCHINA - 中文开源技术交流社区...
  2. 通达信交易接口实现海龟交易法则核心策略分享
  3. 一文带你了解XP和Scrum
  4. “网络草根”月赚3000的十种方法
  5. Linux命令之useradd命令
  6. 参考文献引用网页怎么标注 ?
  7. 解决node.js-opensslErrorStack: [ ‘error:03000086:digital envelope routines::initialization error‘ ]错误
  8. java项目获取根目录_获取java项目的根目录
  9. 深信服李新:企业数字化转型一定是“一把手”工程 | 2020全球数字价值峰会
  10. js中 获取当前 年月日 时分秒