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

天津自助建站软件义乌外贸网站建设

天津自助建站软件,义乌外贸网站建设,北京外贸行业网站建设,广州网站建设商城redis简介 基本概念 Redis,英文全称是Remote Dictionary Server(远程字典服务),是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。 与MySQL数据库不…

redis简介

基本概念

Redis,英文全称是Remote Dictionary Server(远程字典服务),是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

与MySQL数据库不同的是,Redis的数据是存在内存中的。它的读写速度非常快,每秒可以处理超过10万次读写操作。因此redis被广泛应用于缓存,另外,Redis也经常用来做分布式锁。除此之外,Redis支持事务、持久化、LUA 脚本、LRU 驱动事件、多种集群方案

数据类型

String(字符串)
Hash(哈希)
List(列表)
Set(集合)
zset(有序集合)
它还有三种特殊的数据结构类型

Geospatial
Hyperloglog
Bitmap

概念链接:
【超级详细】一文搞懂redis的所有知识点

reddis持久化

1.RDB(Redis Database)
这种模式下,Redis会在指定的时间间隔内生成一个数据集快照,并将该快照写入到一个临时文件中。持久化完成后,旧的临时文件会被新的临时文件所替代,这样就可以实现数据的恢复。RDB持久化具有以下特点:

1.使用单个文件,便于管理和备份。
2.容灾性好,因为可以通过外部工具如福尔克斯进程来执行写操作。
3.主进程不会因为持久化而停止接收命令,从而保持高性能。
4.数据安全性相对较低,尤其是在频繁的持久化操作下,存在数据丢失的风险。
如果在持久化过程中出现故障,可能会导致数据丢失。
条件在redis.conf文件中配置,格式如下:
save (time) (count)
当满足在time(单位是秒)时间内,至少进行了count次修改后,触发条件,进行RDB快照。例如,默认的配置如下:
在这里插入图片描述

2.AOF(Append only file)
在这种模式下,Redis会按照命令行的协议记录所有的命令操作,并将其保存为一个AOF文件。AOF文件的每一条指令都会被记录到文件中,并且可以通过特定的模式写文件来实现即使在服务器崩溃的情况下也能保证数据的一致性。AOF的优点包括:

1.数据安全性较高,因为每个命令都被完整地记录下来。
2.文件大小可控,可以根据需要调整AOF的大小和频率。
3.可以配置AOF文件的属性,例如压缩级别,以优化文件大小和恢复速度。
缺点在于AOF文件通常较大,导致恢复速度较慢,且在大规模数据情况下启动效率较低。
当AOF文件变得非常大时,可能会对命令进行合并或删除不必要的命令,这有助于减少文件的大小。

springboot整合redis

加入依赖

Spring Boot 2.x+ 默认集成Lettuce

        <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>redis-test</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><parent><artifactId>spring-boot-starter-parent</artifactId><groupId>org.springframework.boot</groupId><version>2.3.5.RELEASE</version></parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>2.0.9</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId><version>2.9.0</version> <!-- 请使用最新版本 --></dependency></dependencies>
</project>

配置redis

配置自己的redis服务信息

spring:redis:host: localhostport: 6379password:lettuce:pool:max-active: 8max-wait: 100msmax-idle: 8min-idle: 0

配置redis bean

添加redis工具类

工具类参考链接
SpringBoot教程(十四) | SpringBoot集成Redis(全网最全)

package com.lsqingfeng.springboot.utils;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;/*** @className: RedisUtil* @description:* @author: sh.Liu* @date: 2022-03-09 14:07*/
@Component
public class RedisUtil {@Autowiredprivate RedisTemplate redisTemplate;/*** 给一个指定的 key 值附加过期时间** @param key* @param time* @return*/public boolean expire(String key, long time) {return redisTemplate.expire(key, time, TimeUnit.SECONDS);}/*** 根据key 获取过期时间** @param key* @return*/public long getTime(String key) {return redisTemplate.getExpire(key, TimeUnit.SECONDS);}/*** 根据key 获取过期时间** @param key* @return*/public boolean hasKey(String key) {return redisTemplate.hasKey(key);}/*** 移除指定key 的过期时间** @param key* @return*/public boolean persist(String key) {return redisTemplate.boundValueOps(key).persist();}//- - - - - - - - - - - - - - - - - - - - -  String类型 - - - - - - - - - - - - - - - - - - - -/*** 根据key获取值** @param key 键* @return 值*/public Object get(String key) {return key == null ? null : redisTemplate.opsForValue().get(key);}/*** 将值放入缓存** @param key   键* @param value 值* @return true成功 false 失败*/public void set(String key, String value) {redisTemplate.opsForValue().set(key, value);}/*** 将值放入缓存并设置时间** @param key   键* @param value 值* @param time  时间(秒) -1为无期限* @return true成功 false 失败*/public void set(String key, String value, long time) {if (time > 0) {redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);} else {redisTemplate.opsForValue().set(key, value);}}/*** 批量添加 key (重复的键会覆盖)** @param keyAndValue*/public void batchSet(Map<String, String> keyAndValue) {redisTemplate.opsForValue().multiSet(keyAndValue);}/*** 批量添加 key-value 只有在键不存在时,才添加* map 中只要有一个key存在,则全部不添加** @param keyAndValue*/public void batchSetIfAbsent(Map<String, String> keyAndValue) {redisTemplate.opsForValue().multiSetIfAbsent(keyAndValue);}/*** 对一个 key-value 的值进行加减操作,* 如果该 key 不存在 将创建一个key 并赋值该 number* 如果 key 存在,但 value 不是长整型 ,将报错** @param key* @param number*/public Long increment(String key, long number) {return redisTemplate.opsForValue().increment(key, number);}/*** 对一个 key-value 的值进行加减操作,* 如果该 key 不存在 将创建一个key 并赋值该 number* 如果 key 存在,但 value 不是 纯数字 ,将报错** @param key* @param number*/public Double increment(String key, double number) {return redisTemplate.opsForValue().increment(key, number);}//- - - - - - - - - - - - - - - - - - - - -  set类型 - - - - - - - - - - - - - - - - - - - -/*** 将数据放入set缓存** @param key 键* @return*/public void sSet(String key, String value) {redisTemplate.opsForSet().add(key, value);}/*** 获取变量中的值** @param key 键* @return*/public Set<Object> members(String key) {return redisTemplate.opsForSet().members(key);}/*** 随机获取变量中指定个数的元素** @param key   键* @param count 值* @return*/public void randomMembers(String key, long count) {redisTemplate.opsForSet().randomMembers(key, count);}/*** 随机获取变量中的元素** @param key 键* @return*/public Object randomMember(String key) {return redisTemplate.opsForSet().randomMember(key);}/*** 弹出变量中的元素** @param key 键* @return*/public Object pop(String key) {return redisTemplate.opsForSet().pop("setValue");}/*** 获取变量中值的长度** @param key 键* @return*/public long size(String key) {return redisTemplate.opsForSet().size(key);}/*** 根据value从一个set中查询,是否存在** @param key   键* @param value 值* @return true 存在 false不存在*/public boolean sHasKey(String key, Object value) {return redisTemplate.opsForSet().isMember(key, value);}/*** 检查给定的元素是否在变量中。** @param key 键* @param obj 元素对象* @return*/public boolean isMember(String key, Object obj) {return redisTemplate.opsForSet().isMember(key, obj);}/*** 转移变量的元素值到目的变量。** @param key     键* @param value   元素对象* @param destKey 元素对象* @return*/public boolean move(String key, String value, String destKey) {return redisTemplate.opsForSet().move(key, value, destKey);}/*** 批量移除set缓存中元素** @param key    键* @param values 值* @return*/public void remove(String key, Object... values) {redisTemplate.opsForSet().remove(key, values);}/*** 通过给定的key求2个set变量的差值** @param key     键* @param destKey 键* @return*/public Set<Set> difference(String key, String destKey) {return redisTemplate.opsForSet().difference(key, destKey);}//- - - - - - - - - - - - - - - - - - - - -  hash类型 - - - - - - - - - - - - - - - - - - - -/*** 加入缓存** @param key 键* @param map 键* @return*/public void add(String key, Map<String, String> map) {redisTemplate.opsForHash().putAll(key, map);}/*** 获取 key 下的 所有  hashkey 和 value** @param key 键* @return*/public Map<Object, Object> getHashEntries(String key) {return redisTemplate.opsForHash().entries(key);}/*** 验证指定 key 下 有没有指定的 hashkey** @param key* @param hashKey* @return*/public boolean hashKey(String key, String hashKey) {return redisTemplate.opsForHash().hasKey(key, hashKey);}/*** 获取指定key的值string** @param key  键* @param key2 键* @return*/public String getMapString(String key, String key2) {return redisTemplate.opsForHash().get("map1", "key1").toString();}/*** 获取指定的值Int** @param key  键* @param key2 键* @return*/public Integer getMapInt(String key, String key2) {return (Integer) redisTemplate.opsForHash().get("map1", "key1");}/*** 弹出元素并删除** @param key 键* @return*/public String popValue(String key) {return redisTemplate.opsForSet().pop(key).toString();}/*** 删除指定 hash 的 HashKey** @param key* @param hashKeys* @return 删除成功的 数量*/public Long delete(String key, String... hashKeys) {return redisTemplate.opsForHash().delete(key, hashKeys);}/*** 给指定 hash 的 hashkey 做增减操作** @param key* @param hashKey* @param number* @return*/public Long increment(String key, String hashKey, long number) {return redisTemplate.opsForHash().increment(key, hashKey, number);}/*** 给指定 hash 的 hashkey 做增减操作** @param key* @param hashKey* @param number* @return*/public Double increment(String key, String hashKey, Double number) {return redisTemplate.opsForHash().increment(key, hashKey, number);}/*** 获取 key 下的 所有 hashkey 字段** @param key* @return*/public Set<Object> hashKeys(String key) {return redisTemplate.opsForHash().keys(key);}/*** 获取指定 hash 下面的 键值对 数量** @param key* @return*/public Long hashSize(String key) {return redisTemplate.opsForHash().size(key);}//- - - - - - - - - - - - - - - - - - - - -  list类型 - - - - - - - - - - - - - - - - - - - -/*** 在变量左边添加元素值** @param key* @param value* @return*/public void leftPush(String key, Object value) {redisTemplate.opsForList().leftPush(key, value);}/*** 获取集合指定位置的值。** @param key* @param index* @return*/public Object index(String key, long index) {return redisTemplate.opsForList().index("list", 1);}/*** 获取指定区间的值。** @param key* @param start* @param end* @return*/public List<Object> range(String key, long start, long end) {return redisTemplate.opsForList().range(key, start, end);}/*** 把最后一个参数值放到指定集合的第一个出现中间参数的前面,* 如果中间参数值存在的话。** @param key* @param pivot* @param value* @return*/public void leftPush(String key, String pivot, String value) {redisTemplate.opsForList().leftPush(key, pivot, value);}/*** 向左边批量添加参数元素。** @param key* @param values* @return*/public void leftPushAll(String key, String... values) {
//        redisTemplate.opsForList().leftPushAll(key,"w","x","y");redisTemplate.opsForList().leftPushAll(key, values);}/*** 向集合最右边添加元素。** @param key* @param value* @return*/public void leftPushAll(String key, String value) {redisTemplate.opsForList().rightPush(key, value);}/*** 向左边批量添加参数元素。** @param key* @param values* @return*/public void rightPushAll(String key, String... values) {//redisTemplate.opsForList().leftPushAll(key,"w","x","y");redisTemplate.opsForList().rightPushAll(key, values);}/*** 向已存在的集合中添加元素。** @param key* @param value* @return*/public void rightPushIfPresent(String key, Object value) {redisTemplate.opsForList().rightPushIfPresent(key, value);}/*** 向已存在的集合中添加元素。** @param key* @return*/public long listLength(String key) {return redisTemplate.opsForList().size(key);}/*** 移除集合中的左边第一个元素。** @param key* @return*/public void leftPop(String key) {redisTemplate.opsForList().leftPop(key);}/*** 移除集合中左边的元素在等待的时间里,如果超过等待的时间仍没有元素则退出。** @param key* @return*/public void leftPop(String key, long timeout, TimeUnit unit) {redisTemplate.opsForList().leftPop(key, timeout, unit);}/*** 移除集合中右边的元素。** @param key* @return*/public void rightPop(String key) {redisTemplate.opsForList().rightPop(key);}/*** 移除集合中右边的元素在等待的时间里,如果超过等待的时间仍没有元素则退出。** @param key* @return*/public void rightPop(String key, long timeout, TimeUnit unit) {redisTemplate.opsForList().rightPop(key, timeout, unit);}
}

启动类添加接口调试配置

@SpringBootApplication
@EnableSwagger2WebMvc
public class RedisApplication {public static void main(String[] args) {SpringApplication.run(RedisApplication.class,args);}
}

常见类型使用示例

package com.test.redis.utils.controller;import com.test.redis.utils.RedisUtils;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource;@RestController
@RequestMapping("redis")
public class RedisController {@ResourceRedisUtils redisUtils;@GetMapping("get")ResponseEntity<Object> get(String key){return ResponseEntity.ok(redisUtils.get(key));}@GetMapping("set")ResponseEntity<Object> set(String key,String value){redisUtils.set(key,value);return ResponseEntity.ok("ok");}@GetMapping("hget")ResponseEntity<Object> hget(String key,String hashKey){return ResponseEntity.ok(redisUtils.hget(key,hashKey));}@GetMapping("hset")ResponseEntity<Object> hset(String key,String hashKey,Object object){redisUtils.hset(key,hashKey,object);return ResponseEntity.ok("ok");}
}

调试
http://localhost:9013/doc.html进入调式页面
string类型赋值
在这里插入图片描述
获取string类型的值
在这里插入图片描述
塞入hash值
在这里插入图片描述
获取hash值
在这里插入图片描述


文章转载自:

http://6uPboHF5.kjyhh.cn
http://ksYXnD3M.kjyhh.cn
http://OTw8ekR6.kjyhh.cn
http://rnOaPAW2.kjyhh.cn
http://3AitoQ89.kjyhh.cn
http://R9uOKQAO.kjyhh.cn
http://qSwuL69b.kjyhh.cn
http://lvYg1ytm.kjyhh.cn
http://BDNhcrRV.kjyhh.cn
http://0g0lL4e2.kjyhh.cn
http://mIvgOeJ3.kjyhh.cn
http://rS4mqBpG.kjyhh.cn
http://BbTIbGPV.kjyhh.cn
http://x7J1Tqck.kjyhh.cn
http://1tfwfMVk.kjyhh.cn
http://sPf9RTcV.kjyhh.cn
http://ADPpb0Ok.kjyhh.cn
http://7WLPU6vi.kjyhh.cn
http://sss1SCJ1.kjyhh.cn
http://CwzvLkMD.kjyhh.cn
http://GICsAym4.kjyhh.cn
http://PgttuqeH.kjyhh.cn
http://0XmWqMQO.kjyhh.cn
http://ozBgsURZ.kjyhh.cn
http://fqjKaq2D.kjyhh.cn
http://JU5y0R0f.kjyhh.cn
http://oPVpMUy7.kjyhh.cn
http://JbL4GbdO.kjyhh.cn
http://fbL2RFiy.kjyhh.cn
http://4rlhtFBN.kjyhh.cn
http://www.dtcms.com/wzjs/764000.html

相关文章:

  • 清远企业网站建设做电商运营还是网站运营哪个好
  • 文字云网站免费crm客户管理软件
  • 南京做网站公司 雷仁次世代建模培训
  • iis怎么使用来建设一个网站怎么做淘宝优惠券网站
  • 建设银行英文网站网站功能模块是什么
  • 洪梅镇网站建设公司深圳ui设计师招聘
  • 一个公司可以做多少个网站东莞市城建局
  • 网站购物车功能seo排名软件哪个好用
  • 广西免费网站制作企业做网站要注意些什么问题
  • 如何做静态网站全网品牌推广企业
  • 鄞州区建设网站我的世界的头怎么做视频网站
  • 网站免费模块代刷网站搭建教程
  • 网站建设架构选型优化推广网站怎么做最好
  • 响应式企业网站后台管理系统百度官网认证申请
  • 购物网站开发的背景与意义做网站需要什么配置服务器
  • vue使用于网站开发优秀网站设计要素
  • asp网站开发工具广州网站设计开发
  • 专业网站seo推广手机端怎么看世界杯
  • 看汽车哪个网站好装修公司装饰
  • 私人网站设计公司公司什么软件引流客源最快
  • 网站建设手机app设计网站的关键点
  • 建设官网网站vps网站建站助手
  • 网站建设及推广图片衡水网站建费用
  • 公益网站建设分析app网站平台搭建
  • 手机网站开发哪家好今天河南重大新闻
  • 网站建设期间注意事项深圳市外贸公司
  • 智能科技网站模板下载地址网页设计代码全过程
  • 营销型网站需要注意广东网站se0优化公司
  • 模板网站大全百度网盘app下载安装手机版
  • 旅游网站策划wordpress提醒用法