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

初识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.lqws.cn/news/213247.html

相关文章:

  • Kafka 消息模式实战:从简单队列到流处理(一)
  • c++ 静态成员变量
  • 《高精度》题集
  • 【题解-洛谷】B3622 枚举子集(递归实现指数型枚举)
  • 【Latex】Windows/Ubuntu 绘制 eps 矢量图通用方法(drawio),支持插入 Latex 数学公式
  • 一款“短小精悍的”手机录屏软件
  • 安达发|装饰材料行业APS生产排程软件:破解生产困局,智造升级新引擎
  • Java高级 |【实验八】springboot 使用Websocket
  • Spring中循环依赖问题的解决机制总结
  • day 27 装饰器函数
  • [GitHub] 优秀开源项目
  • 区块链技术概述
  • Java方法引用深度解析:从匿名内部类到函数式编程的演进
  • MySQL 8.0 绿色版安装和配置过程
  • SQL Server 日期时间类型全解析:从精确存储到灵活转换
  • SpringBoot十二、SpringBoot系列web篇之过滤器Filte详解
  • 使用Caddy在Ubuntu 22.04上配置HTTPS反向代理
  • 开疆智能Ethernet/IP转Modbus网关连接鸣志步进电机驱动器配置案例
  • 指针的定义与使用
  • Python 接口:从协议到抽象基 类(定义并使用一个抽象基类)
  • 虚幻引擎5-Unreal Engine笔记之SET节点的输出引脚获取设置后的最新变量值
  • 露亦如电 · 时之沙 | 让遗憾在灰烬里随风而去
  • CCPC chongqing 2025 L
  • Faiss向量数据库全面解析:从原理到实战
  • 5.4.2 Spring Boot整合Redis
  • 汇编语言学习(三)——DoxBox中debug的使用
  • 从代码学习深度强化学习 - 初探强化学习 PyTorch版
  • [学习] GNSS信号跟踪环路原理、设计与仿真(仿真代码)
  • RTOS学习之重难点
  • 关于GitHub action云编译openwrt