java 中通过 Lettuce 来操作 Redis

spring-data-redis文档: https://docs.spring.io/spring-data/redis/docs/2.0.1.RELEASE/reference/html/#new-in-2.0.0
Redis 文档: https://redis.io/documentation
Redis 中文文档: http://www.redis.cn/commands.html

本文学习一下如何通过 Java 操作 Redis。

Java 操作 Redis 的库有两个,Jedis 和 Lettuce,目前 SpringBoot 2.x 中已经将 Jedis 换成了 Lettuce。

Lettuce 和 Jedis 的都是连接Redis Server的客户端程序。Jedis实现上是直连redis server,多线程环境下非线程安全,除非使用连接池,为每个Jedis实例增加物理连接Lettuce基于Netty的连接实例(StatefulRedisConnection),可以在多个线程间并发访问,且线程安全,满足多线程环境下的并发访问,同时它是可伸缩的设计,一个连接实例不够的情况也可以按需增加连接实例

本文直接从 Lettuce 来学习。

基本使用

1:添加依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope>
</dependency>

 

属性配置

在 application.properties 文件中配置如下内容

spring.redis.host=localhost
#spring.redis.password=battcn
# 连接超时时间(毫秒)
spring.redis.timeout=10000
# Redis默认情况下有16个分片,这里配置具体使用的分片,默认是0
spring.redis.database=0
# 连接池最大连接数(使用负值表示没有限制) 默认 8
spring.redis.lettuce.pool.max-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制) 默认 -1
spring.redis.lettuce.pool.max-wait=-1
# 连接池中的最大空闲连接 默认 8
spring.redis.lettuce.pool.max-idle=8
# 连接池中的最小空闲连接 默认 0
spring.redis.lettuce.pool.min-idle=0

 

 

 

实体类

创建一个User

private static final long serialVersionUID = 8655851615465363473L;
private Long id;
private String username;
private String password;public Users(Long id, String username, String password) {this.id = id;this.username = username;this.password = password;
}public static long getSerialVersionUID() {return serialVersionUID;
}public Long getId() {return id;
}public void setId(Long id) {this.id = id;
}public String getUsername() {return username;
}public void setUsername(String username) {this.username = username;
}public String getPassword() {return password;
}public void setPassword(String password) {this.password = password;
}@Override
public String toString() {return "Users{" +"id=" + id +", username='" + username + '\'' +", password='" + password + '\'' +'}';
}

 

 

 

新建RedisCacheAutoConfiguration配置类

默认情况下的模板只能支持RedisTemplate<String, String>,也就是只能存入字符串,这在开发中是不友好的,所以自定义模板是很有必要的,当自定义了模板又想使用String存储这时候就可以使用StringRedisTemplate的方式,它们并不冲突

@Configuration
@AutoConfigureAfter(RedisAutoConfiguration.class)
public class RedisCacheAutoConfiguration {@Beanpublic RedisTemplate<String, Serializable> redisCacheTemplate(LettuceConnectionFactory redisConnectionFactory) {RedisTemplate<String, Serializable> template = new RedisTemplate<>();template.setKeySerializer(new StringRedisSerializer());template.setValueSerializer(new GenericJackson2JsonRedisSerializer());template.setConnectionFactory(redisConnectionFactory);return template;}
}

 

 

 

 

新建一个SpringbootRedisDemoApplicationTests类测试

private static final Logger log = LoggerFactory.getLogger(SpringbootRedisDemoApplicationTests.class);@Autowired
private StringRedisTemplate stringRedisTemplate;@Autowired
private RedisTemplate<String, Serializable> redisCacheTemplate;@PostMapping
public void get() {ExecutorService executorService = Executors.newFixedThreadPool(8888);IntStream.range(0, 8888).forEach(i ->executorService.execute(() -> stringRedisTemplate.opsForValue().increment("dd", 1)));stringRedisTemplate.opsForValue().set("flag", "好");final String a = stringRedisTemplate.opsForValue().get("flag");log.info("[字符缓存结果] - [{}]", a);String key = "opsForValue:user:1";redisCacheTemplate.opsForValue().set(key, new Users(99L, "小王", "18"));final Users user = (Users) redisCacheTemplate.opsForValue().get(key);System.out.println(user + "*****");log.info("[对象缓存结果] - [{}]", user);
}

 

用postman发起请求

 

客户端工具显示效果

 

下列的就是Redis其它类型所对应的操作方式

  • opsForValue: 对应 String(字符串)
  • opsForZSet: 对应 ZSet(有序集合)
  • opsForHash: 对应 Hash(哈希)
  • opsForList: 对应 List(列表)
  • opsForSet: 对应 Set(集合)
  • opsForGeo: 对应 GEO(地理位置)

 

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/271732.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电脑选购:看完才明白,一体机和台式机电脑哪个好?

目录 一、空间占用 二、硬件与性能 三、扩展性 四、可维护性 五、移动性 六、一体机和台式机在需求上有什么区别 这里说的一体机和台式机指的是电脑&#xff0c;一体机&#xff0c;顾名思义&#xff0c;就是屏幕和主机集成在一起&#xff0c;更加一体化。台式机分为主机和机箱&…

linux子系统 重置,浅析win10系统重置Linux子系统的设置方法

今天小编给大家浅析win10系统重置Linux子系统的设置方法&#xff0c;重置Linux子系统后&#xff0c;我们就可从头配置Linux子系统&#xff0c;例如新建用户、设置密码&#xff0c;并在里面安装我们需要的应用程序等&#xff0c;有需要的用户&#xff0c;请来看看如何重置吧。Wi…

硬件:那些安装8G、16G以及32G内存电脑的区别介绍

❤️作者主页&#xff1a;IT技术分享社区 ❤️作者简介&#xff1a;大家好,我是IT技术分享社区的博主&#xff0c;从事C#、Java开发九年&#xff0c;对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️个人荣誉&#xff1a; 数据库领域优质创作者&#x1f3c6;&#x…

Windows系统下安装分布式事务组件Seata

1:github上下载seata安装包 地址为https://github.com/seata/seata/releases/tag/v1.2.0 2:启动seata 点击seata-server.bat脚本文件 启动后入下图所示 3:测试seata是否启动 通过jcmd&#xff0c;可以找到Seata进程

linux应用程序文件丢失,详谈Ubuntu软件管理丢失的功能

多数人都认为Ubuntu通过Ubuntu Software Center彻底改革了dpkg包管理。毫无疑问&#xff0c;按照多数人标准来看&#xff0c;Software Center肯定是用户友好的呢。但事实真是如此么&#xff1f;本文将介绍Ubuntu软件管理的现状&#xff0c;伴随着Ubuntu首次发布的软件管理走了多…

硬件基础:电脑当中各个硬件的作用介绍

❤️作者主页&#xff1a;IT技术分享社区 ❤️作者简介&#xff1a;大家好,我是IT技术分享社区的博主&#xff0c;从事C#、Java开发九年&#xff0c;对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️个人荣誉&#xff1a; 数据库领域优质创作者&#x1f3c6;&#x…

win8 linux分区工具,Ubuntu下挂载Win8磁盘分区

最近装了个Ubuntu系统&#xff0c;但是一番折腾后发现除了分给Ubuntu的磁盘分区外其他的Win8下磁盘分区都无法访问&#xff0c;在网上找了很多解决方案&#xff0c;但都无法最终解决。经过查阅资料&#xff0c;终于将问题迎刃而解。问题描述&#xff1a;Ubuntu系统下挂载Win8磁…

办公技巧:常用的100个Word快捷键

Word是日常办公和生活的最常用的文字处理软件&#xff0c;大到工作中文章的撰写&#xff0c;小到日常生活中点点滴滴的记录&#xff0c;都离不开Word。在使用Word的时候&#xff0c;快捷键的使用&#xff0c;可以大大提升文字处理的速度。Word的快捷键中&#xff0c;下面这些是…

linux读取目录列表失败,[linux]解决vsftpd 读取目录列表失败的问题

使用第三方FTP软件filezilla进行登陆&#xff0c;出现如下错误&#xff1a;状态: 正在连接 192.168.1.6:21...状态: 连接建立&#xff0c;等待欢迎消息...响应: 220 (vsFTPd 2.2.2)命令: USER ftp响应: 331 Please specify the password.命令: PASS ***响应:…

Win10优化:系统文件Hiberfil.sys介绍

目录 一、Hiberfil.sys介绍 二、删除Hiberfil.sys文件的步骤 1、如何找到Hiberfil.sys 2、通过管理员权限的cmd命令&#xff08;注意要以管理员的身份运行&#xff09; 一、Hiberfil.sys介绍 Hiberfil.sys文件位于系统盘的根目录下&#xff0c;它是 win10 休眠功能&#xff08;…

工作区和暂存区

Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念。 先来看名词解释。 工作区&#xff08;Working Directory&#xff09; 就是你在电脑里能看到的目录&#xff0c;比如我的learngit文件夹就是一个工作区&#xff1a; 版本库&#xff08;Repository&#xff09; 工…

后端:Layui实现文件上传功能

今天给大家分享采用AspNet MVC前端框架LayUi实现文件上传功能&#xff0c;感兴趣的朋友可以学习一下。文件上传实体&#xff08;UploadFile.cs&#xff09;public class UploadFile{public int code { get; set; } //请求codepublic string msg { get; set; } // 请求消息pub…

linux arp 防火墙关闭,如何关闭ARP防火墙

360安全卫士和QQ电脑管家都提供了ARP防火墙&#xff0c;但该功能对于家庭用户没有任何意义.那么该如何关闭它呢?下面是学习啦小编收集整理的如何关闭ARP防火墙&#xff0c;希望对大家有帮助~~关闭ARP防火墙的方法工具/原料360安全卫士QQ电脑管家如何关闭360安全卫士的ARP防火墙…

复习知识点:UITableView和UICollectionView的常用属性

UITableView UICollectionView //UICollectionViewLayout //UICollectionViewLayout决定了UICollectionView如何显示在界面上&#xff0c;Apple提供了一个最简单的默认layout对象&#xff1a;UICollectionViewFlowLayout。 //Flow Layout是一个Cells的线性布局方案&#xff0c;…

ASP.NET+MVC+使用+Log4net+记录日志笔记

前言&#xff1a;记录系统中的日志&#xff0c;是一个好的项目产品必备的一个环节。每一个产品最终的目的都是要交予客户使用&#xff0c;因为程序员代码的开发水平参差不齐&#xff0c;Bug就成为了项目运维成本最大的因素之一。如何降低项目运维的成本呢&#xff0c;最重要的是…

数据库:SQLServer中with as 用法笔记

一、with as 概念介绍with as 也叫做子查询部分&#xff08;subquery factoring&#xff09;&#xff0c;可以定义一个SQL段落&#xff0c;该SQL段落可以被整个SQL语句所用到类似于临时表的作用。with as 可以提高你的SQL语句的可读性&#xff0c;也有可以用在在UNION ALL的不同…

数据库优化:SqlServer的with(nolock)关键字的用法介绍

一、with(nolock)的介绍数据库写查询语句的时候,为了提升查询性能,往往会在查询的表后面加一个nolock,或者是with(nolock),其目的就是查询的时候是不锁定表,从而提高查询速度的目的。但如果同一时间有多个用户访问同一资源的时候&#xff0c;如果并发用户对该资源做了修改。则会…

linux /root /etc,Linux知识:/root/.bashrc与/etc/profile的异同

要搞清bashrc与profile的区别&#xff0c;首先要弄明白什么是交互式shell和非交互式shell&#xff0c;什么是login shell 和non-login shell。交互式模式就是shell等待你的输入&#xff0c;并且执行你提交的命令。这种模式被称作交互式是因为shell与用户进行交互。这种模式也是…

java多线程售票例子

代码如下: public class Ticket1 implements Runnable {private int tickets 100;Overridepublic void run() {while (tickets > 0) {synchronized (Ticket.class) {if (tickets > 0) {tickets--;System.out.println(Thread.currentThread().getName() "正在卖票&…

推荐一款免费国产远程办公神器ToDesk,TeamViewer完美替代品

对于从事IT行业的人员来说&#xff0c;远程软件基本上是必备的软件。之前使用用TeamViewer远程办公软件&#xff0c;它的稳定性、延迟低、功能齐全很受广大开发者的欢迎。唯一美中不足的是它是一款商业软件。费用比较高。到现在基本上所有破解工具都无效了。所以不得不放弃这款…