热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:Redis学习基本知识整理

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Redis学习基本知识整理相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Redis 学习基本知识整理相关的知识,希望对你有一定的参考价值。






一、前言



作为NoSQL的代表Redis在互联网系统中提升性能起到了举足轻重的作用。作为一个从事Java后端的工作者对Redis的学习是必不可少的。


参考:C语言编程网

二、学习笔记整理

Redis的特点


  1. Redis服务器采用内存存储键值对,性能高。
  2. 数据半结构化,更少规则,读取相对于关系数据库更快。
  3. 支持六种数据类型(字符串、哈希、集合、列表、排序集合、基数)
  4. 操作原子性,适合高并发场景
  5. MuiltiUtility工具,Redis 可以在如缓存、消息传递队列中使用(Redis 支持“发布+订阅”的消息模式),在应用程序如 Web 应用程序会话、网站页面点击数等任何短暂的数据中使用。

总结:Redis作为NoSQL适合于缓存工具,应用于高并发场景(如抢红包,商场秒杀等)

Java使用Redis的方法


  1. Jedis

<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.1.0</version>
</dependency>

public class JedisTest {
public static void main(String[]args){
Jedis jedis &#61; new Jedis("host",6379);
jedis.auth("pwd");
jedis.set("TestKey","lyf");
System.out.println(jedis.get("TestKey"));
}
}

  1. Spring 整合 redis


<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

&#xff08;1&#xff09;几种操作数据操作

采用redistemplate进行操作Redis十分的方便&#xff0c;注意若val为Java对象时&#xff0c;需要进序列化&#xff0c;并且进行redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer())设置。

// 测试基本类型的使用
&#64;Test
void test1(){
// Redis运算
// 进行序列化操作&#xff0c;否则出现Integer识别错误
redisTemplate.setValueSerializer(new GenericToStringSerializer<Integer>(Integer.class));
redisTemplate.opsForValue().set("counter","1");
System.out.println(redisTemplate.opsForValue().get("counter"));
redisTemplate.opsForValue().increment("counter",1);
System.out.println(redisTemplate.opsForValue().get("counter"));
// Redis字符串基本操作
// 设置String
redisTemplate.setValueSerializer(new GenericToStringSerializer<>(String.class));
redisTemplate.opsForValue().set("TestData","TestString");
System.out.println(redisTemplate.opsForValue().get("TestData"));
redisTemplate.opsForValue().append("TestData","AppendData");
System.out.println(redisTemplate.opsForValue().get("TestData")&#43;";"&#43;
redisTemplate.opsForValue().size("TestData"));
// 设置对象
// 考虑序列化设置&#xff1f;&#xff1f;&#xff1f;
// 应当设置JDK
// JavaBean需要进行实现Serializable
redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());
//redisTemplate.setValueSerializer(new GenericToStringSerializer<>(Object.class));
Person person &#61; new Person();
person.setAge(19);
person.setName("Person1");
List<Role> roleList &#61; new ArrayList<>();
roleList.add(new Role("admin","HHH"));
person.setRoles(roleList);
System.out.println(person);
redisTemplate.opsForValue().set("TestObject",person);
System.out.println(redisTemplate.opsForValue().get("TestObject"));
Map<String,String> map &#61; new HashMap<>();
map.put("key1","data1");
map.put("key2","data2");
redisTemplate.opsForValue().set("testMap",map);
System.out.println(redisTemplate.opsForValue().get("testMap"));
// RedisHash操作 存储的一个
redisTemplate.opsForHash().putAll("mapKey",map);
System.out.println(redisTemplate.opsForHash().get("mapKey","key1"));
// RedisList列表
redisTemplate.opsForList().leftPush("list","listData1");
redisTemplate.opsForList().leftPush("list","listData2");
redisTemplate.opsForList().leftPush("list","listData3");
System.out.println(redisTemplate.opsForList().index("list",2));
List<String> list &#61; redisTemplate.opsForList().range("list",0,2);
list.stream().forEach(System.out::print);
// RedisSet集合
}

&#xff08;2&#xff09;事务操作

使用SessionCallBack进行提交执行。

// 测试事务
&#64;Test
void test2(){
SessionCallback sessionCallback &#61; new SessionCallback() {
&#64;Override
public Object execute(RedisOperations opts) throws DataAccessException {
opts.multi();// 执行事务
opts.boundValueOps("key").set("value");
String val &#61; (String) opts.boundValueOps("key").get();
System.out.println("设置key还未执行value为"&#43;val);
List list &#61; opts.exec();
val &#61; (String)redisTemplate.opsForValue().get("key");
return val;
}
};
String val &#61; (String) redisTemplate.execute(sessionCallback);
System.out.println(val);
}

&#xff08;3&#xff09;发布订阅模式


  1. 先在Redis工具中进行 采用 SUBSCRIBE 设置注册客户端。
  2. 然后进行设置消息监听


&#64;SpringBootTest
public class Public {
&#64;Autowired
RedisTemplate redisTemplate;
&#64;Test
void publicMsg(){
redisTemplate.convertAndSend("TestChannel","this is a test msg!!");
}
}

  1. 发布订阅信息&#xff0c;监听就可以打印消息了

public class RedisMessageListen implements MessageListener {
&#64;Autowired
RedisTemplate redisTemplate;
&#64;Override
public void onMessage(Message message, byte[] bytes) {
//message.getBody()
byte[] body &#61;message.getBody();
String Body &#61; (String) redisTemplate.getValueSerializer().deserialize(body);
System.out.println(Body);
}
}

(4)关于内存回收

Redis 的 key 超时不会被其自动回收&#xff0c;它只会标识哪些键值对超时了。

Redis 提供两种方式回收这些超时键值对&#xff0c;它们是定时回收和惰性回收。
定时回收是指在确定的某个时间触发一段代码&#xff0c;回收超时的键值对。
惰性回收则是当一个超时的键&#xff0c;被再次用 get 命令访问时&#xff0c;将触发 Redis 将其从内存中清空。

六种回收策略

在这里插入图片描述






推荐阅读
  • Cookie学习小结
    Cookie学习小结 ... [详细]
  • 手指触控|Android电容屏幕驱动调试指南
    手指触控|Android电容屏幕驱动调试指南 ... [详细]
  • 在GitHub上克隆vue-element-admin项目时遇到依赖安装错误
    在 GitHub 上克隆 vue-element-admin 项目后,使用 `npm install` 安装依赖时遇到了未知的 Git 错误。具体错误信息为 `npm ERR! code 128`,提示命令执行失败。这可能是由于网络问题、Git 配置不正确或某些依赖包的仓库地址无效导致的。建议检查网络连接、更新 Git 版本并确保所有依赖项的 URL 正确无误。 ... [详细]
  • JUC(三):深入解析AQS
    本文详细介绍了Java并发工具包中的核心类AQS(AbstractQueuedSynchronizer),包括其基本概念、数据结构、源码分析及核心方法的实现。 ... [详细]
  • IOS Run loop详解
    为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
  • 从0到1搭建大数据平台
    从0到1搭建大数据平台 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • 本文是Java并发编程系列的开篇之作,将详细解析Java 1.5及以上版本中提供的并发工具。文章假设读者已经具备同步和易失性关键字的基本知识,重点介绍信号量机制的内部工作原理及其在实际开发中的应用。 ... [详细]
  • Java Socket 关键参数详解与优化建议
    Java Socket 的 API 虽然被广泛使用,但其关键参数的用途却鲜为人知。本文详细解析了 Java Socket 中的重要参数,如 backlog 参数,它用于控制服务器等待连接请求的队列长度。此外,还探讨了其他参数如 SO_TIMEOUT、SO_REUSEADDR 等的配置方法及其对性能的影响,并提供了优化建议,帮助开发者提升网络通信的稳定性和效率。 ... [详细]
  • 在安装 iOS 开发所需的 CocoaPods 时,用户可能会遇到多种问题。其中一个常见问题是,在执行 `pod setup` 命令后,系统无法连接到 GitHub 以更新 CocoaPods/Specs 仓库。这可能是由于网络连接不稳定、GitHub 服务器暂时不可用或本地配置错误等原因导致。为解决此问题,建议检查网络连接、确保 GitHub API 限制未被触发,并验证本地配置文件是否正确。 ... [详细]
  • 利用 fopen、fwrite、fread、fseek 和 fclose 实现文件中整型数据的读写操作 ... [详细]
  • 2012年9月12日优酷土豆校园招聘笔试题目解析与备考指南
    2012年9月12日,优酷土豆校园招聘笔试题目解析与备考指南。在选择题部分,有一道题目涉及中国人的血型分布情况,具体为A型30%、B型20%、O型40%、AB型10%。若需确保在随机选取的样本中,至少有一人为B型血的概率不低于90%,则需要选取的最少人数是多少?该问题不仅考察了概率统计的基本知识,还要求考生具备一定的逻辑推理能力。 ... [详细]
  • Spring框架中的面向切面编程(AOP)技术详解
    面向切面编程(AOP)是Spring框架中的关键技术之一,它通过将横切关注点从业务逻辑中分离出来,实现了代码的模块化和重用。AOP的核心思想是将程序运行过程中需要多次处理的功能(如日志记录、事务管理等)封装成独立的模块,即切面,并在特定的连接点(如方法调用)动态地应用这些切面。这种方式不仅提高了代码的可维护性和可读性,还简化了业务逻辑的实现。Spring AOP利用代理机制,在不修改原有代码的基础上,实现了对目标对象的增强。 ... [详细]
  • 从零起步:使用IntelliJ IDEA搭建Spring Boot应用的详细指南
    从零起步:使用IntelliJ IDEA搭建Spring Boot应用的详细指南 ... [详细]
  • 探讨 jBPM 数据库表结构设计的精要与实践
    探讨 jBPM 数据库表结构设计的精要与实践 ... [详细]
author-avatar
手机用户2602906791
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有