iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >spring使用RedisTemplate操作Redis数据库
  • 627
分享到

spring使用RedisTemplate操作Redis数据库

2024-04-02 19:04:59 627人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

一.什么是Redis Redis是一个非关系型数据库,具有很高的存取性能,一般用作缓存数据库,减少正常存储数据库的压力。 Redis可以存储键与5种不同数据结构类型之间的映射,这5种

一.什么是Redis

Redis是一个非关系型数据库,具有很高的存取性能,一般用作缓存数据库,减少正常存储数据库的压力。

Redis可以存储键与5种不同数据结构类型之间的映射,这5种数据结构类型分别为String(字符串)、List(列表)、Set(集合)、Hash(散列)和 Zset(有序集合)。

下面来对这5种数据结构类型作简单的介绍:

二.RedisTemplate及其相关方法

1.RedisTemplate

spring封装了RedisTemplate对象来进行对Redis的各种操作,它支持所有的Redis原生的api。RedisTemplate位于spring-data-redis包下。RedisTemplate提供了redis各种操作、异常处理及序列化,支持发布订阅,并对spring 3.1 cache进行了实现。RedisTemplate提供了redis各种操作、异常处理及序列化,支持发布订阅,并对spring 3.1 cache进行了实现。RedisTemplate提供了redis各种操作、异常处理及序列化,支持发布订阅,并对spring 3.1 cache进行了实现。RedisTemplate提供了redis各种操作、异常处理及序列化,支持发布订阅,并对spring 3.1 cache进行了实现。

注意 RedisTemplate是一个key和value都是泛型的模板类,一般情况下key为String类型,如:RedisTemplate<String,Object>。

此外,如果没特殊情况,切勿定义成RedisTemplate<Object, Object>,否则根据里氏替换原则,使用的时候会造成类型错误 。

spring-data-redis针对jedis提供了如下功能:
           1.连接池自动管理,提供了一个高度封装的“RedisTemplate”类
           2.针对jedis客户端中大量api进行了归类封装,将同一类型操作封装为operation接口
           ValueOperations:简单K-V操作
           SetOperations:set类型数据操作
           ZSetOperations:zset类型数据操作
           HashOperations:针对map类型的数据操作
           ListOperations:针对list类型的数据操作

2.RedisTemplate中定义了对5种数据结构操作


redisTemplate.opsForValue();//操作字符串
redisTemplate.opsForHash();//操作hash
redisTemplate.opsForList();//操作list
redisTemplate.opsForSet();//操作set
redisTemplate.opsForZSet();//操作有序set

其实这里的ops相当于options, 是RedisTemplate对各种不同的Redis数据类型进行操作。其实还有另外的方法:


redistempalate.boundValueOps
redistempalate.boundSetOps
redistempalate.boundListOps
redistempalate.boundHashOps
redistempalate.boundZSetOps

opsForXXX和boundXXXOps的区别?

XXX为value的类型,前者获取一个operator,但是没有指定操作的对象(key),可以在一个连接(事务)内操作多个key以及对应的value;后者获取了一个指定操作对象(key)的operator,在一个连接(事务)内只能操作这个key对应的value。

关于计数的API(increment)有一个bug,需要各位使用中注意,通过increment计数以后,通过get方式获取计数值的时候可能会抛出EOF异常(和本地的jdk以及redis的编译版本有关),可以考虑使用boundValueOps(key).get(0,-1)获取计数值。

三.RedisTemplate操作Redis数据库的具体例子

1.值类型操作:


@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:spring/applicationContext-redis.xml")
public class TestValue {
	@Autowired
	private RedisTemplate redisTemplate;	
	@Test
	public void setValue(){
//存值,针对值类型,ops相当于options
		redisTemplate.boundValueOps("name").set("itcast");		
	}	
	@Test
	public void getValue(){
		String str = (String) redisTemplate.boundValueOps("name").get();
		System.out.println(str);
	}	
	@Test
	public void deleteValue(){
		redisTemplate.delete("name");
	}	
}

2.集合类型操作之Set类型,无序,即存取顺序不一定相同


@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:spring/applicationContext-redis.xml")
public class TestSet {
	
	@Autowired
	private RedisTemplate redisTemplate;
	
	
	@Test
	public void setValue(){
		redisTemplate.boundSetOps("nameset").add("曹操");		
		redisTemplate.boundSetOps("nameset").add("刘备");	
		redisTemplate.boundSetOps("nameset").add("孙权");
	}
	
	
	@Test
	public void getValue(){
		Set members = redisTemplate.boundSetOps("nameset").members();
		System.out.println(members);
	}
	
	
	@Test
	public void deleteValue(){
		redisTemplate.boundSetOps("nameset").remove("孙权");
	}
	
	
	@Test
	public void deleteAllValue(){
		redisTemplate.delete("nameset");
	}
}

输出结果:[孙权, 刘备, 曹操],此外,set类型的元素也不可重复。当set没有值的时候,会返回一个[]

3.List类型操作

list类型分为两种,一种是左压栈,一种是右压栈

右压栈:


	
	@Test
	public void testSetValue1(){		
		redisTemplate.boundListOps("namelist1").rightPush("刘备");
		redisTemplate.boundListOps("namelist1").rightPush("关羽");
		redisTemplate.boundListOps("namelist1").rightPush("张飞");		
	}
	
	
	@Test
	public void testGetValue1(){
		List list = redisTemplate.boundListOps("namelist1").range(0, 10);
		System.out.println(list);
	}

运行结果:[刘备, 关羽, 张飞],元素可以重复

左压栈:


	
	@Test
	public void testSetValue2(){		
		redisTemplate.boundListOps("namelist2").leftPush("刘备");
		redisTemplate.boundListOps("namelist2").leftPush("关羽");
		redisTemplate.boundListOps("namelist2").leftPush("张飞");		
	}
	
	
	@Test
	public void testGetValue2(){
		List list = redisTemplate.boundListOps("namelist2").range(0, 10);
		System.out.println(list);
	}

运行结果:[张飞, 关羽, 刘备]

根据索引查询元素


	
	@Test
	public void testSearchByIndex(){
		String s = (String) redisTemplate.boundListOps("namelist1").index(1);
		System.out.println(s);
	}

运行结果:返回索引为1的元素移除某个元素的值


	
	@Test
	public void testRemoveByIndex(){
		redisTemplate.boundListOps("namelist1").remove(1, "关羽");
	}

这里表示移除一个“关羽”。 

4.Hash类型操作


@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:spring/applicationContext-redis.xml")
public class TestHash {
  @Autowired
  private RedisTemplate redisTemplate;
 
  //  存值
  @Test
  public void testSetValue() {
    redisTemplate.boundHashOps("namehash").put("a", "唐僧");
    redisTemplate.boundHashOps("namehash").put("b", "悟空");
    redisTemplate.boundHashOps("namehash").put("c", "八戒");
    redisTemplate.boundHashOps("namehash").put("d", "沙僧");
  }
 
  //获取所有的key
  @Test
  public void testGeTKEys() {
    Set s = redisTemplate.boundHashOps("namehash").keys();
    System.out.println(s);
  }
 
  //  获取所有的value
  @Test
  public void testGetValues() {
    List values = redisTemplate.boundHashOps("namehash").values();
    System.out.println(values);
  }
 
  //  根据key获取值
  @Test
  public void testGetValueByKey() {
    Object object = redisTemplate.boundHashOps("namehash").get("b");
    System.out.println(object);
  }
 
  //根据key移除值
  @Test
  public void testRemoveValueByKey() {
    redisTemplate.boundHashOps("namehash").delete("c");
  }
 
}

四.RedisTemplate和StringRedisTemplate的区别

1. 两者的关系是StringRedisTemplate继承RedisTemplate。

2. 两者的数据是不共通的;也就是说StringRedisTemplate只能管理StringRedisTemplate里面的数据,RedisTemplate只能管理RedisTemplate中的数据。

3. SDR默认采用的序列化策略有两种,一种是String的序列化策略,一种是JDK的序列化策略。

StringRedisTemplate默认采用的是String的序列化策略,保存的key和value都是采用此策略序列化保存的。

RedisTemplate默认采用的是JDK的序列化策略,保存的key和value都是采用此策略序列化保存的。

RedisTemplate使用的序列类在在操作数据的时候,比如说存入数据会将数据先序列化成字节数组然后在存入Redis数据库,这个时候打开Redis查看的时候,你会看到你的数据不是以可读的形式展现的,而是以字节数组显示,类似下面

当然从Redis获取数据的时候也会默认将数据当做字节数组转化,这样就会导致一个问题,当需要获取的数据不是以字节数组存在redis当中而是正常的可读的字符串的时候,比如说下面这种形式的数据

相关连接:https://www.cnblogs.com/EasonJim/p/7803067.html

到此这篇关于spring使用RedisTemplate操作Redis数据库的文章就介绍到这了,更多相关spring使用RedisTemplate操作Redis内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: spring使用RedisTemplate操作Redis数据库

本文链接: https://www.lsjlt.com/news/122316.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • spring使用RedisTemplate操作Redis数据库
    一.什么是Redis Redis是一个非关系型数据库,具有很高的存取性能,一般用作缓存数据库,减少正常存储数据库的压力。 Redis可以存储键与5种不同数据结构类型之间的映射,这5种...
    99+
    2024-04-02
  • spring使用RedisTemplate操作Redis数据库的案例
    小编给大家分享一下spring使用RedisTemplate操作Redis数据库的案例,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一.什么是RedisRedis是一个非关系型数据库,具有很高的存取性能,一般用作缓存数据库...
    99+
    2023-06-14
  • SpringBoot怎么使用RedisTemplate操作Redis数据类型
    这篇文章主要讲解了“SpringBoot怎么使用RedisTemplate操作Redis数据类型”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringBoot怎么使用RedisTempl...
    99+
    2023-06-29
  • 详解SpringBoot使用RedisTemplate操作Redis的5种数据类型
    目录1、字符串(String)1.1 void set(K key, V value);V get(Object key)1.2 void set(K key, ...
    99+
    2024-04-02
  • 使用PHP操作Redis数据库
    Redis是一款基于内存的高性能键值对数据库,可以被用于缓存、队列等多种场景。而PHP是一种开发语言,可以用于Web开发、后端服务等多种场景。如果我们能够将PHP和Redis结合使用,可以达到更优秀的性能和效果。本文将介绍如何使用PHP操作...
    99+
    2023-05-16
    PHP redis 数据库操作
  • 在spring时使用RedisTemplate如何实现连接并操作Redis
    在spring时使用RedisTemplate如何实现连接并操作Redis?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。事务需要开启enableTransact...
    99+
    2023-05-31
    spring redistemplate redis
  • 怎么使用Python操作Redis数据库
    本篇内容主要讲解“怎么使用Python操作Redis数据库”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用Python操作Redis数据库”吧!介绍Redis是一个开源的基于内存也可持久化...
    99+
    2023-07-02
  • Redis使用RedisTemplate模板类的常用操作方式
    目录一、前言二、Redis 数据结构简介三、RedisTemplate对5种数据结构的操作3.1 String字符串操作3.2 list数组操作3.3 Hash结构,map操作3.4...
    99+
    2024-04-02
  • Python操作redis数据库
    前言:这两天的事情不多,为了避免之前学习的一点点Python知识遗忘,我在Github上找了一些小项目跟着实践。之前的工作有写过相关的Python处理redis处理数据的脚本,但之前没有养成记录积累的习惯,所以~~~~(遗忘了),所以趁此...
    99+
    2023-01-31
    操作 数据库 Python
  • 使用redisTemplate从redis获取所有数据
    目录redisTemplate从redis获取所有数据idea后端效果swagger测试效果说说RedisTemplate的常用方法1.RedisTemplate常用方法2.Stri...
    99+
    2024-04-02
  • springboot使用redisRepository和redistemplate操作redis的过程解析
    目录导入依赖基本配置使用RedisTemplate访问redis使用Redisrepository访问redis实例:导入依赖 菜单大部分情况下不会出现变化,我们可以将其放入Redi...
    99+
    2024-04-02
  • 使用python怎么批量操作redis数据库
    使用python怎么批量操作redis数据库?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。方法一:使用 pipeline  使用pipelining ...
    99+
    2023-06-08
  • IDEA版怎么使用Java操作Redis数据库
    本篇内容主要讲解“IDEA版怎么使用Java操作Redis数据库”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“IDEA版怎么使用Java操作Redis数据库”吧!首先 下载 jedis.jar包...
    99+
    2023-06-20
  • Springboot使用Spring Data JPA实现数据库操作
    SpringBoot整合JPA 使用数据库是开发基本应用的基础,借助于开发框架,我们已经不用编写原始的访问数据库的代码,也不用调用JDBC(Java Data Base Connec...
    99+
    2024-04-02
  • IDEA版使用Java操作Redis数据库的方法
    首先 下载 jedis.jar包 然后再 工程设置里面找到Libraries,点击+。添加下载好的jedis.jar包。点击OK退出即可 创建Java_Control_Redis类...
    99+
    2024-04-02
  • Spring Boot中使用jdbctemplate 操作MYSQL数据库实例
    最近在学习使用Spring Boot连接数据库,今天学习了使用jdbctemplate 操作MYSQL数据库,下面就留个笔记不废话,先来代码pom文件:<project xmlns="http://maven.apache.org/P...
    99+
    2023-05-31
    spring boot 数据库
  • python怎么操作redis数据库
    今天小编给大家分享一下python怎么操作redis数据库的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、安装redis ...
    99+
    2023-06-30
  • Springboot如何使用Spring Data JPA实现数据库操作
    这篇文章将为大家详细讲解有关Springboot如何使用Spring Data JPA实现数据库操作,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。SpringBoot整合JPA使用数据库是开发基本应用的基...
    99+
    2023-06-20
  • python 实现 redis 数据库的操作
    目录一、安装二、连接三、string基本命令四、hash基本命令五、list基本命令六、set基本命令七、zset基本命令八、其他通用命令九、管道命令一、安装 redis 是一个 K...
    99+
    2024-04-02
  • Redis数据库如何在Spring Boot中使用
    本篇文章为大家展示了Redis数据库如何在Spring Boot中使用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。redis介绍Redis是目前业界使用最广泛的内存数据存储。相比memcached...
    99+
    2023-05-31
    springboot redis
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作