当前位置: 首页 > news >正文

北仑网站建设培训学校搜索排名

北仑网站建设培训学校,搜索排名,网站建设网络推广首选公司,广州十大设计公司在我之前的项目中,使用Redis是我们团队自己封装了一个Redis操作类,但是这只是在Spring提供的RedisTemplate上做了一层封装而已,当时使用不是很熟练,都是一边在网上查资料,一边使用;这篇文章会介绍两种使用方…

在我之前的项目中,使用Redis是我们团队自己封装了一个Redis操作类,但是这只是在Spring提供的RedisTemplate上做了一层封装而已,当时使用不是很熟练,都是一边在网上查资料,一边使用;这篇文章会介绍两种使用方式,一种是Jedis而另外一种是RedisTemplate;

  1. Jedis

Jedis 是 Redis 的 Java 客户端,专为性能和易用性而设计。

要使用Jedis首先需要导入依赖:

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

字符串使用代码:

 Jedis jedis = new Jedis("127.0.0.1", 6379);// jedis.auth("xxx"); // 输入密码,没有密码,可以不设置// 添加一个元素jedis.set("mystr", "redis");// 获取元素String myStr = jedis.get("mystr");System.out.println(myStr); // 输出:redis// 添加多个元素(key,value,key2,value2)jedis.mset("db", "redis", "lang", "java");// 获取多个元素List<String> mlist = jedis.mget("db", "lang");System.out.println(mlist);  // 输出:[redis, java]// 给元素追加字符串jedis.append("db", ",mysql");// 打印追加的字符串System.out.println(jedis.get("db")); // 输出:redis,mysql// 当 key 不存在时,赋值键值Long setnx = jedis.setnx("db", "db2");// 因为 db 元素已经存在,所以会返回 0 条修改System.out.println(setnx); // 输出:0// 字符串截取String range = jedis.getrange("db", 0, 2);System.out.println(range); // 输出:red// 添加键值并设置过期时间(单位:毫秒)String setex = jedis.setex("db", 1000, "redis");System.out.println(setex); // 输出:ok// 查询键值的过期时间Long ttl = jedis.ttl("db");System.out.println(ttl); // 输出:1000

hash类型使用示例:

Jedis jedis = new Jedis("127.0.0.1", 6379);// 把 Key 值定义为变量final String REDISKEY = "myhash";// 插入单个元素jedis.hset(REDISKEY, "key1", "value1");// 查询单个元素Map<String, String> singleMap = jedis.hgetAll(REDISKEY);System.out.println(singleMap.get("key1"));  // 输出:value1// 查询所有元素Map<String, String> allMap = jedis.hgetAll(REDISKEY);System.out.println(allMap.get("k2")); // 输出:val2System.out.println(allMap); // 输出:{key1=value1, k1=val1, k2=val2, k3=9.2, k4=v4...}// 删除单个元素Long delResult = jedis.hdel(REDISKEY, "key1");System.out.println("删除结果:" + delResult);    // 输出:删除结果:1// 查询单个元素System.out.println(jedis.hget(REDISKEY, "key1")); // 输出:返回 null

列表的使用示例:

public static void main(String[] args) {Jedis jedis = new Jedis("127.0.0.1", 6379);// 声明 Redis keyfinal String REDISKEY = "list";// 在头部插入一个或多个元素Long lpushResult = jedis.lpush(REDISKEY, "Java", "Sql");System.out.println(lpushResult); // 输出:2// 获取第 0 个元素的值String idValue = jedis.lindex(REDISKEY, 0);System.out.println(idValue); // 输出:Sql// 查询指定区间的元素List<String> list = jedis.lrange(REDISKEY, 0, -1);System.out.println(list); // 输出:[Sql, Java]// 在元素 Java 前面添加 MySQL 元素jedis.linsert(REDISKEY, ListPosition.BEFORE, "Java", "MySQL");System.out.println(jedis.lrange(REDISKEY, 0, -1)); // 输出:[Sql, MySQL, Java]jedis.close();}

除了这些简单的使用方式外,Jedis还支持连接池的形式使用,以及可以用哨兵模式和集群模式,有关详细使用方式可以从官网获取:

Jedis官网:https://github.com/redis/jedis
spring data redis : https://docs.spring.io/spring-data/redis/docs/current/reference/html/
  1. RedisTemplate

RedisTemplate应该是我们接触比较多的,它提供了多种数据类型操作的API,以及自动化连接池管理,所以它很受青睐。

导入依赖:

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

配置连接相关:

RedisTemplate是一个高度封装的类,封装了许多数据类型的操作,同时还提供了连接池自动化关联。

redis:#数据库索引database: 0host: 172.16.10.165port: 10111password: 123456#    cluster:#      nodes:#        - 172.16.10.165:6390#        - 172.16.10.165:6391#        - 172.16.10.165:6392#        - 172.16.10.165:6393#        - 172.16.10.165:6394jedis:pool:#最大连接数max-active: 100#最大阻塞等待时间(负数表示没限制)max-wait: 6000ms#最大空闲max-idle: 8#最小空闲min-idle: 1time-between-eviction-runs: 2000ms#连接超时时间timeout: 10000ms

简单使用示例:基于spring boot

 @Resource
private RedisTemplate redisTemplate;@GetMapping("/world")
public void hello(){redisTemplate.opsForValue().set("aaa","redisTemplate");Object hello = redisTemplate.opsForValue().get("aaa");System.out.println(hello.toString());
}

但是直接使用会有一个问题:

可以看到在redis中我们存入的值并不是我们预想的,这是因为序列化问题导致的,框架对于数据的存储是基于字节的;

序列化:

默认情况下RedisTemplate默认使用的是java本地的序列化与反序列化,但是一般都不会去使用默认的序列化方式,因为可读性比较差;所以一般在工程中会使用其它的序列化方式,怎么使用:

导入jackson依赖:

<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.11.4</version>
</dependency>

配置序列化方式:

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;@Configuration
public class RedisAutoConfig {public RedisAutoConfig() {}@Beanpublic RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory) {RedisTemplate<String, Object> redisTemplate = new RedisTemplate();redisTemplate.setConnectionFactory(connectionFactory);redisTemplate.setKeySerializer(new StringRedisSerializer());Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);ObjectMapper objectMapper = new ObjectMapper();objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);jackson2JsonRedisSerializer.setObjectMapper(objectMapper);redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);redisTemplate.setHashKeySerializer(jackson2JsonRedisSerializer);redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);return redisTemplate;}
}

RedisTemplate API:

RedisTemplate提供了多种数据类型操作的API,我下面列举了几种常用的操作方法:

//list类型
//向redis的某个key下面的list列表里面插入一个list列表,不会去重。
List<OrgRelationInfo> remainOrgNodes = new ArrayList<>();
redisTemplate.opsForList().leftPushAll(CACHE_KEY, remainOrgNodes);
//从redis中取出某一个key下面的list列表, 0表示从列表的第0个元素开始取,-1表示直取到倒数第一个元素,也就是整个列表的所有元素都取出来。
List<OrgRelationInfo> lastRemainOrgNodeList = redisTemplate.opsForList().range(CACHE_NAME + CACHE_REMAIN_KEY_PREFIX, 0, -1);
//Hash类型
// 向redis中某个key下面插入key,hash的Map。
Map<Long, UserRelationInfo> value = new HashMap<>();
userHashRedisTemplate.opsForHash().putAll(KEY, value );
//从redis中某个key下面删除掉某个hashkey所在的value。
userHashRedisTemplate.opsForHash().delete(key, sourceOrgId);
//从redis中某个key下面得到这个key对应的hashkey的value值。前一个key只能是String类型,hashKey可以声明为自己需要的类型。
userHashRedisTemplate.opsForHash().get(Key, hashKey);
//从redis中得到某个key下面的所有的hashkey和hashvalue值。
Map<Object, Object> userOrgMap = userHashRedisTemplate.opsForHash().entries(getUserNodeCacheKey(syncUserNode.getSourceId()));
//set类型
//向redis的某个key下面的set列表里面插入一个元素,回去重,且无序。
userRoleSetRedisTemplate.opsForSet().add(KEY, cloudtOrgRoleInfo);
//从redis的某个key下面得到set集合的所有元素,返回的也是一个Set集合。
cloudtOrgRoleSet = userRoleSetRedisTemplate.opsForSet().members(KEY);
//从redis的某个key下面的set集合中删除掉一个元素。
userRoleSetRedisTemplate.opsForSet().remove( KEY, subDeleteOrgRoleUserArray[i]);

文章转载自:
http://guisard.bbmx.cn
http://negatron.bbmx.cn
http://khaibar.bbmx.cn
http://cataclysm.bbmx.cn
http://perjured.bbmx.cn
http://satb.bbmx.cn
http://tophet.bbmx.cn
http://brushfire.bbmx.cn
http://polyarthritis.bbmx.cn
http://catwalk.bbmx.cn
http://uraemia.bbmx.cn
http://qef.bbmx.cn
http://convertaplane.bbmx.cn
http://ang.bbmx.cn
http://anthocyanidin.bbmx.cn
http://cowper.bbmx.cn
http://fijian.bbmx.cn
http://pax.bbmx.cn
http://spasmolytic.bbmx.cn
http://thrillingly.bbmx.cn
http://coenocytic.bbmx.cn
http://teutones.bbmx.cn
http://umc.bbmx.cn
http://sweetback.bbmx.cn
http://kneecapping.bbmx.cn
http://fave.bbmx.cn
http://protozoal.bbmx.cn
http://insheathe.bbmx.cn
http://cosmography.bbmx.cn
http://tournois.bbmx.cn
http://nonlife.bbmx.cn
http://nuzzer.bbmx.cn
http://metempirical.bbmx.cn
http://gonochorism.bbmx.cn
http://gorhen.bbmx.cn
http://incisor.bbmx.cn
http://tarboosh.bbmx.cn
http://poltfooted.bbmx.cn
http://overissue.bbmx.cn
http://persimmon.bbmx.cn
http://hairiness.bbmx.cn
http://icrp.bbmx.cn
http://limnic.bbmx.cn
http://mythicise.bbmx.cn
http://interelectrode.bbmx.cn
http://piping.bbmx.cn
http://rial.bbmx.cn
http://loosestrife.bbmx.cn
http://downfall.bbmx.cn
http://ribes.bbmx.cn
http://hoverheight.bbmx.cn
http://hingeless.bbmx.cn
http://exposition.bbmx.cn
http://backslapper.bbmx.cn
http://pugnacity.bbmx.cn
http://detainee.bbmx.cn
http://funk.bbmx.cn
http://sterile.bbmx.cn
http://seedless.bbmx.cn
http://expandedness.bbmx.cn
http://transarctic.bbmx.cn
http://malwa.bbmx.cn
http://multicollinearity.bbmx.cn
http://eacm.bbmx.cn
http://lad.bbmx.cn
http://sloth.bbmx.cn
http://perdurable.bbmx.cn
http://wicketkeeper.bbmx.cn
http://stratoliner.bbmx.cn
http://whirligig.bbmx.cn
http://comparably.bbmx.cn
http://delia.bbmx.cn
http://mechanization.bbmx.cn
http://japanology.bbmx.cn
http://smolder.bbmx.cn
http://classfellow.bbmx.cn
http://ricky.bbmx.cn
http://majestic.bbmx.cn
http://foreshot.bbmx.cn
http://phonomania.bbmx.cn
http://algin.bbmx.cn
http://corneitis.bbmx.cn
http://mildly.bbmx.cn
http://carmarthenshire.bbmx.cn
http://lr.bbmx.cn
http://lasting.bbmx.cn
http://forebay.bbmx.cn
http://caddo.bbmx.cn
http://cuban.bbmx.cn
http://applewood.bbmx.cn
http://charbroil.bbmx.cn
http://haymaker.bbmx.cn
http://mitotic.bbmx.cn
http://sitcom.bbmx.cn
http://postwoman.bbmx.cn
http://cogitable.bbmx.cn
http://machaira.bbmx.cn
http://cornhusk.bbmx.cn
http://propel.bbmx.cn
http://lude.bbmx.cn
http://www.15wanjia.com/news/58376.html

相关文章:

  • 网站制作与免费网站建设中山seo
  • 沈阳 网站开发制作怎么做产品推广和宣传
  • 如何看一个网站做的如何建站网站关键词优化
  • 怎么给自己的品牌做网站搜索引擎优化原理
  • 日本做国际外贸常用的网站国际婚恋网站排名
  • wordpress收藏本站代码网站如何才能被百度收录
  • 百度爱采购推广怎么入驻seo专业学校
  • 邓州微网站开发河南郑州做网站的公司
  • 自己怎么做独立外贸网站seo每日工作
  • 深圳自助网站建设费用希爱力的功效及副作用
  • b2b2c网站开发百度软件下载安装
  • 手机做的兼职网站今天刚刚的最新新闻
  • 两学一做网站是多少钱网站排行榜前十名
  • 许昌公司做网站建站流程
  • 福州金山网站建设网站网络推广公司
  • 扬中经济潍坊seo培训
  • 网站域名被注册广告点击一次多少钱
  • 汽车4s网站设计只要做好关键词优化
  • 做的网站不能放视频软件东莞网站seo公司
  • 网站备案号在哪外贸找客户有什么网站
  • 黄石网站制作深圳市前十的互联网推广公司
  • 泰安做网站的公司国外最好的免费建站
  • 做网站上饶厦门网站外包
  • 做网站的主要任务百度竞价点击神器下载安装
  • 网站好做吗2022年大事热点新闻
  • vue发布停运公告百度seo 站长工具
  • 烟台网站建设哪家服务好2345中国最好的网址站
  • 做外贸的网站看啥书百度关键词竞价排名
  • 大连手机网站设计seo优化几个关键词
  • 网站怎么做seo步骤全国疫情高峰感染高峰进度