Redis基础与运用
一、redis介绍
-
简介
Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。
Redis 与其他 key - value 缓存产品有以下三个特点:
- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
- Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
- Redis支持数据的备份,即master-slave模式的数据备份。
-
优势
- 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
- 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
- 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
- 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
二、redis服务启动
-
windows下安装
下载地址:https://github.com/tporadowski/redis/releases。
Redis 支持 32 位和 64 位。这个需要根据你系统平台的实际情况选择,这里我们下载 Redis-x64-xxx.zip压缩包到 C 盘,解压后,将文件夹重新命名为 redis。
开两个cmd窗口,一个启动redis-server.exe,一个启动redis-cli.exe
-
linux下安装
指导链接:Redis 安装 | 菜鸟教程 (runoob.com)
三、java 中使用redis
- pom.xml引入
<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>redis.clients</groupId><artifactId>jedis</artifactId> </dependency> <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>2.0.32</version> </dependency> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
- properties配置
// 当前为spring 2.x.x版本下配置 spring.datasource.redis.database=0 spring.datasource.redis.host=127.0.0.1 //redis服务器ip spring.datasource.redis.password= //密码为配置的redis权限密码 spring.datasource.redis.port=6379 // sping 3.x.x版本下配置 # Redis 数据库索引(默认为0) spring.data.redis.database=0 # Redis 服务的ip,我的是在虚拟机的服务器上。 spring.data.redis.host=192.168.45.129 # Redis 端口 spring.data.redis.port=6379 # Redis 密码,默认为空,可以修改 redis.conf配置文件 spring.data.redis.password= # 最大可用连接数 spring.redis.pool.max-active=200 # 从连接池中获取连接最大等待时间 spring.redis.pool.max-wait=-1 # 最大空闲连接数 spring.redis.pool.max-idle=10 # 最小空闲连接数 spring.redis.pool.min-idle=0 # redis连接超时时间(单位为毫秒) spring.data.redis.timeout=1000
- bean创建
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import com.fasterxml.jackson.databind.ObjectMapper;@Configuration
public class RedisConfig {/*** 连接工厂*/@Bean//读取配置文件中redis的配置@ConfigurationProperties(prefix = "spring.datasource.redis")public JedisConnectionFactory jedisConnectionFactory() {JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory();jedisConnectionFactory.afterPropertiesSet();return jedisConnectionFactory;}/*** RedisTemplate* @param redisConnectionFactory redis连结* @return RedisTemplate*/@Bean@ConditionalOnMissingBean(name = "redisTemplate")public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {//StringStringRedisSerializer stringRedisSerializer = new StringRedisSerializer();ObjectMapper om = new ObjectMapper();//PropertyAccessor.ALL:所有;JsonAutoDetect.Visibility.ANY修饰范围:ANY-所有om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);//指定序列化输入的类型,类必须是非final修饰的om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance,ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);jackson2JsonRedisSerializer.setObjectMapper(om);RedisTemplate<String, Object> template = new RedisTemplate<>();//连接工厂template.setConnectionFactory(redisConnectionFactory);//全局key的序列化策略template.setKeySerializer(stringRedisSerializer);//全局value的序列化策略template.setValueSerializer(jackson2JsonRedisSerializer);//全局HashKey的序列化策略template.setHashKeySerializer(stringRedisSerializer);//全局HashValue的序列化策略template.setHashValueSerializer(jackson2JsonRedisSerializer);//支持事务template.setEnableTransactionSupport(true);template.afterPropertiesSet();return template;}
}
- 工具类封装
// 示例,具体使用依照自身业务情况而定import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;@Component
public class RedisUtil {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;public String getString(String key) {Object value = redisTemplate.opsForValue().get(key);System.out.println(value);return value == null ? null : value.toString();}public void setValue(String key, Object value) {redisTemplate.opsForValue().set(key, value);}}
四、redis常见指令
- 【redis-cli --raw】客户端启动避免中文乱码
- 【redis-cli】客户端启动
- 【redis-cli -h host -p port -a password】在远程服务上执行命令
- 【ECHO "Hello World"】打印给定的字符串
- 【DEL KEY_NAME】删除指定键
- 【AUTH PASSWORD】鉴权登录
- 【EXISTS KEY_NAME】是否存在指定键
- 【Expire KEY_NAME TIME_IN_SECONDS】设置键的过期时间
- 【SET KEY_NAME VALUE】设置键的值
- 【GET KEY_NAME】获取键值
- 【STRLEN KEY_NAME】获取键值的长度
- 【APPEND KEY_NAME NEW_VALUE】拼接新值到旧值
- 【config set requirepass xxx】设置密码为xxx
相关文章:
Redis基础与运用
一、redis介绍 简介 Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。 Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可…...
PTA:猜帽子游戏 ,C语言
题目 宝宝们在一起玩一个猜帽子游戏。每人头上被扣了一顶帽子,有的是黑色的,有的是黄色的。每个人可以看到别人头上的帽子,但是看不到自己的。游戏开始后,每个人可以猜自己头上的帽子是什么颜色,或者可以弃权不猜。如…...
ESP32基于IDF框架OTA学习记录
ESP32基于IDF框架OTA学习记录 参考: 空中升级 (OTA) - ESP32 - — ESP-IDF 编程指南 v5.1.1 文档 (espressif.com) 目录 ESP32基于IDF框架OTA学习记录1.分区表2.native_ota_example上手2.1配置分区表2.2配置OTA的bin文件2.3修改esp32的https证书验证方法2.4修改当…...
分布式技术(一)分布式的架构的演进
💌 所属专栏:【微服务】😀 作 者:长安不及十里💻 工作:目前从事电力行业开发🌈 目标:全栈开发🚀 个人简介:一个正在努力学技术的Java工程师,专注基…...
webpack 打包优化
在vue.config.js中配置 下载 uglifyjs-webpack-plugin 包 const { defineConfig } require("vue/cli-service"); var path require("path");module.exports defineConfig({transpileDependencies: true,filenameHashing: false, // 去除Vue打包后.cs…...
electron windows robotjs 安装教程
Robotjs 安装 前言第一步 : 安装python第二步 : 安装Visual Studio 2022第三步 : 安装robotjs 前言 robotjs可以控制鼠标键盘,获取屏幕内容,配合electron可做很多自动化操作。windows下配置环境有很多坑,很多文章都太旧了。试了很多次发现了…...
IDEA解决Git冲突详解
目录 前言: 何为冲突 冲突演示 IDEA冲突解决 小结: 前言: 相信大家多多少少都有了解和使用过Git,作为Java程序员idea可谓是无敌的存在了,那么如何使用idea解决Git冲突呢?不瞒大家前段时间在公司把同事…...
Vue3使用kkFileView预览文件pdf
kkFileView - 在线文件预览kkFileView官网 - kkFileView使用Spring Boot搭建,易上手和部署,基本支持主流办公文档的在线预览,如doc,docx,Excel,pdf,txt,zip,rar,图片等等https://kkfileview.keking.cn/zh-cn/docs/usage.html业务场景…...
建造者模式-C语言实现
UML类图: 代码实现: #include <stdio.h> #include <stdlib.h>// 产品类 typedef struct {char* part1;char* part2;char* part3; } Product;// 抽象建造者类 typedef struct {void (*buildPart1)(void*, const char*);void (*buildPart2)(v…...
Jmeter+influxdb+grafana监控平台在windows环境的搭建
原理:Jmeter采集的数据存储在infuxdb数据库中,grafana将数据库中的数据在界面上进行展示 一、grafana下载安装 Download Grafana | Grafana Labs 直接选择zip包下载,下载后解压即可,我之前下载过比较老的版本,这里就…...
关注这两点 或能避开一些现货黄金交易的陷阱
在现货黄金投资中,交易机会是处处都有,但是亏损的情况也可能出现。投资者要在陷阱处处的市场中获得稳定盈利,就需要懂得如何规避现货黄金投资的陷阱。下面我们就来介绍两个很常用的避开陷阱的方法。 看交易的活跃度。交易越活跃,市…...
Python 文件读写
Python 文件读写笔记整理 参数说明 open(path, flag[, encoding][,errors]) path:要打开文件的路径 flag:打开方式 encoding:编码方式 errors:错误处理 Flag打开方式表 模式 描述 r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 rb 以二进制格…...
线性分组码的奇偶校验矩阵均匀性分析
回顾信道编解码知识,我们知道信道编码要求编码具有检纠错能力,作为FEC(forward error correction)前向纠错编码的一类,线性分组码表示校验位与信息位的关系能够线性表示。 在这篇文章中,并不是要讨论信道编…...
leetcode算法之链表
目录 1.两数相加2.两两交换链表中的节点3.重排链表4.合并K个升序链表5.K个一组翻转链表 1.两数相加 两数相加 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(…...
2023.11.27 滴滴P0级故障或为k8s升级造成
滴滴11.27 P0级故障|打车|宕机|网约车|出租车|滴滴出行|系统故障_网易订阅 (163.com) 如何看待滴滴11月27日故障,对日常生产生活有哪些影响? - 知乎 (zhihu.com) 最新消息滴滴P0故障原因,是由于k8s集群升级导致的,后面又进行版本…...
Ubuntu16.04.4系统本地提权实验
目录 1.介绍: 2.实验: 3.总结: 1.介绍: 1.1:eBPF简介:eBPF(extendedBerkeleyPacketFilter)是内核源自于BPF的一套包过滤机制,BPF可以理解成用户与内核之间的一条通道,有非常强大的…...
Vue中使用正则表达式进行文本匹配和处理的方法
1. 正则表达式基础 正则表达式是一种用来匹配字符串的模式。它由普通字符(例如字符 a 到 z)和特殊字符(称为"元字符")组成。以下是一些基本的正则表达式示例: 匹配邮箱的正则表达式: /^[\w-](\…...
php许愿墙代码包括前端和后端部分
以下是一个简单的PHP许愿墙代码示例,包括前端和后端部分: 前端HTML代码(index.html): <!DOCTYPE html> <html> <head><title>许愿墙</title> </head> <body><h1>许…...
PHP 刷新缓存区的问题!
PHP流式输出,在Nginx下可以正常刷新缓存区 , 但是在Apache下会等待循环全部执行完,才会刷新!有怎么解决? header(X-Accel-Buffering: no); // Nginx情况下必须加这一行header(Content-type: text/event-stream);header…...
Android Studio Giraffe-2022.3.1-Patch-3安装注意事项
准备工作: android studio下载地址:https://developer.android.google.cn/studio/releases?hlzh-cn gradle下载地址:https://services.gradle.org/distributions/ 比较稳定的网络环境(比较android studio相关的依赖需要从谷歌那边…...
春和景明聚知己 嬴氏酒香醉春光
春风送暖,万物复苏,山野间绿意蔓延,枝头繁花盛放,正是一年中踏春赏景、邀约好友共赴自然的绝佳时节。褪去日常的忙碌与疲惫,邀三五知己,寻一处清幽草地,伴青山绿水、鸟语花香,围坐一…...
Docker容器优化全攻略
Docker容器优化全攻略 引言:Docker的效率革命 哥们,别整那些花里胡哨的!作为一个前端开发兼摇滚鼓手,我最烦的就是容器体积大、启动慢、运行卡。Docker容器的优化直接关系到部署效率、运行性能和资源消耗。今天,我就给…...
Python错误和异常处理完全指南:从小白到高手的详细教程
本文全面讲解Python中的错误和异常处理机制,从基础概念到高级用法,帮你构建健壮的Python程序。 1. 为什么需要异常处理? 在编程中,错误是不可避免的。想象一下:你写了一个读取文件的程序,但文件不存在;或者计算用户输入的数据,但用户输入了字母而不是数字。没有异常处…...
计算机毕业设计:Python汽车销量智能可视化与预测系统 Flask框架 可视化 机器学习 AI 大模型 大数据(建议收藏)✅
博主介绍:✌全网粉丝50W,前互联网大厂软件研发、集结硕博英豪成立软件开发工作室,专注于计算机相关专业项目实战6年之久,累计开发项目作品上万套。凭借丰富的经验与专业实力,已帮助成千上万的学生顺利毕业,…...
批量图片添加文字水印工具:Windows 上手指南(预览与平铺)
面向需要在 Windows 上 批量 给 图片 叠 文字水印 的同事,工具名【批量图片添加文字水印工具】。下文只写能力与操作顺序,不写实现细节。输入与目录支持选择多个文件或整个文件夹,路径可拖拽填入;多文件路径用分号分隔。勾选「遍历…...
【Python 3.14 JIT性能调优权威指南】:20年CPython核心开发者亲授3大接入瓶颈突破法
第一章:Python 3.14 JIT编译器的演进脉络与接入价值Python 3.14 引入了实验性但高度集成的内置 JIT(Just-In-Time)编译器,标志着 CPython 运行时首次在官方发行版中提供可生产级启用的动态编译能力。该 JIT 并非独立运行时或第三方…...
开源可部署剧本AI|像素剧本圣殿镜像免配置+Qwen2.5本地化教程
开源可部署剧本AI|像素剧本圣殿镜像免配置Qwen2.5本地化教程 1. 像素剧本圣殿简介 Pixel Script Temple(像素剧本圣殿)是一款基于Qwen2.5-14B-Instruct模型深度微调的专业剧本创作工具。这个开源项目将强大的AI推理能力与独特的8-Bit复古美…...
2026 年,DD4 内存条平台为何仍备受关注?
在内存技术飞速发展的今天,DDR5内存条逐渐成为了市场的主流。然而,令人意外的是,DDR4内存条平台在2026年仍然备受关注。究竟是什么原因让DDR4内存条在新时代依然占据一席之地呢?本文将从多个角度为您深入剖析。一、性价比之选对于…...
阻焊层有多重要?PCB封装的防护屏障
在 PCB 封装的构成要素中,阻焊层(Solder Mask) 是容易被忽视却至关重要的 “防护屏障”,它如同给 PCB 穿上一层 “绝缘防护服”,既保护电路板的导电线路,又规范焊接过程,是保障电路可靠性、稳定…...
ROS2 Humble实战:用QoS解决机器人通信丢包,保姆级代码配置避坑
ROS2 Humble实战:用QoS策略解决机器人通信丢包问题 当你的移动机器人在执行SLAM建图任务时突然出现地图撕裂,或者机械臂协同控制时发生指令延迟,这些看似随机的问题背后往往隐藏着一个共同的元凶——通信丢包。ROS2的QoS(Quality …...
