当前位置: 首页 > ops >正文

初识redis

redis的基初知识和在java中的简单运用

  • redis 的特点和优势所在
  • 下载与安装
  • redis 五种数据类型
  • 常用命令
    • 哈希操作命令
    • 字符串操作命令
    • 列表操作命令
    • 集合操作命令
    • 有序集合操作命令
    • 通用命令 (不分数据类型都可以使用的命令)
  • springboot中整合redis

redis 的特点和优势所在

  • 内存数据结构存储系统,数据主要存储在内存中,提供 微秒级读写响应(10万+ QPS)性能极强。
  • redis 是一个 key -value 型存储系统
  • 原子性操作:Redis 的所有操作都是原子性的,这意味着操作要么完全执行,要么完全不执行。这种特性对于确保数据的一致性和完整性至关重要,尤其是在高并发环境下处理事务时。
  • 持久化:Redis 支持数据的持久化,可以将内存中的数据保存到磁盘中,以便在系统重启后恢复数据。这为 Redis 提供了数据安全性,确保数据不会因为系统故障而丢失。

下载与安装

下载地址
下载好后解压到一个文件夹下,在文件目录所在地址打开命令行窗口,输入 redis-server.exe redis.windows.conf

在这里插入图片描述
在这里插入图片描述

即可开启redis服务。按crtil+c 可以快速关闭服务,新开启命令行,输入redis-cli.exe -h localhost -p 6379 -h -p 可以省略 ,默认连接到本地的redis客户端。

redis 五种数据类型

  1. 字符串string
  2. 哈希hash :也叫散列 ,类似于hashMap结构 filed :value
  3. 列表list :按照插入顺序排序,可以有重复的元素,类似于java中linkedlist
  4. 集合set :无序集合,没有重复元素。
  5. 有序集合 sorted set /zset : 每一个元素关联一个分数 score ,按照分数升序排序,没有重复元素。
    在这里插入图片描述

常用命令

哈希操作命令

  • hset key filed value 将哈希表key中字段filed的值设置成value
  • hmset 批量添加多个hash类型key的filed的值
  • hget key filed 获取哈希表key中字段为filed的值
  • hmget key filed 批量获取多个hash类型key的filed的值
  • hdel key filed 删除存储在哈希表key中字段filed
  • hgetall 获取一个hash类型的key中所有的filed和value
  • hkeys key 获取哈希表key中所有的字段
  • hvals key 获取哈希表key中所有的值
  • hincrby 让一个hash类型的key的字段值自并指定步数

字符串操作命令

  • set key value 设置指定key的值
  • mset key1 value1 key2 value2 批量添加多个String类型的键值对
  • get key 获取指定key的值
  • mget key1 key2 获取多个指定key的值
  • incr key 让一个整型的key自增1
  • incrby key step 让一个整形的key自增并指定步长
  • incrbyfloat key step 让一个浮点型的数字自增并指定步长
    • setex key seconds value 设置指定key的值,并将key的过期时间设置为seconds 秒
  • setnx key value 只有key不存在时才能设置key的值

列表操作命令

  • lpush key value1 value2 ..... 将一个或多个值插入表表的头部
  • lrange key start stop 获取指定范围内的元素
  • rpop 移除最后一个元素
  • llen key 获取列表长度

集合操作命令

  • sadd key member1 member2 … 向key集合中添加一个或是多个成员
  • smemers key 返回集合的所有成员
  • scard key 获取集合的成元数
  • sinter key1 key2 返回所有给定集合的交集
  • sunion key1 key2 返回所有给定集合的并集
  • srem key member1 member2... 删除key集合中的一个或是多个成员

有序集合操作命令

分数是double类型

  • zadd key1 score1 key2 score2 向指定集合添加成员和其对应的分数
  • zrang key start stop [withscores] 通过索引获取集合中的成员 ,加上withscores 会返回成员对应的分数 (索引从0开始,默认是升序来排列,若是0,-1 则返回所有的)
  • zincrby key increment member 对key集合的member加上increment分数
  • zrem key member [member ...] 删除指定集合的或者是多个成员

通用命令 (不分数据类型都可以使用的命令)

keys pattern 返回所有符合给定模式的key
exists key 检查给定key是否存在 存在返回1 ,不存在返回 0
type key 返回key所存储的值的类型
del key key2.... 删除指定key

springboot中整合redis

  1. 导入依赖
   <!-- 导入Redis --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>
  1. 配置redis
# 配置redis
spring:redis:host: localhostport: 6379password: yourpassword

3.创建配置类

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;@Configuration
public class RedisConfig {@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {RedisTemplate<String, Object> template = new RedisTemplate<>();//设置redis连接工厂template.setConnectionFactory(connectionFactory);//设置key的序列化器template.setKeySerializer(new StringRedisSerializer());template.setHashKeySerializer(new StringRedisSerializer());//设置value的序列化器template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());template.setValueSerializer(new GenericJackson2JsonRedisSerializer());return template;}
}

这样有一个弊端,存储java对象时会把java对象的字节码对象也存进去,会导致占用的空间太大,影响速率,
因此如果key和value都使用string类型的序列化器,spring中有一个类StringRedisTemplate ,他的key与value序列化方式默认就是string方式。这样可以省略了创建配置类这个步骤。
如下:
使用配置的redisTemplate
在这里插入图片描述
输出结果

UserVo(userName=zhangsan, address=beijing, introduction=hello world, avatar=https://news.baidu.com/zhangsan, gender=1)

数据库存储的数据
在这里插入图片描述


使用StringRedisTemplate 需要手动序列化和反序列化

    @Autowiredprivate StringRedisTemplate stringRedisTemplate;//序列化工具private static  final  ObjectMapper objectMapper = new ObjectMapper();@org.junit.jupiter.api.Testpublic void test01() throws JsonProcessingException {//获取string类型的操作对象ValueOperations<String, String> stringStringValueOperations = stringRedisTemplate.opsForValue();//string 类型的操作//创建对象UserVo user = new UserVo();user.setUserName("李四");user.setAddress("河南");user.setIntroduction("你好");user.setAvatar("https://news.baidu.com/zhangsan");user.setGender(1);//将对象转换为json字符串String json = objectMapper.writeValueAsString(user);//如果key已经存在了,会更新值stringStringValueOperations.set("user:100", json);//获取值String read = stringStringValueOperations.get("user:100");//将json字符串转换为对象UserVo userVo = objectMapper.readValue(read, UserVo.class);System.out.println(userVo);}

输出结果

UserVo(userName=李四, address=河南, introduction=你好, avatar=https://news.baidu.com/zhangsan, gender=1)

数据库中的数据

{"userName": "李四","address": "河南","introduction": "你好","avatar": "https://news.baidu.com/zhangsan","gender": 1
}
http://www.xdnf.cn/news/12571.html

相关文章:

  • H_Prj06_03 8088单板机串口读取8088ROM复位内存
  • Jetpack Compose 中,DisposableEffect、LaunchedEffect 和 sideEffect 区别和用途
  • 深入解析 CAS 操作
  • Linux 系统、代码与服务器进阶知识深度解析
  • 【Python】当前最稳定3.12版本安装,基于Anaconda的环境配置及换源
  • 力扣面试150题--除法求值
  • 计算矩阵A和B的乘积
  • 基于Python学习《Head First设计模式》第八章 模板方法模式
  • Readest(电子书阅读器) v0.9.53
  • 缓存一致性 与 执行流
  • STM32学习笔记:外部中断(EXTI)原理与应用详解
  • 什么是可恢复保险丝
  • 永恒之蓝(CVE-2017-0146)详细复现
  • day49 python 注意力热图
  • Oracle 客户端深度指南:SQL Developer 与 PL/SQL Developer 全面安装使用教程
  • MySQL中的内置函数
  • 深入剖析Nginx:从入门到高并发架构实战
  • day24 元组和OS模块
  • 十、【ESP32开发全栈指南: TCP客户端】
  • LinkedList、Vector、Set
  • 嵌入式学习笔记 - freeRTOS vTaskPlaceOnEventList()函数解析
  • VirtualBox启动失败@Ubuntu22.04 说是配置文件有问题
  • 使用ORM Bee (ormbee) ,如何利用SQLAlchemy的模型生成数据库表.
  • “组件、路由懒加载”,在 Vue3 和 React 中分别如何实现? (copy)
  • 使用Python和Flask构建简单的机器学习API
  • MySQL事务与锁中的MVCC 深度解析与面试题讲解
  • Spring AI 核心工作流
  • 每日Prompt:治愈动漫插画
  • 基于深度学习的金枪鱼各类别目标检测含完整数据集
  • Strong Baseline: Multi-UAV Tracking via YOLOv12 with BoT-SORT-ReID 2025最新无人机跟踪