iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >spring使用RedisTemplate操作Redis数据库的案例
  • 834
分享到

spring使用RedisTemplate操作Redis数据库的案例

2023-06-14 07:06:12 834人浏览 独家记忆
摘要

小编给大家分享一下spring使用RedisTemplate操作Redis数据库的案例,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一.什么是RedisRedis是一个非关系型数据库,具有很高的存取性能,一般用作缓存数据库

小编给大家分享一下spring使用RedisTemplate操作Redis数据库的案例,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

一.什么是Redis

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

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

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

spring使用RedisTemplate操作Redis数据库的案例

二.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进行了实现。

spring使用RedisTemplate操作Redis数据库的案例

注意 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类型的数据操作

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

redisTemplate.opsForValue();//操作字符串redisTemplate.opsForHash();//操作hashredisTemplate.opsForList();//操作listredisTemplate.opsForSet();//操作setredisTemplate.opsForZSet();//操作有序set

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

redistempalate.boundValueOpsredistempalate.boundSetOpsredistempalate.boundListOpsredistempalate.boundHashOpsredistempalate.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数据库的具体例子

值类型操作:

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

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

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

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

List类型操作

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

右压栈:

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

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

左压栈:

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

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

根据索引查询元素

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

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

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

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

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的区别

两者的关系是StringRedisTemplate继承RedisTemplate。

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

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

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

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

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

spring使用RedisTemplate操作Redis数据库的案例

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

spring使用RedisTemplate操作Redis数据库的案例

看完了这篇文章,相信你对“spring使用RedisTemplate操作Redis数据库的案例”有了一定的了解,如果想了解更多相关知识,欢迎关注编程网精选频道,感谢各位的阅读!

--结束END--

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

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

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

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

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

下载Word文档
猜你喜欢
  • spring使用RedisTemplate操作Redis数据库的案例
    小编给大家分享一下spring使用RedisTemplate操作Redis数据库的案例,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一.什么是RedisRedis是一个非关系型数据库,具有很高的存取性能,一般用作缓存数据库...
    99+
    2023-06-14
  • spring使用RedisTemplate操作Redis数据库
    一.什么是Redis Redis是一个非关系型数据库,具有很高的存取性能,一般用作缓存数据库,减少正常存储数据库的压力。 Redis可以存储键与5种不同数据结构类型之间的映射,这5种...
    99+
    2022-11-11
  • 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+
    2022-11-13
  • 在spring时使用RedisTemplate如何实现连接并操作Redis
    在spring时使用RedisTemplate如何实现连接并操作Redis?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。事务需要开启enableTransact...
    99+
    2023-05-31
    spring redistemplate redis
  • phpmyadmin操作数据库的案例
    这篇文章主要介绍了phpmyadmin操作数据库的案例,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。phpmyadmin怎么操作数据库?ph...
    99+
    2022-10-18
  • Spring Boot中Redis数据库的使用实例
    spring boot对常用的数据库支持外,对nosql 数据库也进行了封装自动化。redis介绍Redis是目前业界使用最广泛的内存数据存储。相比memcached,Redis支持更丰富的数据结构,例如hashes, lists, set...
    99+
    2023-05-31
    spring boot redis
  • Redis使用RedisTemplate模板类的常用操作方式
    目录一、前言二、Redis 数据结构简介三、RedisTemplate对5种数据结构的操作3.1 String字符串操作3.2 list数组操作3.3 Hash结构,map操作3.4...
    99+
    2022-11-12
  • 使用PHP操作Redis数据库
    Redis是一款基于内存的高性能键值对数据库,可以被用于缓存、队列等多种场景。而PHP是一种开发语言,可以用于Web开发、后端服务等多种场景。如果我们能够将PHP和Redis结合使用,可以达到更优秀的性能和效果。本文将介绍如何使用PHP操作...
    99+
    2023-05-16
    PHP redis 数据库操作
  • springboot使用redisRepository和redistemplate操作redis的过程解析
    目录导入依赖基本配置使用RedisTemplate访问redis使用Redisrepository访问redis实例:导入依赖 菜单大部分情况下不会出现变化,我们可以将其放入Redi...
    99+
    2022-11-13
  • Spring Boot中使用jdbctemplate 操作MYSQL数据库实例
    最近在学习使用Spring Boot连接数据库,今天学习了使用jdbctemplate 操作MYSQL数据库,下面就留个笔记不废话,先来代码pom文件:<project xmlns="http://maven.apache.org/P...
    99+
    2023-05-31
    spring boot 数据库
  • 页面查询案例(使用redis数据库)
    需求: 提供一个index.html页面,页面中有个省份,下拉列表2.当页面加载完成时,发送ajax请求。加载所有省份   前期项目初步搭建: index.html $(function(){ $.get("url",{},f...
    99+
    2015-11-16
    页面查询案例(使用redis数据库)
  • 怎么使用Python操作Redis数据库
    本篇内容主要讲解“怎么使用Python操作Redis数据库”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用Python操作Redis数据库”吧!介绍Redis是一个开源的基于内存也可持久化...
    99+
    2023-07-02
  • IDEA版使用Java操作Redis数据库的方法
    首先 下载 jedis.jar包 然后再 工程设置里面找到Libraries,点击+。添加下载好的jedis.jar包。点击OK退出即可 创建Java_Control_Redis类...
    99+
    2022-11-12
  • Spring Boot实战之数据库操作的示例代码
    上篇文章中已经通过一个简单的HelloWorld程序讲解了Spring boot的基本原理和使用。本文主要讲解如何通过spring boot来访问数据库,本文会演示三种方式来访问数据库,第一种是JdbcTemplate,第二种是JPA,第三...
    99+
    2023-05-30
  • Java操作数据库连接池案例讲解
    数据库连接池 概念:其实就是一个容器(集合),存放数据库连接的容器。 概念:其实就是一个容器(集合),存放数据库连接的容器。 当系统初始化好后,容器被创建...
    99+
    2022-11-12
  • 使用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
  • MySQL中对数据的操作案例
    小编给大家分享一下MySQL中对数据的操作案例,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、增加数据普通的插入INSERT ...
    99+
    2022-10-18
  • python 实现 redis 数据库的操作
    目录一、安装二、连接三、string基本命令四、hash基本命令五、list基本命令六、set基本命令七、zset基本命令八、其他通用命令九、管道命令一、安装 redis 是一个 K...
    99+
    2022-11-10
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作