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为19hset 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.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsdhttp://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 {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;@Testpublic 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.mzph.cn/news/182976.shtml

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

相关文章

【Apifox】token的使用方式和脚本示例

前言&#xff0c;关于token的使用&#xff0c;仅做了简单的demo测试token效果。 一、手动登录获取token 顾名思义&#xff0c;因为只有登录之后才有token的信息&#xff0c;所以在调用其他接口前需要拥有token才能访问。 操作步骤 1)添加环境变量、全局参数 这里拿测试环境举…

前端编码规范

文章目录 一、背景二、内容1、注释规范&#xff08;1&#xff09;文件注释&#xff08;2&#xff09;函数注释&#xff08;3&#xff09;单行注释&#xff08;3&#xff09;多行注释 2、命名规范&#xff08;1&#xff09;项目命名&#xff08;2&#xff09;目录命名&#xff0…

Bug 检查 0x7B:INACCESSIBLE_BOOT_DEVICE(未解决)

环境&#xff1a; HP ProDesk 480 G7 Win10 专业版 问题描述&#xff1a; INACCESSIBLE_BOOT_DEVICE bug 检查的值为0x0000007B。 此 bug 检查表明 Microsoft Windows 操作系统在启动过程中无法访问系统分区 原因&#xff1a; 1.INACCESSIBLE_BOOT_DEVICE bug 检查经常发生…

大数据Hadoop-HDFS_元数据持久化

大数据Hadoop-HDFS_元数据持久化 &#xff08;1&#xff09;在HDFS第一次格式化后&#xff0c;NameNode&#xff08;即图中的主NameNode&#xff09;就会生成fsimage和editslog两个文件&#xff1b; &#xff08;2&#xff09;备用NameNode&#xff08;即图中的备NameNode&…

【学习笔记】GAN实战(基础)

本文介绍构建和训练生成对抗网络(GAN)的方法。 生成对抗网络(GAN)与生成模型导论 生成对抗网络(Generative Adversarial Network,GAN) GAN简介 机器学习算法擅长识别已有数据中的模式,并将这种能力用于分类(为样本分配正确类别)和回归(根据一系列的输入进行数值…

【Lustre相关】功能实践-03-文件级冗余(FLR)

一、前言 DDN-03.11-File Level Redundancy (FLR) Category:FLR 1、功能介绍 在文件级冗余&#xff08;File Level Redundancy&#xff0c;FLR&#xff09;特性出现之前&#xff0c;Lustre文件系统数据冗余完全依赖于后端存储设备&#xff08;如RAID6&#xff09;。 Lustre在L…

SpringCloudSleuth+Zipkin 整合及关键包汇总

背景 整合了一下 SpringCloudSleuth Zipkin&#xff0c;本来是很简单的东西&#xff0c;但是最终导出依赖包时没注意&#xff0c;导致目标服务上始终没有纳入 Zipkin 的链路追踪中&#xff0c;本文记录这个过程及关键依赖包。 部署zipkin 官网下载最新的 zipkin 可执行包&a…

创建Asp.net MVC项目实现视图页面数据传值显示

MVC中视图传值 ViewData ViewBag TempData 举例创建三中传值方式实现页面数据展示 MVC中视图传值 Asp.net MVC中Controller向View传值有多种方式,这里简单说一下其中3种方式 ViewData、ViewBag和TempData ViewData ViewData存储数据&#xff0c;ViewData的声明和赋值方…

基于物联网的交叉口智能交通灯控制系统设计与实现

摘 要 智能视频监控技术是近年来新兴的一种利用计算机视觉技术&#xff0c;人工智能技术和数字视频处理技术对监控视频的目标进行识别&#xff0c;通过对此的分析处理&#xff0c;从而对视频监控系统进行控制&#xff0c;智能视频监控技术是一项较为复杂的课题。特别是对运动物…

代码随想录算法训练营第五十九天| 503.下一个更大元素II 42. 接雨水

文档讲解&#xff1a;代码随想录 视频讲解&#xff1a;代码随想录B站账号 状态&#xff1a;看了视频题解和文章解析后做出来了 503.下一个更大元素II class Solution:def nextGreaterElements(self, nums: List[int]) -> List[int]:res [-1] * len(nums)stack []for i in…

普中STM32 单片机资料

普中科技–各型号开发板资料下载链接: ①普中-精灵1开发板: 百度网盘链接:https://pan.baidu.com/s/1Pa8Ep1xmg6uoq17O6Nwyyw?pwd=1234 提取码:1234 ②普中-ESP32开发板: 百度网盘链接:https://pan.baidu.com/s/16VthcbW27oEWp162H3bi6Q?pwd=1234 提取码:1234 一…

Springboot 使用 阿里的 druid 连接池 启用 wall sql防火墙的情况下怎么支持多sql同时执行?

1、问题如上&#xff0c;看了不少网上的文章&#xff0c;在我这都不生效&#xff0c;网上主要的解决思路有两个。 第一个是&#xff1a;去掉配置文件中的 wall filter # 修改之前 spring.datasource.druid.filtersstat,wall,log4j# 修改之前 spring.datasource.druid.filte…

【Pytorch】Visualization of Feature Maps(5)——Deep Dream

学习参考来自&#xff1a; PyTorch实现Deep Dreamhttps://github.com/duc0/deep-dream-in-pytorch 文章目录 1 原理2 VGG 模型结构3 完整代码4 输出结果5 消融实验6 torch.norm() 1 原理 其实 Deep Dream大致的原理和【Pytorch】Visualization of Feature Maps&#xff08;1&…

一次Apollo Client升级导致的生产404 Not Found问题排查记录

概述 本文记录一次升级Apollo Client组件到1.7.0后遇到的重大生产事故。只想看结论的&#xff0c;可直接快进到文末。实际上&#xff0c;第一句话就是一个结论。 另&#xff0c;本文行文思路事后看起来可行略显思路清晰&#xff0c;实际上排查生产问题时如无头苍蝇&#xff0…

Python TypeError: int() argument must be a string, a bytes原因

int()函数的TypeError Python开发过程中&#xff0c;使用int()函数来转换或生成int类型的数据时&#xff0c;如果Python抛出并提示TypeError: int() argument must be a string, a bytes-like object or a real number, not complex&#xff0c;那么原因在于传递给int()函数的…

45、Flink 的指标体系介绍及验证(3)- 完整版

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…

day67

今日回内容 视图层 响应对象 cbv和fbv 上传文件 模板层 视图层 一、响应对象 响应对象的本质都是 HttpResponse HttpResponse:字符串 render&#xff1a; 将一个模板页面中的模板语法进行渲染&#xff0c;最终渲染成一个html页面作为响应体。 redirect&#xff1a;重定向 …

Java SpringBoot DES加密解密

可以使用 hutool加密 &#xff0c;在本地没什么问题&#xff0c;但是在服务器会出现JDK安全问题 JCE cannot authenticate the provider BC 可以在本地写工具类进行DES加密 package com.neusoft.hit.cmpd.emg.nurse.information.utils;import javax.crypto.BadPaddingExceptio…

MATLAB基础应用精讲-【基础知识篇】MATLAB脚本和函数

目录 循环和条件语句 函数文件 函数句柄 输入参数数量 变量名称 实时脚本

药物副作用预测网络---------数据处理(2)

上一篇文章已经对7个txt文件做出了初步的筛选&#xff0c;现在借用excel来进行需要的数据筛选以及对空值的填补。&#xff08;ps,其实主要就是对DEMO以及DRUG的清洗&#xff09; 1.DEMO文件&#xff1a;&#xff08;主要存储了报告信息以及病例患者的基本信息&#xff09; pr…