Redis入门(常用命令、spring-boot-starter-data-redis)

news2025/5/24 16:37:15

Redis

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

启动: redis-server.exe redis.windows.conf

客户端链接:redis-cli.exe [-h 目标ip] [-p 端口] [-a 密码]

修改链接密码:

redis.windows.conf中的requirepass 123456

常用的数据类型

redis存储的是key-value结构的数据,其中key是字符串类型,value有5种常用的数据类型

  • 字符串 string

  • 哈希 hash

  • 列表 list

  • 集合 set

  • 有序集合 sorted set/zset

常用命令

字符串操作命令

SET key value 设置指定key的值

GET key 获取指定key的值

SETEX key seconds value 设置指定key的值,并将key的过期时间设置为seconds秒

SETNX key value 只有在key不存在时设置key的值

哈希操作命令

HSET key field value 将哈希表key中的字段field的值设置为value

HGET key field 获取存储在哈希表中指定字段的值

HDEL key field 删除存储在哈希表中的指定字段

HKEYS key 获取哈希表中所有的字段

HVALS key 获取哈希表中所有的值

列表操作命令

LPUSH key value1 [value2] 将一个或多个值插入到列表头部

LRANGE key start stop 获取列表指定范围内的元素

RPOP key 移除并获取列表最后一个元素

LLEN key 获取列表长度

集合操作命令

SADD key member1 [member2] 向集合添加一个或多个成员

SMEMBERS key 返回集合的所有成员

SCARD key 获取集合的成员数

SINTER key1 [key2] 返回给定所有集合的交集

SUNION key1 [key2] 返回所有给定集合的并集

SREM key member1 [member2] 删除集合中一个或多个成员

有序集合操作命令

ZADD key score1 member1 [score2 member2] 向有序集合添加一个或多个成员

ZRANGE key start stop [WITHSCORES] 通过索引区间返回有序集合中指定区间内的成员

ZINCRBY key increament member 有序集合中对指定成员的分数加上增量increment

ZREM key member [member...] 移除有序集合中的一个或多个成员

通用命令

KEYS pattern 查找所有符合给定模式(pattern)的key

EXISTS key 检查给定key是否存在

TYPE key 返回key所存储的值的类型

DEL key 该命令用于在key存在时删除key

在java中操作Redis

Redis的常用java客户端有jedis,lettuce,Spring Data Redis

Spring Data Redis

依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.7.3</version>
</dependency>
配置redis数据源(application.yml)
spring:
  redis:
    host: localhost
    port: 6379
    password: 123456
    database: 0
编写配置类,创建RedisTempalte对象
@Configuration
@Slf4j
public class RedisConfiguration {
    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
        log.info("开始创建redis模板对象。。。");
        RedisTemplate redisTemplate = new RedisTemplate();
        //设置redis的链接工厂对象
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        //设置redis key的序列化器
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        return redisTemplate;
    }
}
通过RedisTemplate对象操作Redis
@SpringBootTest
public class SpringDataRedisTest {
​
    @Autowired
    private RedisTemplate redisTemplate;
​
    @Test
    public void testRedisTempalte(){
        System.out.println(redisTemplate);
    }
}
操作字
符串类型的数据
/**
     * 操作字符串类型的数据
     */
@Test
public void testString(){
    // set get setex setnx
    //插入
    redisTemplate.opsForValue().set("city", "北京");
    //获取
    String city = (String) redisTemplate.opsForValue().get("city");
    System.out.println(city);
    //插入,设置有效时间
    redisTemplate.opsForValue().set("code", "1234", 3, TimeUnit.MINUTES);
    //如果不存在插入
    redisTemplate.opsForValue().setIfAbsent("lock", 1);
    redisTemplate.opsForValue().setIfAbsent("lock", 2);
    //获取
    Integer lock = (Integer) redisTemplate.opsForValue().get("lock");
    System.out.println(lock);
}
操作哈希类型的数据
/**
* 操作哈希类型的数据
*/
@Test
public void testHash(){
    // hset hget hkeys hvals
    HashOperations hashOperations = redisTemplate.opsForHash();
​
    //插入
    hashOperations.put("100", "name", "tom");
    hashOperations.put("100", "age", 20);
    //获取
    String name = (String) hashOperations.get("100", "name");
    System.out.println(name);
​
    //获取所有哈希value
    List values = hashOperations.values("100");
    System.out.println(values);
​
    //删除某个哈希key
    hashOperations.delete("100", "age");
​
    //获取所有哈希key
    Set keys = hashOperations.keys("100");
    System.out.println(keys);
}
操作列表类型的数据
/**
* 操作列表类型的数据
*/
@Test
public void testList() {
    // lput lrange rpop llen
    ListOperations listOperations = redisTemplate.opsForList();
​
    //左侧插入
    listOperations.leftPushAll("mylist", "a", "b", "c");
    listOperations.leftPush("mylist", "d");
    //范围获取
    List mylist = listOperations.range("mylist", 0, -1);
    System.out.println(mylist);
    //右侧弹出
    String mylist1 = (String) listOperations.rightPop("mylist");
    System.out.println(mylist1);
    //获取长度
    Long mylist2 = listOperations.size("mylist");
    System.out.println(mylist2);
}
操作集合类型的数据
/**
     * 操作集合类型的数据
     */
@Test
public void testSet() {
    //sadd smembers scard sinter sunion srem
    SetOperations setOperations = redisTemplate.opsForSet();
​
    //插入
    setOperations.add("set1", "a", "b", "c", "d");
    setOperations.add("set2", "a", "b", "x", "y");
    //获取所有元素
    Set set1 = setOperations.members("set1");
    System.out.println(set1);
    //获取交集
    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");
    //获取元素个数
    Long size1 = setOperations.size("set1");
    System.out.println(size1);
​
}
操作有序集合类型的数据
/**
     * 操作有序集合类型的数据
     */
@Test
public void testZset() {
    // zadd zrange zincrby zrem
    ZSetOperations 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");
​
    Set zset2 = zSetOperations.range("zset1", 0, -1);
    System.out.println(zset2);
}
​
​
​
通用命令操作
/**
     * 通用命令操作
     */
@Test
public void testCommon() {
    // keys exists type det
​
    // 获取所有的key
    Set keys = redisTemplate.keys("*");
    System.out.println(keys);
​
    // 某个key是否存在
    Boolean name = redisTemplate.hasKey("name");
    Boolean set1 = redisTemplate.hasKey("set1");
    System.out.println(name);
    System.out.println(set1);
​
    //查看key中value的类型
    for (Object key: keys){
        DataType type = redisTemplate.type(key);
        System.out.println(type);
    }
​
    //删除key
    redisTemplate.delete("mylist");
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1593427.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

事务隔离级别的无锁实现方式 -- MVCC

MVCC的全称是Multiversion Concurrency Control(多版本并发控制器)&#xff0c;是一种事务隔离级别的无锁的实现方式&#xff0c;用于提高事务的并发性能&#xff0c;即事务隔离级别的一种底层实现方式。 在了解MVCC之前&#xff0c;我们先来回顾一些简单的知识点&#xff1a;…

leetCode刷题 27. 移除元素

目录 1.思路&#xff1a; 2.解题方法&#xff1a; 3.复杂度&#xff1a; 4.Code 题目&#xff1a; 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须…

商城系统必备营销功能——分销裂变

电商流量红利已经过去&#xff0c;现在的电商营销&#xff0c;重点在于私域用户&#xff0c;在于客户资源裂变。人们通过分销裂变挖掘客户资源&#xff0c;能降低获客成本&#xff0c;对于需要解决成本困扰的企业来说&#xff0c;确实是个不错的选择。今天&#xff0c;我们就来…

FFmpeg: 自实现ijkplayer播放器--09音频重采样输出

文章目录 流程图音视设备输出回调函数重采样写入音频流因SDL输出音频采样格式为S16(一个采样点2个字节),而音频解码后采样格式通常为float planar(一个采样点4个字节),故需要重采样 重采样的条件:音频解码后的任意一个参数和需要的参数不同时,进行重采样,参数为: 采样格…

Nginx健康检查

Nginx健康检查nginx_upstream_check_module nginx健康检查介绍: ​ 主动健康检查&#xff0c;nignx定时主动地去ping后端的服务列表&#xff0c;当发现某服务出现异常时&#xff0c;把该服务从健康列表中移除&#xff0c;当发现某服务恢复时&#xff0c;又能够将该服务加回健…

Java并发--内存结构图及线程安全

内存结构图 内存-> (开辟的数组) -> (方法区&#xff0c;堆&#xff0c;栈&#xff0c;程序计数器&#xff0c;本地方法栈) 堆&#xff1a;几乎所有的对象实例都在这里分配内存。堆中每个对象的头信息都标属着他属于哪个类。 方法区它用于存储已被虚拟机加载的类型信息…

牛客_左右最值最大差_C++题解

原题链接&#xff1a;牛客 题目缩写&#xff1a;给你一个数组&#xff0c;由你来进行一个切分&#xff0c;分为两份&#xff0c;每份至少有1个元素&#xff1b;你分出来的这两个区间中各自有一个最大值&#xff0c;两者之差再求绝对值就是答案&#xff0c;这个答案越大越好&am…

认识异常(2)

❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; hellohello~&#xff0c;大家好&#x1f495;&#x1f495;&#xff0c;这里是E绵绵呀✋✋ &#xff0c;如果觉得这篇文章还不错的话还请点赞❤️❤️收藏&#x1f49e; &#x1f49e; 关注&#x1f4a5;&a…

【Linux系统】操作备忘录

Linux命令 打开终端的快捷键&#xff1a;Ctrl Alt t 退出终端的命令&#xff1a;exit 终端命令行复制/粘贴的快捷键 &#xff1a;Ctrl Shift c / v 对于所有不太熟悉的命令&#xff0c;都可以在终端输入 命令名称 --help 来查看具体用法。例如&#xff1a; 文件和目录…

电池电量监测系统设计 单片机+LabVIEW+Matlab+Protues+Keil程序

目录 前言 提供 软件 系统展示 1.放电试验及其处理 2.硬件系统原理图 3.下位机程序 4.显示 5.上位机界面 6.上位机程序 7.文档 资料下载地址&#xff1a;电池电量监测系统设计 单片机LabVIEWMatlabProtuesKeil程序 前言 这套系统首先使用Matlab分析获得了电压…

项目5-博客系统3+接口完

1.实现显示用户信息 ⽬前⻚⾯的⽤⼾信息部分是写死的. 形如 我们期望这个信息可以随着用户登陆而发生改变. • 如果当前⻚⾯是博客列表⻚, 则显⽰当前登陆⽤⼾的信息. • 如果当前⻚⾯是博客详情⻚, 则显⽰该博客的作者⽤⼾信息. 注意: 当前我们只是实现了显⽰⽤⼾名, 没有…

Swagger的使用教程

Swagger简介 Swagger是一个规范和完整的API框架&#xff0c;可用于生成、描述、调用Restful风格的Web服务的接口文档。如果你在SpringBoot中使用的话&#xff0c;在项目启动后可以自动生成在线可调用的API文档&#xff0c;非常方便&#xff01; 在SpringBoot中集成 首先在po…

797. 所有可能的路径

给你一个有 n 个节点的 有向无环图&#xff08;DAG&#xff09;&#xff0c;请你找出所有从节点 0 到节点 n-1 的路径并输出&#xff08;不要求按特定顺序&#xff09; graph[i] 是一个从节点 i 可以访问的所有节点的列表&#xff08;即从节点 i 到节点 graph[i][j]存在一条有向…

办公小助手来啦! Textin接口,轻松提取文件信息,让你如虎添翼!

&#x1f60e;大家是不是经常为了一堆文件而头疼呢&#xff1f;&#x1f4da;别担心&#xff0c;Textin接口它来了&#xff01;&#x1f389; 一、Textin的神秘面纱 1. Textin是谁&#xff1f; &#x1f50d;Textin接口&#xff0c;一款专业的文件信息提取工具&#xff0c;只…

Arco design 发布到生成环境F5刷新报错404

问题&#xff1a;开发环境没问题&#xff0c;生成环境正常跳转也没问题但是F5刷新报错 解决办法一&#xff1a;修改 history: createWebHistory(), 改为history: createWebHashHistory(),

微服务-6 Gateway网关

一、网关搭建 此时浏览器访问 localhost:10010/user/list 后正常返回数据&#xff0c;说明网关已生效&#xff0c;其原理流程图如下&#xff1a; 二、网关过滤器 作用&#xff1a;处理一切进入网关的请求和微服务响应。 1. 网关过滤器的分类&#xff1a; a. 某个路由的过滤器 …

C语言 | Leetcode C语言题解之第26题删除有序数组中的重复项

题目&#xff1a; 题解&#xff1a; int removeDuplicates(int* nums, int numsSize) {if (numsSize 0) {return 0;}int fast 1, slow 1;while (fast < numsSize) {if (nums[fast] ! nums[fast - 1]) {nums[slow] nums[fast];slow;}fast;}return slow; }

教程备忘 一文搞定 cmake 全部技巧之 app 和 lib 的 cmake 系统

1&#xff0c;APP cmake 1.1 hello_app_01 文件&#xff1a;hello.cpp add_impl.cpp sub_impl.cpp CMakeLists.txt hello.cpp #include <iostream> float add(float, float); float sub(float, float);int main() {float a, b;a 7.7f;b 2.333f;std::cout<&l…

Java面试之redis篇

文章目录 布隆过滤器BloomFilter布隆过滤器是什么、能干嘛原理hash冲突导致数据不精确 缓存预热缓存雪崩发生预防 缓存穿透缓存穿透是什么解决 工作中哪里使用过redis 布隆过滤器BloomFilter 布隆过滤器是什么、能干嘛 由一个初值都为零的bit数组和多个哈希函数构成&#xff…