go学习redis的学习与使用
文章目录
- 一、redis的学习与使用
- 1.Redis的基本介绍
- 2.Redis的安装下载安装包即可
- 3.Redis的基本使用
- 1)Redis的启动:
- 2)Redis的操作的三种方式
- 3)说明:Redis安装好后,默认有16个数据库,初始默认使用0号库,编号0...15
- 4.Redis的五大数据类型和CRUD操作
- 1)Redis的五大数据类型是:**String(字符串)**、**Hash(哈希)**、**List(列表)**、**Set(集合)**和**zset(sorted set :有序集合)**
- 2)String
- 3)Hash
- 4)List
- 5)Set
- 二、go操作redis
- 1、安装第三方开源的redis库
- 2、使用go语言开始进行操作
- 1)操作string
- 2)操作hash
- 3)批量操作Set/Get数据
- 4)给数据设置有效时间
- 5)课堂练习
- 6)Redis连接池
一、redis的学习与使用
1.Redis的基本介绍
1).Redis是NoSQL数据库,不是传统的关系型数据库
官网: http://redis.io/ 和http://www.redis.cn/
2).Redis:REmote DIctionary Server(远程字典服务器),Redis的性能非常高,单机可以达到15W gps.通常适合做缓存,也可以持久化
3)是完全开源免费的,高性能的(key/value)分布式内存数据库,基于内存运行并支持持久化Nosql数据库,是最热门的NoSql数据库之一,也称为数据结构服务器
2.Redis的安装下载安装包即可
网址:https://github.com/tporadowski/redis/releases
下载好后的目录结构,其中有两个是redis的关键文件
redis客户端文件:redis-cli.exe
redis服务器文件:redis-server.exe
redis结构示意图
3.Redis的基本使用
1)Redis的启动:
启动Redis的服务器端程序(redis-server.exe),直接双击即可运行
2)Redis的操作的三种方式
说明:
1)使用telnet操作Redis
2)使用redis-cli.exe操作Redis,双击即可进入客户端
3)Golang操作redis
redis基本指令
http://redisdoc.com(已失效)
3)说明:Redis安装好后,默认有16个数据库,初始默认使用0号库,编号0…15
-1.添加key-val [set]
-2.查看当前redis的所有key [key * 获取key对应的值[get key]
-3.切换redis数据库[select index]
-4.如何查看当前数据库的key-val数量[dbsize]
-5.清空当前数据库的key-val和清空所有数据库的key -val[flush db flushall]
4.Redis的五大数据类型和CRUD操作
1)Redis的五大数据类型是:String(字符串)、Hash(哈希)、List(列表)、Set(集合)和zset(sorted set :有序集合)
2)String
(字符串)-介绍
-1.string是redis的基本类型,一个key对应一个value
-2.string是类型是二进制安全的。除普通的字符串外,也可以存放图片数据。
-3.redis中字符串value最大值是512M
举例,存放一个地址信息:
address北京天安门
说明:
key :address
value : 北京天安门
127.0.0.1:6379> set address beijing
OK
127.0.0.1:6379> get address
"beijing"
127.0.0.1:6379>
-4.String(字符串)-CRUD
举例说明Redis的String字符串的CRUD操作
set如果存在就相当于修改,不存在就是添加 /get/del
127.0.0.1:6379> del address
(integer) 1
127.0.0.1:6379> get address
(nil)
127.0.0.1:6379>
-5.String(字符串)-使用细节和注意事项
- setex(set with expire)键秒值
127.0.0.1:6379> setex mess01 10 hello,you
OK
127.0.0.1:6379> get mess01
"hello,you"
127.0.0.1:6379> get mess01
"hello,you"
127.0.0.1:6379> get mess01
"hello,you"
127.0.0.1:6379> get mess01
"hello,you"
127.0.0.1:6379> get mess01
(nil) //mess01有效期就10秒,10秒后就销毁
127.0.0.1:6379>
- mset[同时设置一个或多个key-value对]
MSET key vlaue [key value …]
同时设置一个或多个key-value对
如果某个给定key值已经存在,那么MSET会用新值覆盖原来的旧值
127.0.0.1:6379> mset worker01 tom worker02 scott
OK
127.0.0.1:6379> get worker01
"tom"
127.0.0.1:6379> get worker02
"scott"
127.0.0.1:6379> mget worker01 worker02
1) "tom"
2) "scott"
3)Hash
(哈希,类似于golang里的Map)-介绍
Redis hash是一个键值对象集合。var user1 map[string]string
Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象
举例。存放一个User信息
user1 name 张三 age 10
说明
key : user1
name 张三 和 age 30 就是两对 field-value
实操:演示添加user的信息案例(name age job)
127.0.0.1:6379> hset user1 name "smith"
(integer) 1
127.0.0.1:6379> hset user1 age 30
(integer) 1
127.0.0.1:6379> hset user1 job "golang coder"
(integer) 1
127.0.0.1:6379> hget user1 name
"smith"
127.0.0.1:6379> hget user1 age
"30"
127.0.0.1:6379> hget user1 job
"golang coder"
127.0.0.1:6379>
Hash使用细节和注意事项
在给user设置name和age时,前面我们是一步一步设置,使用hmset和hmget可以一次性来设置多个field的值和返回多个field的值
127.0.0.1:6379> hmset user2 name jerry age 110 job "java coder"
OK
127.0.0.1:6379> hmget user2 name age job
1) "jerry"
2) "110"
3) "java coder"
127.0.0.1:6379>
hlen统计一个hash有几个元素
127.0.0.1:6379> hlen user2
(integer) 3
127.0.0.1:6379>
hexists key field
查看哈希表key中,给定域field是否存在
127.0.0.1:6379> hexists user2 name
(integer) 1
127.0.0.1:6379>
4)List
-1.(列表)-介绍
列表是简单的字符串列表,按照插入顺序排序,你可以添加一个元素到列表头部(左边)或者尾部(右边)
List的本质是一个链表,List的元素的有序的,元素的值可以重复
举例,存放多个地址信息
city 北京 天津 上海
说明
北京 天津 上海 就是三个元素
127.0.0.1:6379> lpush city beijing shanghai tianjing
(integer) 3
127.0.0.1:6379> lrange city 0 -1(0表示开头 -1表示尾部)
1) "tianjing"
2) "shanghai"
3) "beijing"
127.0.0.1:6379>
-2.关于list的基本命令介绍
lpush:从左边插入数据
rpush:从右边插入数据
lrange: 用法 lrange key start stop :返回列表key中指定区间内的元素,区间以偏移量start和stop指定,下标(index)参数start和stop都是以0为底,也就是说,以0表示列表的第一个元素,以1表示列表的第二个元素,以此类推。你也可以使用函数负数下标,以-1表示列表的最后一个元素,-2表示列表的倒数第二个元素,以此类推
lpop :从我们列表的左边弹出一个数据
rpop :从我们列表的右边弹出一个数据
del : 删掉这个列表
实战演示
127.0.0.1:6379> lpush herolist aa bb cc
(integer) 3
127.0.0.1:6379> lrange herolist 0 -1
1) "cc"
2) "bb"
3) "aa"
127.0.0.1:6379> rpush herolist dd eee
(integer) 5
127.0.0.1:6379> lrange herolist 0 -1
1) "cc"
2) "bb"
3) "aa"
4) "dd"
5) "eee"
127.0.0.1:6379> lpop herolist
"cc"
127.0.0.1:6379> lrange herolist 0 -1
1) "bb"
2) "aa"
3) "dd"
4) "eee"
127.0.0.1:6379> rpop herolist
"eee"
127.0.0.1:6379> lrange herolist 0 -1
1) "bb"
2) "aa"
3) "dd"
127.0.0.1:6379> del herolist
(integer) 1
127.0.0.1:6379> lrange herolist 0 -1
(empty list or set)
127.0.0.1:6379>
-3.List-使用细节和注意事项
(1)index,按照索引下标获得元素(从左到右,编号从0开始)
(2)LLEN key ,返回列表key的长度,如果key不存在,则key被解释为一个空列表,返回0
(3)List的其他说明
- List数据,可以从左或者右,插入添加
- 如果值全移除,对应的键也就消失了
5)Set
(集合)-介绍
Redis的Set是string类型的无序集合。
底层是HashTble数据结构,Set也是存放很多字符串元素,字符串元素是无序的,而且元素的值不能重复
举例,存放多个邮件列表信息
email sggg@sohu.com tom@sohu.com
说明
key :email
sggg@sohu.com tom@sohu.com 这两个就是元素
关于set的基本命令
sadd :添加元素
smembers :取出所有值
sismember :判断是否存在该成员
srem :删除指定值
127.0.0.1:6379> sadd emails tom@sohu.com jack@qq.com
(integer) 2
127.0.0.1:6379> smembers emails
1) "tom@sohu.com"
2) "jack@qq.com"
127.0.0.1:6379> sadd emails kk@yy.com uu@qq.com
(integer) 2
127.0.0.1:6379> smembers emails
1) "uu@qq.com"
2) "tom@sohu.com"
3) "jack@qq.com"
4) "kk@yy.com"
127.0.0.1:6379> sadd emails jack@qq.com
(integer) 0 //0表示添加失败,因为set的元素是不可以重复的
127.0.0.1:6379> sismember emails tom@sohu.com
(integer) 1 //查看set里面是否含有tom@souhu.com这个元素 1代表存在 0代表不存在
127.0.0.1:6379> sismember emails tom~@sohu.com
(integer) 0
127.0.0.1:6379> srem emails tom@sohu.com
(integer) 1 //演示删除元素
127.0.0.1:6379> smembers emails
1) "kk@yy.com"
2) "uu@qq.com"
3) "jack@qq.com"
127.0.0.1:6379>
二、go操作redis
1、安装第三方开源的redis库
1)使用第三方开源的redis库:github.com/garyburd/redigo/redis
2)在使用redis前,先安装第三方Redis库,在GOPATH路径下执行安装指令:
D:\myfile\go\project>go get github.com/garyburd/redigo/redis
3)安装之后,可以看到如下包
特别说明:在安装Redis 库之前,确保已经安装并配置了git,因为是从github上下载安装库的,需要使用到git
2、使用go语言开始进行操作
Set/Get接口
1)操作string
说明:通过golang添加和获取key-value【比如name-tom~】
package main
import ("fmt""github.com/garyburd/redigo/redis"
)func main() {//通过go向redis写入数据和读取数据//1.连接到redisconn,err := redis.Dial("tcp","127.0.0.1:6379")if err != nil {fmt.Println("redis.Dial err=",err)return}defer conn.Close() //关闭//2.通过go向redis写入数据string [key-val]_, err=conn.Do("Set","name","tomjerry毛毛和老鼠")if err != nil {fmt.Println("set err=",err)return}//3.通过go向redis读入数据string [key-val]r, err :=redis.String(conn.Do("Get","name"))if err != nil {fmt.Println("Get err=",err)return}//返回的r是interfacce{}//因为name对应的值是字符串,因此我们需要转换[在一开始就用redis提供的方法进行转换]//nameString := r.(string) errofmt.Println("操作成功!",r) //操作成功! tomjerry毛毛和老鼠
}
2)操作hash
说明:通过Golang对redis操作Hash数据类型
package main
import ("fmt""github.com/garyburd/redigo/redis"
)
func main() {//通过go向redis写入数据和读取数据//1.连接到redisconn,err := redis.Dial("tcp","127.0.0.1:6379")if err != nil {fmt.Println("redis.Dial err=",err)return}defer conn.Close() //关闭//2.通过go向redis写入数据string [key-val]//写入名字_, err=conn.Do("HSet","user01","name","john")if err != nil {fmt.Println("hset err=",err)return}//写入age_, err=conn.Do("HSet","user01","age",10)if err != nil {fmt.Println("hset err=",err)return}//3.通过go向redis读入数据string [key-val]r1, err :=redis.String(conn.Do("HGet","user01","name"))if err != nil {fmt.Println("hGet err=",err)return}r2, err :=redis.Int(conn.Do("HGet","user01","age"))if err != nil {fmt.Println("hGet err=",err)return}fmt.Printf("操作成功! r1=%v,r2=%v\n",r1,r2) //操作成功! r1=john,r2=10
}
3)批量操作Set/Get数据
说明:通过Golang对Redis操作,一次操作可以Set/Get多个key-val数
package main
import ("fmt""github.com/garyburd/redigo/redis"
)
func main() {//通过go向redis写入数据和读取数据//1.连接到redisconn,err := redis.Dial("tcp","127.0.0.1:6379")if err != nil {fmt.Println("redis.Dial err=",err)return}defer conn.Close() //关闭//2.通过go向redis写入数据string [key-val]//写入名字和年龄_, err=conn.Do("HMSet","user02","name","tom","age",19)if err != nil {fmt.Println("HMSet err=",err)return}//3.通过go向redis读入数据string [key-val]r, err :=redis.Strings(conn.Do("HMGet","user02","name","age"))if err != nil {fmt.Println("hGet err=",err)return}// fmt.Printf("r=%v\n",r) //r=[tom 19]for i,v := range r {fmt.Printf("r[%d]=%v\n",i,v)}}
4)给数据设置有效时间
说明:通过golang对redis操作,给key-value设置有效时间
core code
//给name数据设置有效时间10s
_,err =c.Do("expire","name",10)
5)操作List
说明:通过golang对redis操作list数据类型
corecode
_,err=c.Do("lpush","herolist","no1.宋江",30,"no2.吴用",28)
5)课堂练习
package main
import ("fmt""github.com/garyburd/redigo/redis"
)func main() {var names stringvar ages intvar skills string//1.连接到redisconn,err := redis.Dial("tcp","127.0.0.1:6379")if err != nil {fmt.Println("redis.Dial err=",err)return}defer conn.Close() //关闭fmt.Println("请输入names: ")fmt.Scan(&names)fmt.Println("请输入ages: ")fmt.Scan(&ages)fmt.Println("请输入skills: ")fmt.Scan(&skills)//go操作redis进行写的操作_, err=conn.Do("HMSet","monster","name",names,"age",ages,"skill",skills)if err != nil {fmt.Println("HMSet err=",err)return}//go操作redis进行读的操作r, err :=redis.Strings(conn.Do("HMGet","monster","name","age","skill"))if err != nil {fmt.Println("HMGet err=",err)return}for i,v := range r{fmt.Printf("r[%d]=%v\n",i,v)}fmt.Println("操作完成")}
6)Redis连接池
说明:通过Golang对redis的操作,还可以通过redis连接池,流程如下
-1.事先初始化一定数量的连接,放入到连接池
-2.当go需要操作redis时,直接从redis连接池取出连接即可
-3.这样可以节省临时获取redis连接的时间,从而提高效率
core code
var pool *redis.Pool
pool = &redis.Pool{MaxIdle:8MaxActive:0IdleTimeout:100Dial:func()(redis.Conn,error){return redis.Dial("tcp","localhost:6379")},
}
c :=pool.Get()
-4.示意图
package main
import ("fmt""github.com/garyburd/redigo/redis"
)
//定义一个全局的pool
var pool *redis.Pool//当启动程序时就初始化连接池
func init() {pool = &redis.Pool{MaxIdle:8, //最大空闲连接数MaxActive:0,//表示和数据库的最大连接数,0表示没有限制IdleTimeout:100,//最大空闲时间Dial:func()(redis.Conn,error){//初始化连接的代码。连接哪个ipreturn redis.Dial("tcp","localhost:6379")},}
}
func main() {//先从pool池取出一个连接conn := pool.Get()defer conn.Close()_, err :=conn.Do("Set","name","汤姆猫~~")if err != nil {fmt.Println("conn.Do err=",err)return}//取出r,err :=redis.String(conn.Do("Get","name"))if err != nil {fmt.Println("conn.Do err=",err)return}fmt.Println("r=",r)}
相关文章:
go学习redis的学习与使用
文章目录 一、redis的学习与使用1.Redis的基本介绍2.Redis的安装下载安装包即可3.Redis的基本使用1)Redis的启动:2)Redis的操作的三种方式3)说明:Redis安装好后,默认有16个数据库,初始默认使用0…...
娱乐新拐点:TikTok如何改变我们的日常生活?
在数字时代的浪潮中,社交媒体平台不断涌现,其中TikTok以其独特的短视频内容在全球范围内掀起了一场娱乐革命。本文将深入探讨TikTok如何改变我们的日常生活,从社交互动、文化传播到个人创意表达,逐步改写了娱乐的新篇章。 短视频潮…...
【Nginx】Nginx了解(基础)
文章目录 Nginx产生的原因Nginx简介Nginx的作用反向代理负载均衡策略动静分离 Nginx的Windows下的安装Linux下的安装Nginx常用命令 负载均衡功能演示 Nginx产生的原因 背景 一个公司的项目刚刚上线的时候,并发量小,用户使用的少,所以在低并发…...
十九)Stable Diffusion使用教程:ai室内设计案例
今天我们聊聊如何通过SD进行室内设计装修。 方式一:controlnet的seg模型 基础起手式: 选择常用算法,抽卡: 抽到喜欢的图片之后,拖到controlnet里: 选择seg的ade20k预处理器,点击爆炸按钮,得到seg语义分割图,下载下来: 根据语义分割表里的颜色值,到PS里进行修改: 语…...
虚拟机VMware安装centos以及配置网络
目录 1、CentOS7的下载2、CentOS7的配置3、CentOS7的安装4、CentOS7的网络配置 4.1、自动获取IP4.2、固定获取IP 5、XShell连接CentO 准备工作:提前下载和安装好VMware。VMware的安装可以参考这一篇文章:VMware15的下载及安装教程。 1、CentOS7的下载 …...
call 和 apply:改变对象行为的秘密武器(上)
🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…...
工作中 docker 的使用积累
2 进入 openwrt 容器 docker exec -it openwrt /bin/sh3 查看 docker 信息 docker info4 启动容器 4 挂载 overlay mount -t overlay overlay -o lowerdirA:B,upperdirC,workdirworker /tmp/test -t overlay : 指定要挂载的文件系统类型为 overlayoverlay: 指定…...
初识SpringSecurity
目录 前言 特点 快速开始 导入依赖 运行项目 访问服务 权限控制 实现UserDetails接口 添加SecurityConfig配置类 测试接口DemoController 设置权限控制authorizeHttpRequests 结果分析 总结 前言 Spring Security是一个强大且高度可定制的身份验证和访问控制框架…...
大数据讲课笔记1.4 进程管理
文章目录 零、学习目标一、导入新课二、新课讲解(一)进程概述1、基本概念2、三维度看待进程3、引入多道编程模型(1)CPU利用率与进程数关系(2)从三个视角看多进程 4、进程的产生和消亡(1…...
技术点:实现大文件上传
大文件上传 实现思路 对于大文件上传考虑到上传时间太久、超出浏览器响应时间、提高上传效率、优化上传用户体验等问题进行了深入探讨,以下初略罗列各个知识点的实现思路: 大文件上传对文件本身进行了文件流内容 Blob 的分割,使用 Blob.pr…...
记一次挖矿病毒的溯源
ps:因为项目保密的原因部分的截图是自己在本地的环境复现。 1. 起因 客户打电话过来说,公司web服务异常卡顿。起初以为是web服务缓存过多导致,重启几次无果后觉得可能是受到了攻击。起初以为是ddos攻击,然后去查看web服务器管理…...
day05-报表技术-图形报表
1、图表报表简介 在大数据时代,人们需要对大量的数据进行分析,帮助用户或公司领导更直观的察觉差异,做出判断,减少时间成本,而在web项目中除了表格显示数据外,还可以通过图表来表现数据,这种…...
【Spring】@Transactional事务属性详解
文章目录 1、事务传播行为注意事务传播行为在不同类之间调用生效Propagation.REQUIRED(默认传播行为)Propagation.REQUIRES_NEWPropagation.NESTED 2、事务的隔离级别隔离级别设置 3、设置事务异常回滚3.1、默认情况3.2、设置回滚异常3.3、设置不回滚的异常 4、超时时间5、只读…...
通过css3的锚定滚动属性,实现分页加载时让滚动条不闪动
html标签 <div scroll"handleScroll" id"list-container"style"overflow-anchor:auto;overflow-y: auto;height: 80vh"><ul id"talks"v-for"(item,index) in msgList":key"item.roleiditem.timeitem.conten…...
使用Selenium与Scrapy处理动态加载网页内容的解决方法
博客正文(包含详细注释) 引言 在爬虫技术领域,处理动态加载的网页内容常常是一项挑战,尤其是对于那些通过用户滚动或其他交互动态加载更多内容的网站。本文将介绍如何结合使用Selenium和Scrapy来有效处理这类网页。 初探Seleni…...
Linux的权限(二)
目录 前言 文件类型和访问权限(事物属性) 补充知识 文件类型 文件操作权限 修改文件权限 chmod指令 文件权限值的表示方法 字符表示方法 8进制数值表示方法 权限有无带来的影响 修改文件角色 chown与chgrp指令 目录的rwx权限 补充知识 …...
网络服务IP属地发生变化的原因有哪些?
近期,许多用户发现自己的网络服务IP属地发生了变化。原本固定的IP地址不再是静态的,而是发生了变动。这一现象引起了广大用户的关注和疑惑,对网络服务的使用和信息安全产生了影响。为了解决用户的疑虑,我们对此现象进行了深入探究…...
OpenGL 着色器程序的保存和加载(二进制)
背景 为了提高OpenGL 着色器程序的编译和链接速度,我们可以将程序保存为二进制进行加载,可以大幅度提升加载效率。 方法 以下是加载和保存二进制程序的方法。 // 加载着色器程序的二进制文件到已创建的着色器程序中 bool loadPragram(const std::str…...
【Unity 实用工具篇】| 游戏多语言解决方案,官方插件Localization 实现本地化及多种语言切换
前言 【Unity 实用工具篇】| 游戏多语言解决方案,官方插件Localization 实现本地化及多种语言切换一、多语言本地化插件 Localization1.1 介绍1.2 效果展示1.3 使用说明 二、 插件导入并配置2.1 安装 Localization2.2 全局配置 三、多语言映射表3.1 创建多语言文本配…...
疯狂SQL转换系列- SQL for Tencent Cloud VectorDB
为了尽量保证使用者通过统一的SQL标准访问各类型数据库,我们这里开启了“疯狂SQL转换系列”。转换的语法效果不一定是最好的,更多是为用户提供一个统一的数据库交互体验。转换数据库目标的确认更多是内生的。基于我们对业务发展的需要。该向量库SQL转换的…...
Excel中的INDIRECT函数用法
当在 Excel 中使用 INDIRECT 函数时,它可以帮助我们通过引用字符串中的单元格地址来获取对应单元格的值。这个函数非常有用,特别是在需要动态地引用其他单元格的情况下。下面是 INDIRECT 函数的一些用法和示例: 基本用法: INDIREC…...
Spring-temp
IOC/DI实现步骤 1.配置元数据 2.实例化IOC 3.获取Bean 基于XML配置方式 管理组件 1.基于构造函数:有参、无参 2.基于静态工厂方法:有参、无参 依赖注入 1.构造函数 2.setter方法 Bean组件高级特性 1.作用域 2.生命周期 FactoryBean 基于注解 IOC Bean作…...
【C++干货铺】会搜索的二叉树(BSTree)
个人主页点击直达:小白不是程序媛 C系列专栏:C干货铺 代码仓库:Gitee 目录 前言: 二叉搜索树 二叉搜索树概念 二叉搜索树操作 二叉搜索树的查找 二叉搜索树的插入 二叉搜索树元素的删除 二叉搜索树的实现 BSTree结点 …...
【Spring AOP】 动态代理
一.AOP常见的实现方式 1.Spring AOP 2.aspectJ 注意:spring使用的是aspectJ的注解,但实现是spring自身实现的. 二.AOP原理 Spirng AOP原理 , 基于动态代理实现的. 三.代理模式 作用就是提供一个代理类,让我们在调用目标方法的时候,不再是直接对目标方法进行调用,而是通过代理类…...
NAT——网络地址转换
目录 一、概念 二、NAT的分类 1.静态NAT 1.1 静态NAT的配置 1.2 利用eNSP小实验加强对静态NAT的理解 2、动态NAT 三、NAPT——端口映射 四、Easy IP 使用一个公网地址可以让所有人都上公网 一、概念 随着Internet的发展和网络应用的增多,IPv4地址枯竭已经成为…...
Lambda 表达式的常见用法
文章目录 Lambda 表达式的常见用法使用Lambda表达式集合遍历使用Lambda表达式排序使用Lambda表达式过滤使用Lambda表达式映射使用Lambda表达式归约使用Lambda表达式分组使用Lambda表达式函数式接口的实现使用Lambda表达式线程的创建使用Lambda表达式进行Optional 操作使用Lambd…...
成本管理常用的ChatGPT通用提示词模板
成本分析:如何进行成本分析? 成本核算:如何进行成本核算? 成本控制:如何控制成本? 成本效益分析:如何进行成本效益分析? 成本预测:如何预测成本? 成本决…...
如何在PHP中处理日期和时间?
在 PHP 中,你可以使用内置的 DateTime 类和相关函数来处理日期和时间。以下是一些常见的日期和时间操作的示例: 使用 DateTime 类: 获取当前日期和时间: $currentDateTime new DateTime(); echo $currentDateTime->format(Y-…...
NO-IOT翻频,什么是翻频,电信为什么翻频
1.1 翻频迁移最终的目的就是减少网络的相互干扰,提供使用质量. 1.2 随着与日俱增的网络规模的扩大,网内干扰已成了影响网络的质量标准之一,为了保障电信上网体验,满足用户日益增长的网速需求,更好的服务客户,电信针对…...
云原生之深入解析OOM和CPU节流
一、前言 使用 Kubernetes 时,内存不足 (OOM) 错误和 CPU 节流是云应用程序中资源处理的主要难题,这是为什么呢?云应用程序中的 CPU 和内存要求变得越来越重要,因为它们与云成本直接相关。通过 limits 和 requests ,可…...
海南房产网站开发/广告推广方案怎么写
本文以一个现代的、实际的个人电脑为对象,分析其中CPU(Intel Core 2 Duo 3.0GHz)以及各类子系统的运行速度——延迟和数据吞吐量。通过粗略的估算PC各个组件的相对运行速度,希望能给大家留下一个比较直观的印象。本文中的数据来自…...
在腾讯云怎样建设网站/荆州seo推广
本文地址:http://www.cnblogs.com/archimedes/p/c-opensource-project.html,转载请注明源地址。 本篇文章主要总结一些C开源项目,有些是很著名的,有些则比较生僻 1.Webbench Webbench是一个在linux下使用的非常简单的网站压测工具…...
wordpress读写分离配置/seo排名课程咨询电话
dst cv.distanceTransform(src, distanceType, maskSize[, dst[, dstType]]) 这个函数用来干嘛呢??答:计算源图像中每个像素到最近零像素的距离。 参考:https://www.jianshu.com/p/fe4ec897dbf5 https://www.cnblogs.com/ssy…...
网站在百度找不到了/免费seo教程分享
1.AppMon工作原理 AppMon使用了多平台动态框架环境Frida,Frida是一款基于Python JavasSript 的hook框架,适应android\ios\linux\win\osx等平台的脚本交互环境。AppMon还包括了一系列app事件监控和行为修改脚本,并能通过web接口显示和操作。 …...
特种作业操作证查询网站/seo网络推广知识
基于MATLAB--SIMULINK的光伏太阳能电源仿真 电子质量 (2o15第08期)本文就是在第二种方法的基础上 ,进行了改进,利 I(A)用DC—DC斩波器,对实验进行闭环调节 ,最终得 出较为准确的实验结果。 4实验原理如下:先暂时把直流…...
如何做网站定位/百度搜索资源平台提交
讲解第一模块思维导图(口述5分钟)1. 分别解释"","",""的含义(口述)(1分钟)赋值逻辑判单累加,右边赋值到左边2. 两个变量值的关系?(口述)(1分钟)- n1 123456- n2 n1n1的值123456赋给了n2,如果n1的值被从新赋值…...