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

目录

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可正常访问)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【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模拟实…

ffmpeg 免安装,配置环境变量

1、下载ffmpeg https://download.csdn.net/download/qq284489030/88579595 2、解压 解压ffmpeg-4.4-essentials_build.zip到目标文件夹&#xff0c;比如 d:\apps下&#xff1b; 3、配置环境变量 &#xff08;1&#xff09;电脑桌面鼠标右键点击“此电脑”&#xff0c;弹出…

[带余除法寻找公共节点]二叉树

二叉树 题目描述 如上图所示&#xff0c;由正整数1, 2, 3, ...组成了一棵无限大的二叉树。从某一个结点到根结点&#xff08;编号是1的结点&#xff09;都有一条唯一的路径&#xff0c;比如从10到根结点的路径是(10, 5, 2, 1)&#xff0c;从4到根结点的路径是(4, 2, 1)&#x…

C++算法入门练习——数据流第K大元素

现有一个初始为空的序列S&#xff0c;对其执行n个操作&#xff0c;每个操作是以下两种操作之一&#xff1a; 往序列S中加入一个正整数x&#xff1b;输出当前序列S​中第k​大的数。 其中&#xff0c;第k大是指将序列从大到小排序后的第k个数。 利用stl里的priority_queue自动…

如何让电脑每天定时自动关机?

如何让电脑每天定时自动关机&#xff1f;电脑已经成为社会生产活动中不可或缺的一种工具&#xff0c;它对于我们每个人都非常的重要&#xff0c;不管是工作、生活还是学习中&#xff0c;我们都需要利用电脑。不过很多小伙伴因为繁忙或者因为其它的事情&#xff0c;导致电脑经常…

Vue3水印(Watermark)

APIs 参数说明类型默认值必传width水印的宽度&#xff0c;默认值为 content 自身的宽度numberundefinedfalseheight水印的高度&#xff0c;默认值为 content 自身的高度numberundefinedfalserotate水印绘制时&#xff0c;旋转的角度&#xff0c;单位 number-22falsezIndex追加…

oracle官方的反解析工具:javap详解

1、解析字节码的作用 通过反编译生成的字节码文件&#xff0c;我们可以深入的了解java代码的工作机制。但是&#xff0c;自己分析类文件结构太麻烦了&#xff01;除了使用第三方的jclasslib工具之外&#xff0c;oracle官方也提供了工具&#xff1a;javap javap是jdk自带的反解…

数据结构与算法之美学习笔记:28 | 堆和堆排序:为什么说堆排序没有快速排序快?

目录 前言如何理解“堆”&#xff1f;如何实现一个堆&#xff1f;1. 往堆中插入一个元素2. 删除堆顶元素 如何基于堆实现排序&#xff1f;1. 建堆2. 排序 解答开篇内容小结 前言 本节课程思维导图&#xff1a; 我们今天讲另外一种特殊的树&#xff0c;“堆”&#xff08;Heap&…

【蓝桥杯选拔赛真题69】Scratch洗牌发牌 少儿编程scratch图形化编程 蓝桥杯创意编程选拔赛真题解析

目录 scratch洗牌发牌 一、题目要求 编程实现 二、案例分析 1、角色分析

2023年大数据场景智能运维实践总结

作者&#xff1a;放纵 引言 在当今数字化世界中&#xff0c;如何充分挖掘和发挥数据价值已经成为了企业成功的关键因素&#xff0c;大数据也成为企业决策和运营的重要驱动力。在《当我们在谈论DataOps时&#xff0c;我们到底在谈论什么》一文中也提到&#xff0c;企业在面对到…

P8A004-系统加固-磁盘访问权限

【预备知识】 访问权限&#xff0c;根据在各种预定义的组中用户的身份标识及其成员身份来限制访问某些信息项或某些控制的机制。访问控制通常由系统管理员用来控制用户访问网络资源&#xff08;如服务器、目录和文件&#xff09;的访问&#xff0c;并且通常通过向用户和组授予…

数据结构与算法--特殊的完全二叉树--堆,堆排序,利用堆解决topk的问题

目录 前言 1.树概念及结构 1.1树的概念 1.2 树的相关概念 1.3 树的表示 1.4 树在实际中的运用&#xff08;表示文件系统的目录树结构&#xff09; 2.二叉树概念及结构 2.1概念 2.2现实中的二叉树&#xff1a; 2.3 特殊的二叉树&#xff1a; 2.4 二叉树的性质 …

网络协议系列:TCP三次握手,四次挥手的全过程,为什么需要三次握手,四次挥手

TCP三次握手&#xff0c;四次挥手的全过程&#xff0c;为什么需要三次握手&#xff0c;四次挥手 一. TCP三次握手&#xff0c;四次挥手的全过程&#xff0c;为什么需要三次握手&#xff0c;四次挥手前言TCP协议的介绍三次握手三次握手流程&#xff1a;1. A 的 TCP 向 B 发送 连…

Windows关闭端口服务命令

winR 打开命令运行 cmd 命令netstat -o -n -a | findstr :9993 显示所有的端口占用情况 -a 显示所有连接和监听端口 -n 以数字形式显示地址和端口号。 此选项一般与 -a选项组合使用 -o 显示与每个连接相关的所属进程 ID 终止 PID taskkill /F /PID 3652

从独立求存到登顶市场,荣耀为何能在手机红海翻出新的浪花?

对企业的价值评估&#xff0c;往往离不开对其所处行业前景的考量。在蓝海赛道布局的企业&#xff0c;往往要比在红海市场突围的企业更容易受到资本重视。 但这并非绝对&#xff0c;若是一家企业能够在饱和的红海市场中&#xff0c;实现新的增长&#xff0c;其蕴涵的成长价值便…

Influx集群解决方案(Influx Proxy篇)

InFluxDB 集群搭建 本次搭建使用influx proxy 介绍 github地址:https://github.com/chengshiwen/influx-proxy/ Influx Proxy 是一个基于高可用、一致性哈希的 InfluxDB 集群代理服务&#xff0c;实现了 InfluxDB 高可用集群的部署方案&#xff0c; 具有动态扩/缩容、故障恢复…

字符串函数精讲1

又是好几天没有更新了&#xff0c;最近有些忙&#xff0c;但这并不是理由&#xff0c;还是怪我自己玩的时间多了&#xff01;但还是有在每天敲代码的&#xff01;话不多说&#xff0c;开始这一期的学习&#xff1a; strlen的使用和模拟实现 • 字符串以 \0 作为结束标志&#…

java学习part24异常throws

127-异常处理-异常处理方式二&#xff1a;throws_哔哩哔哩_bilibili 1.方法throws 2.如何抉择try和throws 3.手动throw语句 抛出一些java语法上没错但是不符合实际情况的异常。 用throw手动抛&#xff0c;方法上必须加throws。除非是运行时异常。 4.自定义异常

Java常见CodeReview及编码规范

鉴于自己的开发经验,以及常见容易产生bug及性能问题的点做个记录. 1.数据库 如果开发人员的经验不足,Java通过ORM(Mybatis)对数据库的操作的性能问题比较隐蔽.因为不压测或者异常case没发生的时候一般发现不了问题.特别是异常case发生的时候. 除配置表以外的sql都要经过expl…

软件设计师——程序设计语言基础(一)

&#x1f4d1;前言 本文主要是【程序设计语言基础】——程序设计语言基础的相关题目&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#…