网站商城设计方案,wordpress下载安装是英文,怎么在土巴兔做网站,wordpress alwaysjedis jedispool Redistemplate 整理了之前学习 redis 的笔记#xff0c;强烈建议看最后总结。 在大型系统数据读请求中#xff0c;基本上90%都可以通过分布式缓存集群来抗下来#xff0c;而 Redis 又是分布式缓存集群的主要践行者#xff0c;因此了解 Redis 是必不可少的… jedis jedispool Redistemplate 整理了之前学习 redis 的笔记强烈建议看最后总结。 在大型系统数据读请求中基本上90%都可以通过分布式缓存集群来抗下来而 Redis 又是分布式缓存集群的主要践行者因此了解 Redis 是必不可少的技能。 在 javaWeb 中实现对 Redis 的操作主要有两种方式Jedis、RedisTemplate。 1、什么是 Jedis什么是 RedisTemplate Jedis 是 Redis 官方推荐的面向 Java 的操作Redis 的客户端通过jedis我们可以实现连接Redis以及操作 Redis 。 RedisTemplate 是 SpringDataRedis 中对JedisAp i的高度封装。SpringDataRedis 相对于 Jedis 来说可以方便地更换 Redis 的 Java客户端比 Jedis 多了自动管理连接池的特性方便与其他 Spring 框架进行搭配使用如SpringCache 2、Jedis 的使用了解 就像在学习 springmvc 框架之前学习 servlet 一样了解 jedis 的使用看一下单机中 Jedis 的使用首先要导入相关架包jedis.jar import redis.clients.jedis.Jedis;public class RedisJava { public static void main(String[] args) { //连接本地的 Redis 服务 Jedis jedis new Jedis(localhost); System.out.println(连接成功); //查看服务是否运行 System.out.println(服务正在运行: jedis.ping()); }} 编译以上 Java 程序确保驱动包的路径是正确的打印如下 连接成功服务正在运行: PONG redis 中最主要的就是读写数据。Redis 操作5大基本类型String、List、Hash、Set、SortedSe。t菜鸟教程中关于 Redis 操作 String 、List 等http://www.runoob.com/redis/redis-java.html 3、连接池 JedisPool为什么要用 JedisPool 首先我们如果每次使用缓存都生成一个 Jedis 对象的话这样意味着会建立很多 socket 连接造成系统资源被不可控调用甚至会导致奇怪错误的发生。 如果使用单例模式在线程安全模式下适应不了高并发的需求非线程安全模式又可能会出现与时间相关的错误。 因此为了避免这些问题引入了池的概念 JedisPool。JedissPool 是一个线程安全的网络连接池我们可以通过 JedisPool 创建和管理 Jedis 实例这样可以有效的解决以上问题以实现系统的高性能。 我们可以理解成项目中的数据库连接池例如阿里巴巴的 druid~ 直连和使用连接池的对比 优点缺点直连简单方便适用于少量长期连接的场景存在每次新建/关闭TCP开销资源无法控制存在连接泄露的可能Jedis对象线程不安全连接池Jedis预先生成降低开销连接池的形式保护和控制资源的使用相对于直连使用相对麻烦尤其在资源管理上需要很多参数来保证一旦规划不合理也会出现问题。4、如何创建 JedisPool 实例和 Jedis 实例对象 private static JedisPool pool null;if( pool null ){ JedisPoolConfig config new JedisPoolConfig(); 控制一个pool可分配多少个jedis实例通过pool.getResource()来获取 如果赋值为-1则表示不限制如果pool已经分配了maxActive个jedis实例则此时pool的状态为exhausted(耗尽)。 config.setMaxTotal(50); 控制一个pool最多有多少个状态为idle(空闲的)的jedis实例。 config.setMaxIdle(5); 表示当borrow(引入)一个jedis实例时最大的等待时间如果超过等待时间则直接抛出JedisConnectionException单位毫秒 小于零:阻塞不确定的时间, 默认-1 config.setMaxWaitMillis(1000*100); 在borrow(引入)一个jedis实例时是否提前进行validate操作如果为true则得到的jedis实例均是可用的 config.setTestOnBorrow(true); return 一个jedis实例给pool时是否检查连接可用性ping() config.setTestOnReturn(true); connectionTimeout 连接超时默认2000ms soTimeout 响应超时默认2000ms}获取实例public static Jedis getJedis() { return pool.getResource();}释放 redispublic static void returnResource(Jedis jedis) { if(jedis ! null) { jedis.close(); }} 5、JedisPool 属性配置JedisPoolConfig JedisPool的配置参数大部分是由JedisPoolConfig的对应项来赋值的。 6、再回头看 RedisTemplate 6.1、关于 RedisTemplate 通过最开始的简单概述我们了解到 SpringDataRedisRedisTemplate 相对于 Jedis 来说可以方便地更换 Redis 的 Java 客户端比 Jedis 多了自动管理连接池的特性方便与其他 Spring 框架进行搭配使用如SpringCache 或者可以理解成redisTemplate 是对 Jedis 的对 redis 操作的扩展有更多的操作 封装使操作更便捷。 6.2、如何使用 RedisTemplate 首先说一下序列化因为 redis 存储的数据必须要经过序列化处理。 那么你要知道 SDK 默认采用的序列化策略有两种一种是 String 的序列化策略一种是 JDK 的序列化策略。 在说如何使用之前再引申出来个 StringRedisTemplate…. 6.3、StringRedisTemplate 和 RedisTemplate 区别 通过上边我们清楚了 RedisTemplate 但是这个 StringRedisTemplate 又是个啥呢 其实作用是一样的 what 其实他们两者之间的区别主要在于他们使用的序列化类。 RedisTemplate 使用的是 JdkSerializationRedisSerializer JDK 序列化StringRedisTemplate 使用的是 StringRedisSerializerString 序列化 6.4、Redis 序列化String 序列化JDK 序列化 RedisTemplate RedisTemplate 使用的序列类在在操作数据的时候比如说存入数据会将数据先序列化成字节数组然后在存入 Redis 数据库这个时候打开 Redis 查看的时候你会看到你的数据不是以可读的形式展现的而是以字节数组显示类似下面 当然从Redis获取数据的时候也会默认将数据当做字节数组转化这样就会导致一个问题当需要获取的数据不是以字节数组存在 redis 当中而是正常的可读的字符串的时候比如说下面这种形式的数据:RedisTemplate就无法获取导数据这个时候获取到的值就是NULL。这个时候StringRedisTempate就派上了用场。 StringRedisTemplate当Redis当中的数据值是以可读的形式显示出来的时候只能使用StringRedisTemplate才能获取到里面的数据。所以当你使用RedisTemplate获取不到数据的时候请检查一下是不是Redis里面的数据是可读形式而非字节数组。 序列化总结当你的 redis 数据库里面本来存的是字符串数据或者你要存取的数据就是字符串类型数据的时候那么你就使用 StringRedisTemplate 即可但是如果你的数据是复杂的对象类型而取出的时候又不想做任何的数据转换直接从 Redis 里面取出一个对象那么使用RedisTemplate 是更好的选择。 7、本文总结 不太喜欢写长篇文章总感觉太长的篇幅自己都不喜欢看下去所以就此总结一下实战就放下一篇吧。 Jedis 是 Redis 官方推荐的面向 Java 操作 Redis 的客户端但在项目中使用 Jedis jedis new Jedis(xxx); 的操作有失大雅就好比还在用 servlet…同时用 JedisPool 来获得连接进行 get、set、del 等操作也相对简单但是需要注意的是存入 Redis 是需要序列化的至于选择哪种序列化需要自己抉择; 再说到 RedisTemplateSpring 针对 Redis 的使用封装了一个比较强大的 Template 在没有这个 Template 之前是使用 Jedis 直连进行相应的交互操作值得一提的是做这个封装的是 SpringData简单了解一下 SpringData Spring Data: Spring 的一个子项目。用于简化数据库访问支持NoSQL和关系数据库存储。其主要目标是使数据库的访问变得方便快捷。 Spring Data 项目所支持 NoSQL 存储 - - MongoDB文档数据库 - - Neo4j 图形数据库 - - Redis键/值存储 - - Hbase列族数据库 Spring Data 项目所支持的关系数据存储技术 - - JDBC - - JPA 从之前了解的 SpringDataJpa我们不难想象RedisTemplate 的使用也一定是非常简单的下一篇看一下项目中的应用。 最后来都来了左上角不关注一下吗。 如果文章有错的地方欢迎指正大家互相留言交流。习惯在微信看技术文章想要获取更多的Java资源的同学可以关注微信公众号niceyoo posted 2019-05-07 16:45 niceyoo 阅读(...) 评论(...) 编辑 收藏