Redis 基础、字符串、哈希、有序集合、集合、列表以及与 Jedis 操作 Redis 和与 Spring 集成。

news2025/1/7 19:11:30

目录

1. 数据类型

1.1 字符串

1.2 hash

1.3 List

1.4 Set

1.5 sorted set

2. jedis操作redis

3. 与spring集成


1. 数据类型

1.1 字符串

String是最常用的数据格式,普通的kay-value都归结为此类, value值不仅可以是string,可以是数字。
使用场景:通过用户的访问次数为依据封锁ip,可以将用户的访问次数已string类型记录在redis中,并通过
INCRBY操作,每次访问进行递增。
常用命令:
get, set, incr, decr, mget

示例:

​
# set
set name  zhangsan

# get
get name

#查看redis所有key
keys *

#查看redis中以name开发的key
keys name*

#设置一个数字
set num 1

#自增
incr num

#递减
decr num

​

1.2 hash

使用场景: 例如用户包含id,name,addr等属性,当需要使用redis存放用户信息时,可以使用hash。(和java中的Map很像)
常用命令: hget,hset,hgetall等

示例:

 # 以user:001为键,hash中有两个属性name为zs,age为19
 hset user:001 name zs age 19
 
 #获取以user:001为键,属性age的值
 hget user:001 age
 
 # 获取键为user:001的所用属性值
 hgetall user:001

1.3 List

应用场景:最新消息排行; 消息队列。利用Lists的push的操作,将任务存储在list中,然后工作线程再用pop操作将任务取出进行执行。

常用命令:
lpush,rpush,lpop,rpop,lrange,BLPOP(阻塞版)等

示例:

# 向队列中push数据
lpush bills zs li wu zl

#从队列中弹出数据,弹出后队列中的数据不保存
lpop bills

#队列的长度
llen bills

1.4 Set

常用场景: set与list比较类似,特殊之处是set可以自动排重,同时set还提供了某个成员是否存在于一个set内的接口,这个在list也没有。
常用命令:
sadd,srem,spop,sdiff ,smembers,sunion 等

示例:

# 向集合aa中加入1 2 3 4 5
sadd aa 1 2 3 4 5

# 向集合bb中加入4 5 6 7 8
sadd bb 4 5 6 7 8

# 返回集合aa中的所有元素
smembers aa

# 判断集合aa中是否存在元素1  ,存在返回1,不存在返回0
sismember aa 1

#返回aa集合中存在但bb中不存在的元素,返回 1 2 3 (差集)
sdiff aa bb

#求aa和bb集合的差集,并将结果保存到cc中去
sdiffstore cc aa bb

#求aa和bb的交集
sinter aa bb

#求aa和bb的交集,并将其存放到dd集合中去
sinterstore dd aa bb

#求aa和bb的并集
sunion aa bb

#求aa和bb的并集,将将其结果存放如ee集合
sunionstore ee aa bb

# 从ee集合中弹出3个元素(随机),默认弹出1个元素
spop ee 3

1.5 sorted set

使用场景:zset的使用场景与set类似,区别是set不是有序的,而zset可以通过用户额外提供的一个优先级(score即分值)参数来为成员排序,插入后自动排序。例如:将所有评论按发表时间为score存储,可以方便获取最新发表的评论;全班同学成绩的SortedSets,value可以是同学的学号,而score就可以是其考试得分,这样数据插入集合的,就已经进行了天然的排序。
另外还可以用Sorted Sets来做带权重的队列,比如普通消息的score为1,重要消息的score为2,然后工作线程可以选择按score的倒序来获取工作任务。让重要的任务优先执行。

常用命令:
zadd,zrange,zrem,zcard,zcount等

示例:

#将zs, ww, ls加入有序集合,其中zs 分值为1, ww 分值为2, ls分值为3
zadd zaa 1 zs 2 ww 3 ls

#获取zaa集合中score值从1到2范围内的元素
zrangebyscore zaa 1 2

#获取有序集合的成员数
zcard zaa

#计算在有序集合中指定区间分数的成员数
zcount zaa 1 2
#判断key在redis中是否存在。
exists key

2. jedis操作redis

1)创建一个maven工程
File ->New -> maven project -> create a simple project,输入maven坐标。

2) 在pom.xml文件中加jedis依赖

      <dependencies>
            <dependency>
                  <groupId>redis.clients</groupId>
                  <artifactId>jedis</artifactId>
                  <version>2.9.0</version>
            </dependency>
      </dependencies>

3)在pom.xml中指定jdk版本

<build>
    <finalName>填写自己的项目名称</finalName>
    <plugins>
          <!--第一步就是配置maven-compiler-plugin插件 -->
          <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.7.0</version>
                <configuration>
                      <source>1.8</source>
                      <target>1.8</target>
                      <encoding>UTF-8</encoding>
                </configuration>
          </plugin>
    </plugins>
</build>

3)示例代码


//创建Jedis实例,连接redis
Jedis jedis = new Jedis("192.168.62.133",6379);

//ping,如果成功返回 pong
String rv = jedis.ping();
System.out.println(rv);

//string
jedis.set("name", "zs");

//hash
jedis.hset("user", "name", "张三");
jedis.hset("user", "age", "20");
jedis.hset("user", "tele", "12344344343");
jedis.hset("user", "addr", "长沙");

Map<String,String> user = new HashMap<>();
user.put("name", "李四");
user.put("age", "23");
user.put("tele", "23897989");
user.put("addr", "成都");
jedis.hmset("user02", user);

//list
jedis.lpush("list", "a");
jedis.lpush("list", "b");
jedis.lpush("list", "c");
jedis.lpush("list", "d");

System.out.println(jedis.rpop("list"));
System.out.println(jedis.rpop("list"));
System.out.println(jedis.rpop("list"));
System.out.println(jedis.rpop("list"));

//set
jedis.sadd("set", "aa","bb","cc");
System.out.println(jedis.spop("set"));
System.out.println(jedis.spop("set"));
System.out.println(jedis.spop("set"));

//sortset
Map<String,Double> zz = new HashMap<>();
zz.put("zz", 0.1D);
jedis.zadd("zset", zz);

Map<String,Double> ff = new HashMap<>();
ff.put("ff", 0.2D);
jedis.zadd("zset", ff);

Map<String,Double> qq = new HashMap<>();
qq.put("qq", 0.3D);
jedis.zadd("zset", qq);

System.out.println(jedis.zrangeByScore("zset", 0.1, 0.2));

//命令返回有序集中,指定区间内的成员, 其中成员的位置按分数值递减(从大到小)来排列
System.out.println(jedis.zrevrange("zset", 0, -1));

3. 与spring集成

1) 在pom.xml文件中导入依赖的包


<properties>
    <!-- redis版本 -->
    <redis.version>2.9.0</redis.version>
    <spring.redis.version>2.0.10.RELEASE</spring.redis.version>
    <spring.version>5.0.1.RELEASE</spring.version>
</properties>

<dependencies>
    <dependency>
          <groupId>redis.clients</groupId>
          <artifactId>jedis</artifactId>
          <version>${redis.version}</version>
    </dependency>

    <!--2. spring相关(5.0.1.RELEASE) -->
    <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-context</artifactId>
          <version>${spring.version}</version>
    </dependency>

    <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-orm</artifactId>
          <version>${spring.version}</version>
    </dependency>

    <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-web</artifactId>
          <version>${spring.version}</version>
    </dependency>

    <!-- aop -->
    <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-aop</artifactId>
          <version>${spring.version}</version>
    </dependency>

    <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-test</artifactId>
          <version>${spring.version}</version>
    </dependency>

    <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-aspects</artifactId>
          <version>${spring.version}</version>
    </dependency>

    <dependency>
          <groupId>org.aspectj</groupId>
          <artifactId>aspectjrt</artifactId>
          <version>1.6.11</version>
    </dependency>
    
    <dependency>
          <groupId>org.aspectj</groupId>
          <artifactId>aspectjweaver</artifactId>
          <version>1.6.11</version>
    </dependency>

    <dependency>
          <groupId>cglib</groupId>
          <artifactId>cglib</artifactId>
          <version>2.1_3</version>
    </dependency>

    <!--spring redis 支持-->
    <dependency>
         <groupId>org.springframework.data</groupId>
         <artifactId>spring-data-redis</artifactId>
         <version>1.7.2.RELEASE</version>
    </dependency>
    <!-- end -->
    
    <!--当将对象在redis中存储为json时需要-->
    <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-core</artifactId>
          <version>2.1.0</version>
    </dependency>

    <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-databind</artifactId>
          <version>2.1.0</version>
    </dependency>

    <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-annotations</artifactId>
          <version>2.1.0</version>
    </dependency>

    <!--测试-->
    <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.12</version>
          <scope>test</scope>
    </dependency>

</dependencies>

2)spring-redis.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:aop="http://www.springframework.org/schema/aop"

      xmlns:context="http://www.springframework.org/schema/context" 
xmlns:tx="http://www.springframework.org/schema/tx"

      xsi:schemaLocation="http://www.springframework.org/schema/beans 
                                    http://www.springframework.org/schema/beans/spring-beans.xsd
                          http://www.springframework.org/schema/aop 
                                    http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
                          http://www.springframework.org/schema/context 
                                    http://www.springframework.org/schema/context/spring-context-4.3.xsd
                          http://www.springframework.org/schema/tx 
                                    http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">          

      <context:component-scan base-package="com.zking"/>

    <!-- 连接池基本参数配置,类似数据库连接池 -->
    <context:property-placeholder location="classpath:redis.properties" ignore-unresolvable="true" />
   

    <!--redis连接池 -->  
    <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <property name="maxTotal" value="${redis.maxActive}" />
        <property name="maxIdle" value="${redis.maxIdle}" />
        <property name="testOnBorrow" value="${redis.testOnBorrow}" />
    </bean>

    <!-- 连接池配置,类似数据库连接池 -->
    <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">     
        <property name="hostName" value="${redis.host}"></property>
        <property name="port" value="${redis.port}"></property>
        <!-- <property name="password" value="${redis.pass}"></property> -->
        <property name="poolConfig" ref="poolConfig"></property>
    </bean>


    <!--redis操作模版,使用该对象可以操作<u>redis</u>  -->  
    <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate" >
        <property name="connectionFactory" ref="jedisConnectionFactory"/>   

        <!--如果不配置Serializer,那么存储的时候缺省使用String,如果用User类型存储,那么会提示错误User can't cast to String!!  -->    
        <property name="keySerializer" >    
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />  
        </property>    
        <property name="valueSerializer" >    
            <bean class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer"/> 
        </property>    
        <property name="hashKeySerializer">    
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/>
        </property>    
        <property name="hashValueSerializer">    
            <bean class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer"/>   
        </property>    
        <!--开启事务  -->  
        <property name="enableTransactionSupport" value="true">
        </property>  
    </bean >

</beans>

3) 测试类

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath*:spring*.xml")
@SuppressWarnings("all")
public class TestRedis {

      @Autowired
      private RedisTemplate<String, Object> redisTemplate;
      
      @Test
      public void testRedis() {
            redisTemplate.opsForHash().put("myhash", "name", "xiaoxiao");
            redisTemplate.opsForHash().put("myhash", "age", "12");
            redisTemplate.opsForHash().put("myhash", "addr", "changsha");
      
            Map<Object, Object> entries = redisTemplate.opsForHash().entries("myhash");

            for(Map.Entry e: entries.entrySet()) {
                  System.out.println(e.getKey());
                  System.out.println(e.getValue());
            }
      }
}

测试类通过则说明集成完成(请确定redis可正常访问)

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

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

相关文章

数据库中生成列的对比

简介 生成列&#xff08;虚拟列&#xff09;&#xff1a;在实际开发中&#xff0c;相对一个历史数据的表增加一个字段&#xff0c;增加下游报表&#xff0c;数据分析的可用性。常见的方法就是删表重建&#xff0c;或者使用ADD column 语法。如果是一个历史表&#xff0c;删…

[问题解决] no CUDA-capable device is detected

先说环境&#xff0c;在docker下的gpu环境ffmpeg&#xff0c;然后今天突然无法使用&#xff0c;使用时出现如下图所示&#xff1a; 看着报错大致内容是找不到设备&#xff0c;网上寻找一番没有有用的东西&#xff0c;于是决定自己解决&#xff0c;仔细察看一番后&#xff0c;猜…

使用netconf配置华为设备

实验目的&#xff1a; 公司有一台CE12800的设备&#xff0c;管理地址位172.16.1.2&#xff0c;现在需要编写自动化脚本&#xff0c;通过SSH登陆到设备上配置netconf协议的用户名&#xff0c;密码以及netconf服务&#xff0c;并且通过netconf协议将设备的loopback0接口IP地址配…

unity程序中的根目录

在unity程序中如果要解析或保存文件时&#xff0c;其根目录为工程名的下一级目录&#xff0c;也就是Assets同级的目标

【数据结构】- 详解线索二叉树(C 语言实现)

目录 一、线索二叉树的基本概念 二、构造线索二叉树 三、遍历线索二叉树 一、线索二叉树的基本概念 遍历二叉树是以一定规则将二叉树中的结点排列成一个线性序列&#xff0c;得到二叉树中结点的先序序列、中序序列或后序序列。这实质上是对一个非线性结构进行线性化操作&am…

【同一局域网下】两台电脑之间互ping

两台电脑互ping 首先需要连接同一网咯关闭需要ping的电脑的防火墙 关闭防火墙步骤&#xff08;以win11系统为例&#xff09;&#xff1a; 设置 --> 隐私和安全性 --> Windows 安全中心 打开Windows安全中心 防火墙和网络保护 --> 选择正在使用的网络 关闭 ping其他…

Unity 轨道展示系统(DollyMotion)

DollyMotion &#x1f371;功能展示&#x1f959;使用&#x1f4a1;设置路径点&#x1f4a1;触发点位切换&#x1f4a1;动态更新路径点&#x1f4a1;事件触发&#x1f4a1;设置路径&#x1f4a1;设置移动方案固定速度方向最近路径方向 &#x1f4a1;设置移动速度曲线 传送门 &a…

厦门城市内涝积水预防方案

随着城市化进程的加速&#xff0c;城市内涝问题日益凸显&#xff0c;给人们的生命财产安全带来了严重威胁。为了解决这一问题&#xff0c;城市内涝积水监测系统的应用逐渐受到广泛关注。本文将探讨城市内涝积水监测系统的优点及作用&#xff0c;为保障城市生命线的安全提供有力…

无电机光电测径仪稳定性好

目前市面上的在线测径仪主要是有电机的激光扫描式测径仪与无电机的光电平行光测径仪。均能完成外径尺寸的高精度尺寸检测&#xff0c;本文来简单介绍一下无电机光电测径仪的优势。 光电测径仪检测原理 发射镜头内置一个点光源&#xff0c;点光源发出的光通过透镜系统&#xf…

YashanDB入选2023年世界互联网大会领先科技奖成果集《科技之魅》

近日&#xff0c;由深圳计算科学研究院自主研发的“崖山数据库系统YashanDB”入编2023年世界互联网大会领先科技奖成果集《科技之魅》。此次入选&#xff0c;充分彰显了YashanDB在数据库技术领域的突破性创新成果。 《科技之魅》是世界互联网大会领先科技奖的重要成果&#xff…

智慧环保:视频监控平台EasyCVR与AI智能分析在环保领域的应用

人工智能&#xff08;AI&#xff09;视频分析技术在环保领域有着广泛的应用&#xff0c;通过智能识别和跟踪技术&#xff0c;AI视频分析可以实时监测空气质量、水质和噪音等环境指标&#xff0c;帮助环保部门及时发现污染源并进行有效治理&#xff0c;提高监测、管理和保护环境…

蓝桥杯第一天-----时间显示

文章目录 前言一、题目描述二、测试用例三、题目分析四、具体代码实现总结 前言 本章中将相信介绍蓝桥杯中关于时间显示的题目。 链接&#xff1a;https://www.lanqiao.cn/problems/1452/learning/ 一、题目描述 二、测试用例 三、题目分析 1.输入的时间为毫秒&#xff0c;毫…

结构体数组和结构体指针

在按键中断中&#xff0c;使用了结构体数组的语法&#xff1a; struct irq_dev imx6uirq; /* key设备 *///提取出GPIO对应的编号for (i 0; i < KEY_NUM; i) {imx6uirq.irqkeydesc[i].gpio of_get_named_gpio(imx6uirq.nd,"key-gpios", i);if (imx6uirq.irq…

十大排序算法及其特性最全总结,以408考察特性为基准

文章目录 一、冒泡排序&#xff08;Bubble Sort&#xff09;1.基本思想2.动图演示3.算法描述4.代码实现 二、快速排序&#xff08;Quick Sort&#xff09;☆1.基本思想2.动图演示3.算法描述4.代码实现 三、选择排序&#xff08;Selection Sort&#xff09;1.基本思想2.动图演示…

Linux创建与编辑视图

本博客将会详细讲解如何在Linux中如何编辑配置文件 输出重定向 对于一台设备而言&#xff0c;存在着两种设备&#xff0c;分别负责输入与输出&#xff1a; 显示器&#xff08;输出设备>&#xff09; 与 键盘&#xff08;输入设备<&#xff09; 对于Linux系统而言&#…

数据结构算法-分支定界算法

引言 应该记得这一张图片&#xff0c;在A星算法里面说过 那么现在说的是换一种方式实现 如何实现&#xff1f; 之前不撞南墙不回头的方法-深度优先搜索 的方式 广度优先搜索方式 广度优先搜索&#xff1a;就是说按照顺序入队 并且搜索扩展节点 探测四面八方&#xff0c;如此循环…

【c语言:常用字符串函数与内存函数的使用与实现】

文章目录 1. strlen函数1.1使用1.2模拟实现 2.strcmp函数2.1使用2.2模拟实现 3.strncmp函数3.1使用3.2模拟实现 4.strcpy函数4.1 使用4.2模拟实现 5.strcncpy5.1使用5.2模拟实现 6.strcat函数6.1使用6.2模拟实现 7.strncat函数7.1使用7.2模拟实现 8.strstr函数8.1使用8.2模拟实…

com.mongodb.MongoSocketOpenException: Exception opening socket

估计mongodb数据库没开启&#xff0c;或者链接错误了&#xff0c;谁又改了&#xff0c;唉 2023-11-29 16:19:45.818 INFO 39552 --- [127.0.0.1:27017] org.mongodb.driver.cluster : Exception in monitor thread while connecting to server 127.0.0.1:27017…

【JavaScript】3.3 JavaScript工具和库

文章目录 1. 包管理器2. 构建工具3. 测试框架4. JavaScript 库总结 在你的 JavaScript 开发之旅中&#xff0c;会遇到许多工具和库。这些工具和库可以帮助你更有效地编写和管理代码&#xff0c;提高工作效率。在本章节中&#xff0c;我们将探讨一些常见的 JavaScript 工具和库&…

001 - 安装Qt并配置环境

进入Qt中文网站的下载界面 &#x1f449;点此进入 点进去之后&#xff0c;你会看到如下界面&#xff1a; 这里下载的是Qt开源版的在线安装器&#xff0c; 如果你觉得下载速度很慢&#xff0c;可以挂个梯子。双击打开&#xff1a; 因为是在线安装&#xff0c;所以你需要输入电子…