java-redis

1.Jedis

  1.1 依赖引用

<dependency>
   <groupId>redis.clients</groupId>
   <artifactId>jedis</artifactId>
   <version>4.3.1</version>
</dependency>

  1.2 测试代码

@RestController
public class TestController {@GetMapping("jedis")public String redis() {Jedis jedis = new Jedis("192.168.2.17", 6379);jedis.set("k1", "v1");return "";}
}

2.lettuce

  2.1 依赖引用

<parent>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-parent</artifactId>
   <version>2.6.10</version>
   <relativePath/> <!-- lookup parent from repository -->
</parent>

<dependency>
   <groupId>io.lettuce</groupId>
   <artifactId>lettuce-core</artifactId>
   <version>6.2.1.RELEASE</version>
</dependency>

  2.2 测试代码

StringBuffer sb = new StringBuffer();sb.append("123456");RedisURI uri = RedisURI.builder().redis("192.168.2.17").withPort(6379).withPassword(sb).build();//创建连接客户端
RedisClient redisClient = RedisClient.create(uri);
StatefulRedisConnection connection = redisClient.connect(); 
RedisCommands commands = connection.sync(); 
commands.set("k2", "v2"); 
Object k2 = commands.get("k2"); 
connection.close();
redisClient.shutdown();

3.RedisTemplate单机

  31. 依赖引用

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
</dependency>

  3.2 配置

application.properties

spring.redis.host=192.168.2.17
spring.redis.port=6379
spring.redis.password=123456
spring.redis.lettuce.pool.max-active=8
spring.redis.1ettuce.pool.max-wait=-1ms
spring.redis.1ettuce.pool.max-idle=8
spring.redis.lettuce.pool.min-idle=0

  3.3 修改默认序列

@Configuration
public class RedisConfig {/*** *redis序列化的工具定置类,下面这个请一定开启配置* *127.0.0.1:6379> keys ** *1) “ord:102” 序列化过* *2)“\xaclxedlxeelx05tixeelaord:102” 野生,没有序列化过* *this.redisTemplate.opsForValue(); //提供了操作string类型的所有方法* *this.redisTemplate.opsForList();// 提供了操作List类型的所有方法* *this.redisTemplate.opsForset(); //提供了操作set类型的所有方法* *this.redisTemplate.opsForHash(); //提供了操作hash类型的所有方认* *this.redisTemplate.opsForZSet(); //提供了操作zset类型的所有方法* param LettuceConnectionFactory* return*/@Beanpublic RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory lettuceConnectionFactory) {RedisTemplate<String,Object> redisTemplate = new RedisTemplate<>();redisTemplate.setConnectionFactory(lettuceConnectionFactory);// 设置key序列化方式stringredisTemplate.setKeySerializer(new StringRedisSerializer());// 设置value的序列化方式json,使用GenericJackson2JsonRedisSerializer替换默认序列化redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());redisTemplate.setHashKeySerializer(new StringRedisSerializer());redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());redisTemplate.afterPropertiesSet();return redisTemplate;}
}

    3.4 测试代码

@RestController
public class TestController {public TestController(RedisTemplate redisTemplate) {this.redisTemplate = redisTemplate;}private RedisTemplate redisTemplate;@GetMapping("jedis")public String redis() {this.redisTemplate.opsForValue().set("k3", "v3");Object k3 = this.redisTemplate.opsForValue().get("k3");return "k2" + k3;}
}

4.RedisTemplate集群

5.RedisTemplate常用的数据类型

  4.1 String

    1.判断是否有key所对应的值,有则返回true,没有则返回false

redisTemplate.hasKey(key)

    2.有则取出key值所对应的值

redisTemplate.opsForValue().get(key)

    3.删除单个key值

redisTemplate.delete(key)

    4.批量删除key

redisTemplate.delete(keys) //其中keys:Collection<K> keys

    5.将当前传入的key值序列化为byte[]类型

redisTemplate.dump(key)

    6.设置过期时间

public Boolean expire(String key, long timeout, TimeUnit unit) {return redisTemplate.expire(key, timeout, unit);
}
public Boolean expireAt(String key, Date date) {return redisTemplate.expireAt(key, date);
}

    7.查找匹配的key值,返回一个Set集合类型

public Set<String> getPatternKey(String pattern) {return redisTemplate.keys(pattern);
}

    8.修改redis中key的名称

 public void renameKey(String oldKey, String newKey) {redisTemplate.rename(oldKey, newKey);
}

    9.返回传入key所存储的值的类型

public DataType getKeyType(String key) {return redisTemplate.type(key);
}

    10.返回当前key所对应的剩余过期时间

public Long getExpire(String key) {return redisTemplate.getExpire(key);
}

    11.返回剩余过期时间并且指定时间单位

public Long getExpire(String key, TimeUnit unit) {return redisTemplate.getExpire(key, unit);
}

    12.

  4.2 Hash

  4.3 List

  4.4 Set

  4.5 ZSet

  4.6 Sorted Set

6.Lua脚本

  6.1 语法

eval script numkeys [key1 key2] [value1 value2]

String lua = "if redis.call('get',KEYS[1]) == ARGV[1] then " +"return redis.call('del',KEYS[1]) " +"else " +"return 0 " +"end";
this.stringRedisTemplate.execute(new DefaultRedisScript<>(lua, Long.class), Arrays.asList(key),"123466");

  6.2 基础的

eval "return 'hello lua'" 0

  6.3 Set

 eval "redis.call('set','k1','v1') redis.call('expire','k1',30) return redis.call('get','k1')" 0

  6.4 参数

eval "return redis.call('mset',KEYS[1],ARGV[1],KEYS[2],ARGV[2])" 2 k1 k2 v1 v2

  6.5 条件if

eval "if redis.call('get',KEYS[1]) == ARGV[1] then return redis.call('del',KEYS[1]) else return 0 end" 1 lock 666

  6.6 

7.Redisson

  7.1 官网地址

https://redisson.org/

  7.2 依赖引用

<dependency>
   <groupId>org.redisson</groupId>
   <artifactId>redisson</artifactId>
   <version>3.23.2</version>
</dependency> 

  7.3 配置文件

        redisson-single.yml

singleServerConfig:
  address: "redis://192.168.2.17:6379"
  password: "123456"
  database: 0

  7.4 Config代码

@Bean
public Redisson session() throws IOException {Config config = Config.fromYAML(new ClassPathResource("redisson-single.yml").getInputStream());//重置续命时间
// config.setLockWatchdogTimeout(1000L);RedissonClient redissonClient = Redisson.create(config);return (Redisson)redissonClient;
}

  7.5 测试代码

public String set1() {Lock redisDistributedLock = new RedisDistributedLock(this.redisTemplate, "RedisLock");redisDistributedLock.lock();try {//减库存String result = this.redisTemplate.opsForValue().get(key2);Integer qty = Integer.parseInt(result);if (qty > 0) {this.redisTemplate.opsForValue().set(this.key2, String.valueOf(--qty));reMessage = "成功卖出一个商品,剩余数量:" + qty;System.out.println(reMessage + "\t" + "服务端口号");} else {reMessage = "商品卖完了";}} finally {redisDistributedLock.unlock();}return reMessage;
}

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

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

相关文章

〖Python网络爬虫实战㉝〗- aiohttp 的基本使用

订阅:新手可以订阅我的其他专栏。免费阶段订阅量1000+python项目实战 Python编程基础教程系列(零基础小白搬砖逆袭) 说明:本专栏持续更新中,订阅本专栏前必读关于专栏〖Python网络爬虫实战〗转为付费专栏的订阅说明作者:爱吃饼干的小白鼠。Python领域优质创作者,2022年度…

二次开发了个寂寞之HttpRunnerManager接口测试管理平台

文章目录 一、背景1、二次开发1.1、首页1.2、项目列表1.3、用例列表1.4、新增用例1.5、测试套件1.6、查看报告 二、总结 一、背景 自入职起&#xff0c;就在公司内部引入开源接口测试平台&#xff0c;选一个大家勉强看得懂源码的开源项目&#xff0c;方便后续的二次开发&#x…

数据量特别大,自己手写虚拟dom节点展示数据。

当数据量特别大时&#xff0c;一次性全部展示出所有数据&#xff0c;会造成页面渲染慢&#xff0c;白屏&#xff0c;卡顿的现象。严重影响体验。为解决这样的问题&#xff0c;可以尝试使用虚拟加载dom节点的方式。 原理&#xff1a;根据屏幕高度和一条数据展示所需要的dom节点…

【每日一题】—— C. Mocha and Hiking(Codeforces Round 738 (Div. 2))

&#x1f30f;博客主页&#xff1a;PH_modest的博客主页 &#x1f6a9;当前专栏&#xff1a;每日一题 &#x1f48c;其他专栏&#xff1a; &#x1f534; 每日反刍 &#x1f7e1; C跬步积累 &#x1f7e2; C语言跬步积累 &#x1f308;座右铭&#xff1a;广积粮&#xff0c;缓称…

Kotlin~Visitor访问者模式

概念 将数据结构和操作分离&#xff0c;使操作集合可以独立于数据结构变化。 角色介绍 Visitor&#xff1a;抽象访问者&#xff0c;为对象结构每个具体元素类声明一个访问操作。Element&#xff1a;抽象元素&#xff0c;定义一个accept方法ConcreteElement&#xff1a;具体元…

docker 资源限制

目录 1、CPU使用率 2、CPU共享比例 3、CPU周期限制 4、CPU核心限制 5、CPU 配额控制参数的混合案例 6、内存限制 7、Block IO 的限制 8、限制bps 和iops docker资源限制 Docker容器技术底层是通过Cgroup&#xff08;Control Group 控制组&#xff09;实现容器对物理资…

Android 性能调优之bitmap的优化

背景 Android开发中&#xff0c;加载图片过多、过大很容易引起OutOfMemoryError异常&#xff0c;即我们常见的内存溢出。因为Android对单个应用施加内存限制&#xff0c;默认分配的内存只有几M&#xff08;具体视不同系统而定&#xff09;。而载入的图片如果是JPG之类的压缩格…

【unity】Pico VR 开发笔记(视角移动)

【unity】Pico VR 开发笔记&#xff08;视角移动&#xff09; 视角移动是简单的基础功能&#xff0c;这里区别于头显定位获得的小范围位移&#xff0c;是长距离不影响安全边界的位移方式。的常见的位移方式有两种&#xff0c;其一是触发后瞬间传送到指定位置&#xff0c;其次是…

flutter开发实战-BackdropFilter高斯模糊子Widget控件

flutter开发实战-BackdropFilter高斯模糊子Widget。 最近开发过程中遇到需要将控件进行模糊&#xff0c;比如iOS的effect的模糊效果。那在flutter中就需要用到了BackdropFilter 一、BackdropFilter BackdropFilter属性定义 BackdropFilter({Key key, required ImageFilter …

微服务---介绍

目录 1.微服务架构5个核心问题 2.微服务架构实现方案 3.微服务架构更多的是架构思想 4.学习微服务的意义 5.微服务架构一般采用 6.服务器有三种类型 1.微服务架构5个核心问题 &#xff08;解决这些问题都是依托于中间件&#xff0c;学微服务也是学这些中间件&#xff09;…

【C++】总结10--C++11第二篇

文章目录 RAIIC11新特性 RAII RAII&#xff08;Resource Acquisition Is Initialization&#xff09;是一种利用对象生命周期来控制程序资源&#xff08;如内存、文件句柄、网络连接、互斥量等&#xff09;的简单技术&#xff0c;在对象的构造函数中获取资源&#xff0c;在对象…

深度学习torch基础知识

torch. detach()拼接函数torch.stack()torch.nn.DataParallel()np.clip()torch.linspace()PyTorch中tensor.repeat()pytorch索引查找 index_select detach() detach是截断反向传播的梯度流 将某个node变成不需要梯度的Varibale。因此当反向传播经过这个node时&#xff0c;梯度…

IDEA用Gradle构建项目时,lombok插件无效的解决办法

Lombok 可用来帮助开发人员消除 Java 的重复代码&#xff0c;尤其是对于简单的 Java 对象&#xff08;POJO&#xff09;&#xff0c;比如说getter/setter/toString等方法的编写。它通过注解实现这一目的。 正确使用姿势 一、安装Lombok插件 菜单栏File -> Settings ->…

死锁的发生原因和怎么避免

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 例如&#xff1a;项目场景&#xff1a;示例:通过蓝牙芯片(HC-05)与手机 APP 通信&#xff0c;每隔 5s 传输一批传感器数据(不是很大) 问题描述 死锁&#xff0c;简单来说就是两个或者两个以上的线程在…

翻转卡片游戏(力扣)

题目 在桌子上有 n 张卡片&#xff0c;每张卡片的正面和背面都写着一个正数&#xff08;正面与背面上的数有可能不一样&#xff09;。 我们可以先翻转任意张卡片&#xff0c;然后选择其中一张卡片。 如果选中的那张卡片背面的数字 x 与任意一张卡片的正面的数字都不同&#…

【C语言进阶】数据的存储----整型篇

​ &#x1f341; 博客主页:江池俊的博客 &#x1f4ab;收录专栏&#xff1a;C语言——探索高效编程的基石 &#x1f4bb; 其他专栏&#xff1a;数据结构探索 ​&#x1f4a1;代码仓库&#xff1a;江池俊的代码仓库 &#x1f3aa; 社区&#xff1a;GeekHub &#x1f341; 如果觉…

洛谷P1525 关押罪犯(种类并查集)

S 城现有两座监狱&#xff0c;一共关押着 $N$ 名罪犯&#xff0c;编号分别为 $1-N$ 。他们之间的关系自然也极不和谐。很多罪犯之间甚至积怨已久&#xff0c;如果客观条件具备则随时可能爆发冲突。我们用“怨气值”&#xff08;一个正整数值&#xff09;来表示某两名罪犯之间的…

Liunx环境下git的详细使用(gitee版)

Liunx环境下git的详细使用&#xff08;gitee版&#xff09; 1.git是什么2.git操作2.1在gitee创建一个仓库2.2.gitignore2.3.git 3.git三板斧3.1add3.2 commit3.3push 4.git其他命令4.1查看当前仓库状态4.2查看提交日志4.3修改git里面文件名称4.4删除文件4.5修改远端仓库内容 1.…

postgresql表膨胀处理之pgcompacttable部署及使用

环境&#xff1a; 1&#xff09;redhat-release&#xff1a;CentOS Linux release 7.6.1810 (Core) 2&#xff09;database version&#xff1a;postgresql 14.6 一、添加pgstattuple pgcompacttable工具使用过程中需要依赖pgstattuple&#xff0c;因此需先添加pgstattuple…

【SEO基础】百度权重是什么意思及网站关键词应该怎么选?

百度权重是什么意思及网站关键词应该怎么选&#xff1f; 正文共&#xff1a;3253字 20图 预计阅读时间&#xff1a;9分钟 ​ 1.什么是网站权重&#xff1f; 这段时间和一些朋友聊到网站权重以及关键词&#xff0c;发现蛮多人对于这两个概念的认知还是存在一些错误的&#xf…