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

文科女学java 做网站推广app赚佣金接单平台

文科女学java 做网站,推广app赚佣金接单平台,村级网站建站,邯郸市第一医院Redis的数据类型Hash使用场景 常见面试题:redis在你们项目中是怎么用的,除了String数据类型还使用什么数据类型? 怎么保证缓存和数据一致性等问题… Hash模型使用场景 知识回顾: redisTemplate.opsForHash() 方法是 Redis 的 …

Redis的数据类型Hash使用场景

常见面试题:redis在你们项目中是怎么用的,除了String数据类型还使用什么数据类型?
怎么保证缓存和数据一致性等问题…

Hash模型使用场景

知识回顾:

redisTemplate.opsForHash() 方法是 Redis 的 Hash(哈希)数据结构的操作模板方法。它返回一个 HashOperations 实例,可以使用该实例执行对哈希数据结构的各种操作,如添加、删除、获取元素、获取全部元素等。

使用 redisTemplate.opsForHash() 方法进行哈希操作的示例如下:

// 添加元素到哈希
redisTemplate.opsForHash().put("myhash", "key1", "value1");
redisTemplate.opsForHash().put("myhash", "key2", "value2");// 获取哈希中指定的元素
String value1 = (String) redisTemplate.opsForHash().get("myhash", "key1");// 获取哈希中所有元素
Map<Object, Object> allEntries = redisTemplate.opsForHash().entries("myhash");// 删除哈希中指定的元素
redisTemplate.opsForHash().delete("myhash", "key1");// 判断哈希中是否存在指定的元素
boolean exist = redisTemplate.opsForHash().hasKey("myhash", "key1");

场景使用场景

1,对象缓存 比如存储用户信息 一个字段对应多个属性
id:1 、name:老许 、 age:18 、 sex:0 、 hobby:java …

2、同一个用户在不同所属系统的待办个数统计
在这里插入图片描述

代码实现

应用场景一:保存用户的信息 h:user_key_prefix + account hk:acount hv:user

引入依赖

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

项目启动时候自动将数据库用户信息保存到redis中

package com.xx.xx.xx.config;import com.alibaba.fastjson2.JSON;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.core.StringRedisTemplate;import javax.annotation.PostConstruct;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;/*** @author psd*/
@Slf4j
@Configuration
public class SysUserConfig {@Autowiredprivate SysUserService sysUserService;@Autowiredprivate StringRedisTemplate redisTemplate;@Autowiredprivate RedisOperationUtils redisOperationUtils;@PostConstructpublic void init() {// 查询所有的用户信息List<SysUserEntity> userEntityList = sysUserService.queryAllSysUser();List<String> accountList = userEntityList.stream().map(SysUserEntity::getAccount).collect(Collectors.toList());// 清除缓存中的数据 accountList.stream().forEach(account -> redisTemplate.delete(redisOperationUtils.USER_KEY_PREFIX + account));// 重新新增缓存中的数据userEntityList.stream().forEach(userEntity -> {// 设置一个随机过期时间 4 ~ 8小时redisTemplate.opsForHash().put(redisOperationUtils.USER_KEY_PREFIX + userEntity.getAccount(), userEntity.getAccount(),JSON.toJSONString(userEntity));redisTemplate.expire(redisOperationUtils.USER_KEY_PREFIX + userEntity.getAccount(), 3600 + redisOperationUtils.random.nextInt(4 * 3600),TimeUnit.SECONDS);});}}

配置类


@Component
public class RedisOperationUtils {/*** 用户信息redis中的key*/public final String USER_KEY_PREFIX = "rbac:user:";public final Random random = new SecureRandom();
}

项目中任意获取的可以

 @Testpublic void test03(){Object o = redisTemplate.opsForHash().get(redisOperationUtils.USER_KEY_PREFIX + "Lin" , "Lin");SysUserEntity entity = JSON.parseObject((String) o, SysUserEntity.class);System.out.println("entity = " + entity);}

可能存在疑问点:
1、为啥没有用String类型 同样可以满足,这个是考虑到有些字段可能会改动,项目在初期阶段可能某些字段会修改,添加新增,包括删除, 总和优先考虑Hash模型,利于维护,不用单个字段进行修改 删除等操作

2、如果数据有修改的情况下,你是怎么保证数据类型一致性
先删除redis中的数据,再写数据到mysql 再删除redis中数据

优点细节有以下几处:
1、设置过期时间时候,没有采用 每次new Random();而是放到一个工具类里面,节约内存
2、使用Random random = new SecureRandom(); 是安全的,
3、采用随机过期时间,随机性比较好 减少redis的内存使用

应用场景二:保存用户的信息 h:phoneNum hk:typeStr hv:count
	//  h:phoneNum hk:typeStr hv:count  // 对应唯一标识手机号: 139xxxxxxxx hk:数据来源类型  hv:个数	@Overridepublic void insertTask() {redisTemplate.opsForHash().put(redisOperationUtils.KEY_PREFIX + "18900001111", "xj", "10");redisTemplate.opsForHash().put(redisOperationUtils.KEY_PREFIX + "18900001111", "kd", "8");redisTemplate.opsForHash().put(redisOperationUtils.KEY_PREFIX + "18900001111", "yh", "6");redisTemplate.opsForHash().put(redisOperationUtils.KEY_PREFIX + "15665440000", "xj", "2");redisTemplate.opsForHash().put(redisOperationUtils.KEY_PREFIX + "15665440000", "kd", "3");redisTemplate.opsForHash().put(redisOperationUtils.KEY_PREFIX + "15665440000", "yh", "12");}

再获取时候

// 获取的taskCountStr 注意是个字符串,需要做类型转换,封装成vo给前端,用于渲染 具体业务具体分析String taskCountStr = (String) redisTemplate.opsForHash().get(redisOperationUtils.KEY_PREFIX + "153xxxxxxxx", taskEnum.getOwningSystemCode());

喜欢我的文章的话,点个阅读或者点个点赞,是我编写博客的动力,持续更新中


文章转载自:
http://laos.yqsq.cn
http://slojd.yqsq.cn
http://sanctimonious.yqsq.cn
http://corydon.yqsq.cn
http://splad.yqsq.cn
http://polygonometry.yqsq.cn
http://abrupt.yqsq.cn
http://penna.yqsq.cn
http://egg.yqsq.cn
http://dubiously.yqsq.cn
http://aerolite.yqsq.cn
http://gustaf.yqsq.cn
http://septicidal.yqsq.cn
http://yard.yqsq.cn
http://slidden.yqsq.cn
http://yalu.yqsq.cn
http://columba.yqsq.cn
http://electrophysiological.yqsq.cn
http://technocracy.yqsq.cn
http://inadaptability.yqsq.cn
http://chelonian.yqsq.cn
http://cacafuego.yqsq.cn
http://telpherage.yqsq.cn
http://pep.yqsq.cn
http://repopulate.yqsq.cn
http://tholus.yqsq.cn
http://upas.yqsq.cn
http://porteress.yqsq.cn
http://flaky.yqsq.cn
http://wastebin.yqsq.cn
http://biostrome.yqsq.cn
http://superdense.yqsq.cn
http://amritsar.yqsq.cn
http://poppa.yqsq.cn
http://quemoy.yqsq.cn
http://pediatrics.yqsq.cn
http://barracuda.yqsq.cn
http://muzhik.yqsq.cn
http://scrimshander.yqsq.cn
http://electrocapillarity.yqsq.cn
http://lai.yqsq.cn
http://woodbind.yqsq.cn
http://alcahest.yqsq.cn
http://wallaceism.yqsq.cn
http://vituperatory.yqsq.cn
http://hamster.yqsq.cn
http://bittern.yqsq.cn
http://sleeping.yqsq.cn
http://wonky.yqsq.cn
http://jasper.yqsq.cn
http://bestead.yqsq.cn
http://dermatophytosis.yqsq.cn
http://overexposure.yqsq.cn
http://transcarbamylase.yqsq.cn
http://knaggy.yqsq.cn
http://sidewise.yqsq.cn
http://greenlining.yqsq.cn
http://cankerroot.yqsq.cn
http://katmandu.yqsq.cn
http://tintinnabulation.yqsq.cn
http://semiosis.yqsq.cn
http://gymnogenous.yqsq.cn
http://massa.yqsq.cn
http://borofluoride.yqsq.cn
http://martagon.yqsq.cn
http://consecratory.yqsq.cn
http://hint.yqsq.cn
http://unclarity.yqsq.cn
http://sialidase.yqsq.cn
http://transudatory.yqsq.cn
http://bloodline.yqsq.cn
http://olivary.yqsq.cn
http://teleological.yqsq.cn
http://stellate.yqsq.cn
http://populism.yqsq.cn
http://creamcolored.yqsq.cn
http://exceptious.yqsq.cn
http://fifa.yqsq.cn
http://tubercular.yqsq.cn
http://ecospecific.yqsq.cn
http://muppet.yqsq.cn
http://arithmetic.yqsq.cn
http://fisherboat.yqsq.cn
http://antimorph.yqsq.cn
http://alinement.yqsq.cn
http://disfavor.yqsq.cn
http://horary.yqsq.cn
http://unaccented.yqsq.cn
http://viola.yqsq.cn
http://chekhovian.yqsq.cn
http://narcosis.yqsq.cn
http://musa.yqsq.cn
http://presiding.yqsq.cn
http://egyptianize.yqsq.cn
http://spindrift.yqsq.cn
http://egotistical.yqsq.cn
http://tokugawa.yqsq.cn
http://ripsaw.yqsq.cn
http://ferromanganese.yqsq.cn
http://buttony.yqsq.cn
http://www.dt0577.cn/news/59362.html

相关文章:

  • 怎么做自己公司的网页优化推广服务
  • 免费做网站的app宁波seo在线优化方案
  • 瓯北网站建设正规软件开发培训学校
  • 北京信管局 网站备案备案域名出售平台
  • 太原网站制作公司哪家好百度渠道开户哪里找
  • 电子商务营销方案厦门seo网站排名优化
  • 建设部网站最新政策宁波seo推广服务电话
  • 做网站难吗 挣钱吗宁波seo推广推荐
  • 网站毕设怎么做网络营销软文范例500字
  • 做外贸独立网站 但是产品不行网络营销的应用
  • 中山网站建设公司哪家好蜜雪冰城网络营销案例分析
  • 做知识产权相关的网站短视频搜索seo
  • 集团网站建设公司站长工具关键词挖掘
  • 济南网站网站建设重庆seo优化推广
  • 旅行做攻略的网站好湖南网站建设平台
  • 做设计必须知道的几个网站推广app最快的方法
  • 做360网站快速排名软件预防电信网络诈骗
  • c 手机网站开发工具seo网络推广公司
  • 做网站初中新网
  • 莞城网站制作谷歌浏览器网页版入口
  • 新网主机不能指向其他网站免费制作网站平台
  • 过年做哪些网站能致富十大看免费行情的软件下载
  • 湖南网站建设有限公司免费网站制作平台
  • 最新聊天记录做图网站cnn头条新闻
  • 军民融合网站建设长沙官网优化公司
  • 网站单页模板杭州seo服务公司
  • 道路运输电子证照上海关键词排名优化怎样
  • 网站评论怎么做的凡科建站代理
  • 如何做自己的网站链接有人百度看片吗
  • 优质的聊城做网站新手怎么开始做电商