java(SpringBoot)中操作Redis的两种方式

news/2024/10/31 4:22:18/

前言

之前我们介绍过了redis的五中基本类型以及在可视化界面进行操作,那么在开发中(在代码中)我们通常使用,jedis进行操作redis,要是springboot 项目,我们通常使用redisTemplte进行操作

首先将redis启动

在这里插入图片描述

方式一 Jredis

引入依赖,我们使用Jedis 来操作redis

      <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.2.0</version></dependency>

1. 测试连接

@Testpublic void test11() {//测试连接Jedis jedis = new Jedis("localhost", 6379);String ping = jedis.ping();System.out.println(ping);}

执行结果:pong 表示连接成功

在这里插入图片描述
测试连接失败情况,这边随便改了个不存在的端口,结果报错

在这里插入图片描述

2. 基本操作

String

  • 设置值
 jedis.set("name","张三");
  • 获取值

jedis.get("name")
@Testpublic void test11(){//连接Jedis jedis = new Jedis("localhost", 6379);//设置值jedis.set("name","张三");//获取String name = jedis.get("name");System.out.println(name);}

在这里插入图片描述

  • 根据key 删除值
jedis.del("name");```java@Testpublic void test11() {//测试连接Jedis jedis = new Jedis("localhost", 6379);jedis.del("name");System.out.println(jedis.get("name"));}

在这里插入图片描述

List

  • 从右边添加值 rpush
jedis.rpush("redisList","a","b","aa");
  • 从左边添加值
jedis.lpush("redisList","la","lb","laa");

获取值就不是get(key) 了,,而是

List<String> list = jedis.lrange("redisList", 0, -1);

返回value集合,从0开始 到最后一个(-1)【包含最后一个】

 @Testpublic void test11() {//测试连接Jedis jedis = new Jedis("localhost", 6379);jedis.rpush("redisList","a","b","aa");List<String> list = jedis.lrange("redisList", 0, -1);list.forEach(System.out::println);}

在这里插入图片描述

  • 删除
jedis.del("redisList");
 //测试连接Jedis jedis = new Jedis("localhost", 6379);jedis.del("redisList");//判断key是否存在Boolean redisList = jedis.exists("redisList");System.out.println(redisList);

在这里插入图片描述

  • 删除指定元素
jedis.lrem("redisList",1,"a");

jedis.lrem(“key”,删除几个,要删除的元素);

在这里插入图片描述
删除key 为 redisList 中的 1个 元素 a

在这里插入图片描述

set

  • 添加元素

jedis.sadd("redisSet","a","bb","ccc");

获取set 元素也与之前不同

 Set<String> redisSet = jedis.smembers("redisSet");

返回set集合,不可重复

Jedis jedis = new Jedis("localhost", 6379);jedis.sadd("redisSet","a","a","bb","ccc");Set<String> redisSet = jedis.smembers("redisSet");System.out.println(redisSet);

在这里插入图片描述
删除key同理

    //测试连接Jedis jedis = new Jedis("localhost", 6379);jedis.del("redisSet");System.out.println(jedis.exists("redisSet"));

在这里插入图片描述
删除指定元素

在这里插入图片描述
删除元素 “bb”

在这里插入图片描述

zset

  • 添加元素
jedis.zadd("redisZSet",10,"aa");

jedis.zadd(“key”,score排序序号,“值”);

不太理解,可以回看 redis——基本介绍以及 五种 数据类型 (重要)

  • 获取元素
Set<String> zSet = jedis.zrange("redisZSet",0,-1);

在这里插入图片描述

Hash

  • 设置值,

因为存储的是hsah首先需要new 一个hashMap ,往我们new 出来的hash 存储数据,再将整个数据存储进redis hash 中

   Jedis jedis = new Jedis("localhost", 6379);Map<String,String> hashMap = new HashMap<String,String>();hashMap.put("name","zhangsan");hashMap.put("age","18");jedis.hmset("redisHash", hashMap);
  • 获取值
List<String> hmget = jedis.hmget("redisHash", "name", "age");

在这里插入图片描述
这边不太明白的,还是先去理解redis——基本介绍以及 五种 数据类型 ,这边不再过多赘述,都是些api的使用

其他常用api,什么自增自减这些又兴趣可以自己试试

在这里插入图片描述

这边介绍一个判断key是否存在

 jedis.exists("key")

存在返回true,反之false ,开发中判断会用到

方式二 redisTemplate

依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>

注入对象

 @Resourceprivate RedisTemplate redisTemplate;

使用

在这里插入图片描述
可以看到有很多种方法,这边直接贴出一个通用工具类,仔细看代码中的注释就知道每个方法对应的数据类型使用了


package com.test1.demo;import org.springframework.data.redis.core.BoundSetOperations;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Component;import javax.annotation.Resource;
import java.util.*;
import java.util.concurrent.TimeUnit;/*** spring redis 工具类**/
@SuppressWarnings(value = { "unchecked", "rawtypes" })
@Component
public class RedisCache
{@Resourcepublic RedisTemplate redisTemplate;/*** 缓存基本的对象,Integer、String、实体类等** @param key 缓存的键值* @param value 缓存的值*/public <T> void setCacheObject(final String key, final T value)
{redisTemplate.opsForValue().set(key, value);}/*** 缓存基本的对象,Integer、String、实体类等** @param key 缓存的键值* @param value 缓存的值* @param timeout 时间* @param timeUnit 时间颗粒度*/public <T> void setCacheObject(final String key, final T value, final Integer timeout, final TimeUnit timeUnit)
{redisTemplate.opsForValue().set(key, value, timeout, timeUnit);}/*** 设置有效时间** @param key Redis键* @param timeout 超时时间* @return true=设置成功;false=设置失败*/public boolean expire(final String key, final long timeout)
{return expire(key, timeout, TimeUnit.SECONDS);}/*** 设置有效时间** @param key Redis键* @param timeout 超时时间* @param unit 时间单位* @return true=设置成功;false=设置失败*/public boolean expire(final String key, final long timeout, final TimeUnit unit)
{return redisTemplate.expire(key, timeout, unit);}/*** 获取有效时间** @param key Redis键* @return 有效时间*/public long getExpire(final String key)
{return redisTemplate.getExpire(key);}/*** 判断 key是否存在** @param key 键* @return true 存在 false不存在*/public Boolean hasKey(String key)
{return redisTemplate.hasKey(key);}/*** 获得缓存的基本对象。** @param key 缓存键值* @return 缓存键值对应的数据*/public <T> T getCacheObject(final String key)
{ValueOperations<String, T> operation = redisTemplate.opsForValue();return operation.get(key);}/*** 删除单个对象** @param key*/public boolean deleteObject(final String key)
{return redisTemplate.delete(key);}/*** 删除集合对象** @param collection 多个对象* @return*/public boolean deleteObject(final Collection collection)
{return redisTemplate.delete(collection) > 0;}/*** 缓存List数据** @param key 缓存的键值* @param dataList 待缓存的List数据* @return 缓存的对象*/public <T> long setCacheList(final String key, final List<T> dataList)
{Long count = redisTemplate.opsForList().rightPushAll(key, dataList);return count == null ? 0 : count;}/*** 获得缓存的list对象** @param key 缓存的键值* @return 缓存键值对应的数据*/public <T> List<T> getCacheList(final String key)
{return redisTemplate.opsForList().range(key, 0, -1);}/*** 缓存Set** @param key 缓存键值* @param dataSet 缓存的数据* @return 缓存数据的对象*/public <T> BoundSetOperations<String, T> setCacheSet(final String key, final Set<T> dataSet)
{BoundSetOperations<String, T> setOperation = redisTemplate.boundSetOps(key);Iterator<T> it = dataSet.iterator();while (it.hasNext()){setOperation.add(it.next());}return setOperation;}/*** 获得缓存的set** @param key* @return*/public <T> Set<T> getCacheSet(final String key)
{return redisTemplate.opsForSet().members(key);}/*** 缓存Map** @param key* @param dataMap*/public <T> void setCacheMap(final String key, final Map<String, T> dataMap)
{if (dataMap != null) {redisTemplate.opsForHash().putAll(key, dataMap);}}/*** 获得缓存的Map** @param key* @return*/public <T> Map<String, T> getCacheMap(final String key)
{return redisTemplate.opsForHash().entries(key);}/*** 往Hash中存入数据** @param key Redis键* @param hKey Hash键* @param value 值*/public <T> void setCacheMapValue(final String key, final String hKey, final T value)
{redisTemplate.opsForHash().put(key, hKey, value);}/*** 获取Hash中的数据** @param key Redis键* @param hKey Hash键* @return Hash中的对象*/public <T> T getCacheMapValue(final String key, final String hKey)
{HashOperations<String, String, T> opsForHash = redisTemplate.opsForHash();return opsForHash.get(key, hKey);}/*** 获取多个Hash中的数据** @param key Redis键* @param hKeys Hash键集合* @return Hash对象集合*/public <T> List<T> getMultiCacheMapValue(final String key, final Collection<Object> hKeys)
{return redisTemplate.opsForHash().multiGet(key, hKeys);}/*** 删除Hash中的某条数据** @param key Redis键* @param hKey Hash键* @return 是否成功*/public boolean deleteCacheMapValue(final String key, final String hKey)
{return redisTemplate.opsForHash().delete(key, hKey) > 0;}/*** 获得缓存的基本对象列表** @param pattern 字符串前缀* @return 对象列表*/public Collection<String> keys(final String pattern)
{return redisTemplate.keys(pattern);}/*** 生成唯一编号,没有过期时间*/public  String  getCode() {Long serialNum = redisTemplate.opsForValue().increment("JG", 1L);return "JG" +String.format("%06d",serialNum);}
}

以上就是redis 在开发中的使用了,欢迎讨论指正!!


http://www.ppmy.cn/news/573853.html

相关文章

【软件工程】工程管理

管理&#xff0c;例如&#xff0c;我们要谋划一场旅行&#xff0c;需要提前对目的地进行了解&#xff0c;选择交通方式&#xff0c;提前预定酒店&#xff0c;制定计划&#xff0c;资金预算等。软件工程管理是为了使软件项目能按照预定的成本&#xff0c;进度以及质量顺利完成&a…

软件工程 团队组织与管理

团队组织与管理 人员的选择 •应该考虑团队中的技术、经验和个性是否整体均衡。 •选择性格互补的成员组成的团队可能比仅仅根据技术能力选择成员的团队更有效率。 •团队的领导力来自于成员的尊重&#xff0c;而不是名义上的头衔。 团队是由若干人组成的一个群体&#xff0…

软件工程中国学科排名——2021软科

转载于 软科 排名榜单包括96个一级学科&#xff0c;各个学科排名的对象是在该一级学科设有学术型研究生学位授权点的所有高校&#xff0c;发布的是在该学科排名前50%的高校。共有486所高校的4992个学科点上榜。 软件工程学科排名共有81所大学上榜&#xff0c;清华大学、华东师范…

Django项目之mysql数据库连接和表的创建

数据库连接 首先&#xff0c;确保我们已经生成了一个基本的Django项目文件&#xff0c;目录结构如下&#xff1a; 具体搭建流程参考链接&#xff1a;https://blog.csdn.net/David_house/article/details/131188889?spm1001.2014.3001.5502找到项目下的settings文件&#xff…

西电计算机学院软件学院,软件学院

2001年&#xff0c;学校响应国家培养软件人才&#xff0c;尽快提高我国软件产业的总体水平和国际竞争力的号召&#xff0c;以软件工程研究所为基础组建成立软件学院&#xff0c;并于当年获得教育部批准&#xff0c;成为首批建设的35所国家示范性软件学院之一。 西电软件学院以市…

2022CCF中国软件大会(CCF ChinaSoft)“系统软件教育”论坛成功召开

2022年11月27日&#xff0c;2022年度CCF中国软件大会系统软件教育论坛成功召开。本次论坛由中国科学技术大学张昱和清华大学陈渝两位老师联合组织举办&#xff0c;采用腾讯会议与在线直播两种方式线上进行。论坛围绕系统软件课程体系及操作系统课程的本科/研究生教学研究&#…

软件工程——软科中国大学专业排名

转载于 软科 高等教育专业评价机构软科正式发布2022“软科中国大学专业排名”。排名包括568个本科专业&#xff0c;每个专业榜单发布的是所有开设该专业的高校中排名位列前50%的高校&#xff0c;共有990所高校的30242个专业上榜。“软科中国大学专业排名”是迄今为止覆盖专业数…

软件工程之软件工程管理

科学管理之父-泰罗&#xff0c;说过这样一句话&#xff1a;管理就是确切地知道你要别人干什么&#xff0c;并使他用最好的方法去做。那么我们的软件工程管理又是怎么回事呢&#xff1f;让我们一起来揭晓她的答案&#xff0c;软件工程管理是指对工程建设的过程以及在建设过程中涉…