Redis详解

devtools/2025/2/5 18:54:37/

一、介绍

Redis是一个基于内存key-value结构数据库

  • 基于内存存储,读写性能高
  • 适合存储热点数据
  • 企业应用广泛

二、安装

官网:Redis中文网

三、数据类型

四、常用命令

1.字符串操作命令

2.哈希操作命令

3.列表操作命令

4.集合操作命令

5.有序集合操作命令

6.通用命令

五、在Java中操作Redis

1.Redis的Java客户端

  • Jedis
  • Lettuce
  • Spring Data Redis

2.Spring Data Redis使用方式

(1)导入Spring Data Redis的maven坐标

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

(2)配置Redis数据源

  redis:host: ${sky.redis.host}port: ${sky.redis.port}database: ${sky.redis.database}

(3)编写配置类,创建RedisTemplate对象

@Configuration
@Slf4j
public class RedisConfiguration {@Beanpublic RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){log.info("开始创建redis模板对象");RedisTemplate redisTemplate = new RedisTemplate();//设置redis的连接工厂对象redisTemplate.setConnectionFactory(redisConnectionFactory);//设置redis key的序列化器redisTemplate.setKeySerializer(new StringRedisSerializer());return redisTemplate;}
}

(4)通过RedisTemplate对象操作Redis

示例:

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.connection.DataType;
import org.springframework.data.redis.core.*;import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;//@SpringBootTest
public class SpringDataRedisTest {@Autowiredprivate RedisTemplate redisTemplate;@Testpublic void testRedisTemplate(){System.out.println(redisTemplate);ValueOperations valueOperations = redisTemplate.opsForValue();HashOperations hashOperations = redisTemplate.opsForHash();ListOperations listOperations = redisTemplate.opsForList();SetOperations setOperations = redisTemplate.opsForSet();ZSetOperations zSetOperations = redisTemplate.opsForZSet();}/*** 操作字符串类型的数据*/@Testpublic void testString(){// set get setex setnxredisTemplate.opsForValue().set("name","小明");String city = (String) redisTemplate.opsForValue().get("name");System.out.println(city);redisTemplate.opsForValue().set("code","1234",3, TimeUnit.MINUTES);redisTemplate.opsForValue().setIfAbsent("lock","1");redisTemplate.opsForValue().setIfAbsent("lock","2");}/*** 操作哈希类型的数据*/@Testpublic void testHash(){//hset hget hdel hkeys hvalsHashOperations hashOperations = redisTemplate.opsForHash();hashOperations.put("100","name","tom");hashOperations.put("100","age","20");String name = (String) hashOperations.get("100", "name");System.out.println(name);Set keys = hashOperations.keys("100");System.out.println(keys);List values = hashOperations.values("100");System.out.println(values);hashOperations.delete("100","age");}/*** 操作列表类型的数据*/@Testpublic void testList(){//lpush lrange rpop llenListOperations listOperations = redisTemplate.opsForList();listOperations.leftPushAll("mylist","a","b","c");listOperations.leftPush("mylist","d");List mylist = listOperations.range("mylist", 0, -1);System.out.println(mylist);listOperations.rightPop("mylist");Long size = listOperations.size("mylist");System.out.println(size);}/*** 操作集合类型的数据*/@Testpublic void testSet(){//sadd smembers scard sinter sunion sremSetOperations setOperations = redisTemplate.opsForSet();setOperations.add("set1","a","b","c","d");setOperations.add("set2","a","b","x","y");Set members = setOperations.members("set1");System.out.println(members);Long size = setOperations.size("set1");System.out.println(size);Set intersect = setOperations.intersect("set1", "set2");System.out.println(intersect);Set union = setOperations.union("set1", "set2");System.out.println(union);setOperations.remove("set1","a","b");}/*** 操作有序集合类型的数据*/@Testpublic void testZset(){//zadd zrange zincrby zremZSetOperations zSetOperations = redisTemplate.opsForZSet();zSetOperations.add("zset1","a",10);zSetOperations.add("zset1","b",12);zSetOperations.add("zset1","c",9);Set zset1 = zSetOperations.range("zset1", 0, -1);System.out.println(zset1);zSetOperations.incrementScore("zset1","c",10);zSetOperations.remove("zset1","a","b");}/*** 通用命令操作*/@Testpublic void testCommon(){//keys exists type delSet keys = redisTemplate.keys("*");System.out.println(keys);Boolean name = redisTemplate.hasKey("name");Boolean set1 = redisTemplate.hasKey("set1");for (Object key : keys) {DataType type = redisTemplate.type(key);System.out.println(type.name());}redisTemplate.delete("mylist");}
}


http://www.ppmy.cn/devtools/156355.html

相关文章

billd-live 一款开源、免费、技术先进的直播系统

一、简介 Billd-Live是一个基于Vue3、WebRTC、Node、SRS和FFmpeg等技术搭建的直播间系统&#xff0c;支持在线Web和安卓端查看。它实现了类似于bilibili的Web在线直播功能&#xff0c;允许用户发布直播并观看他人的直播内容。 二、功能 原生 webrtc 推拉流 srs webrtc 推流&…

Unity打包安卓报错sdk version 0.0 < 26.0(亲测解决)

问题描述和尝试解决方案&#xff1a; Unity打包安卓报错sdk version 0.0 < 26.0高版本Unity手动指定SDK地址时&#xff0c;比较容易出现上述错误高手支招1&#xff1a;修改sdk的tools文件夹中package.xml的obsolete"false"无解&#xff0c;因为打开platform-tool…

excel实用问题:提取文字当中的数字进行运算

0、前言&#xff1a; 这里汇总在使用excel工作过程中遇到的问题&#xff0c;excel使用wps版本&#xff0c;小规模数据我们自己提取数据可行&#xff0c;大规模数据就有些难受了&#xff0c;因此就产生了如下处理办法。 需求&#xff1a;需要把所有文字当中的数字提取出来&…

【怎么用系列】短视频戒除—1—对推荐算法进行干扰

如今推荐算法已经渗透到人们生活的方方面面&#xff0c;尤其是抖音等短视频核心就是推荐算法。 【短视频的危害】 1> 会让人变笨&#xff0c;慢慢让人丧失注意力与专注力 2> 让人丧失阅读长文的能力 3> 让人沉浸在一个又一个快感与嗨点当中。当我们刷短视频时&#x…

qt-Quick笔记之Dark Mode And Light Mode In Application

qt-Quick笔记之Dark Mode And Light Mode In Application code review! 文章目录 qt-Quick笔记之Dark Mode And Light Mode In Application1.运行2.目录结构3.main.qml4.main.cpp5.main.pro6.main.qrc 本例修改自视频教程&#xff1a;Qt QML | &#x1f319; Dark Mode And ☀…

Dest1ny攻防实战:SpringBoot 脱敏属性***明文获取

今天是dest1ny攻防实战&#xff01; 脱敏springboot敏感数据&#xff01;&#xff01; 大家多多支持&#xff0c;多多点赞&#xff0c;多多关注&#xff01;&#xff01; 谢谢大家&#xff0c;下面我们来看今天的内容&#xff01; 1.前言 SpringBoot敏感信息泄露&#xff0…

8266使用websocket库

安装 WebSocket 库 使用 Arduino IDE 安装&#xff1a; 打开 Arduino IDE。转到 Sketch > Include Library > Manage Libraries...。在搜索框中输入“WebSockets”并查找 WebSockets by Markus Sattler 的库。点击安装。 最下面那个&#xff0c;安装编译运行测试&#…

4 前端前置技术(中):node.js环境

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 前言