我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

小编给大家分享一下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数据库的案例”有了一定的了解,如果想了解更多相关知识,欢迎关注编程网行业资讯频道,感谢各位的阅读!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

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

下载Word文档

猜你喜欢

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

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

SpringBoot怎么使用RedisTemplate操作Redis数据类型

这篇文章主要讲解了“SpringBoot怎么使用RedisTemplate操作Redis数据类型”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringBoot怎么使用RedisTempl
2023-06-29

在spring时使用RedisTemplate如何实现连接并操作Redis

在spring时使用RedisTemplate如何实现连接并操作Redis?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。事务需要开启enableTransact
2023-05-31

Spring Boot中Redis数据库的使用实例

spring boot对常用的数据库支持外,对nosql 数据库也进行了封装自动化。redis介绍Redis是目前业界使用最广泛的内存数据存储。相比memcached,Redis支持更丰富的数据结构,例如hashes, lists, set
2023-05-31

Spring Boot中使用jdbctemplate 操作MYSQL数据库实例

最近在学习使用Spring Boot连接数据库,今天学习了使用jdbctemplate 操作MYSQL数据库,下面就留个笔记不废话,先来代码pom文件:2023-05-31

怎么使用Python操作Redis数据库

本篇内容主要讲解“怎么使用Python操作Redis数据库”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用Python操作Redis数据库”吧!介绍Redis是一个开源的基于内存也可持久化
2023-07-02

Python使用SQLAlchemy操作Mysql数据库的操作示例

目录一、SQLAlchemy 介绍二、使用步骤(示例)1. 安装所需的库2. 连接到mysql数据库3. 定义模型4. 创建表5. 添加数据6. 查询数据三、结合事务使用(示例)1. 定义模型2. 初始化数据库连接和会话3. 使用事务添加用
Python使用SQLAlchemy操作Mysql数据库的操作示例
2024-08-09

页面查询案例(使用redis数据库)

需求:1.提供一个index.html页面,页面中有个省份,下拉列表2.当页面加载完成时,发送ajax请求。加载所有省份 前期项目初步搭建:index.html$(function(){$.get("url",{},funtion(data){//url-查询
页面查询案例(使用redis数据库)
2015-11-16

IDEA版怎么使用Java操作Redis数据库

本篇内容主要讲解“IDEA版怎么使用Java操作Redis数据库”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“IDEA版怎么使用Java操作Redis数据库”吧!首先 下载 jedis.jar包
2023-06-20

使用python怎么批量操作redis数据库

使用python怎么批量操作redis数据库?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。方法一:使用 pipeline  使用pipelining 发送命令时
2023-06-08

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录