day01 Redis

news2025/1/23 17:37:13

day01 Redis

第一章 非关系型数据库的简介

第一节 技术发展线路

在这里插入图片描述

第二节 互联网发展所面临的问题

1. Web1.0 时代

在这里插入图片描述

2. Web2.0时代

在这里插入图片描述

3. 互联网三高问题

3.1 高并发、大流量

大型网站系统需要面对高并发(QPS)用户,大流量访问。Google日均PV数35亿,日均IP访问数3亿;腾讯QQ的最大在线用户数1.4亿(2011年数据);微信用户量已超11亿;2019年天猫双十一交易额突破2500亿。

3.2 高可用

系统7×24小时不间断服务。大型互联网站的宕机事件通常会成为新闻焦点,微博宕机、B站挂了、腾讯视频挂了,成为重大新闻热点。

3.3 海量数据

需要存储、管理海量数据,需要使用大量服务器。Facebook每周上传的照片数目接近10亿,百度收录的网页数目有数百亿,Google有近百万台服务器为全球用户提供服务。

第三节 解决上述问题的思路

1. 解决CPU和内存压力问题

在这里插入图片描述

2. 解决IO压力问题

在这里插入图片描述

第四节 非关系型数据库的概念

NoSQL是Not only SQL的缩写,大意为“不只是SQL”,说明这项技术是传统关系型数据库的补充而非替代。在整个NoSQL技术栈中MemCacheRedisMongoDB被称为三剑客。那么Web2.0时代为什么需要NoSQL数据库呢?

我们来做个对比:

1. 关系型数据库和非关系型数据库的对比

对比项关系型数据库非关系型数据库
数据存储位置硬盘内存
数据结构高度组织化结构化数据没有预定义的模式
数据操作方式SQL所有数据都是键值对,没有声明性查询语言
事务控制严格的基于事务ACID原则基于乐观锁的松散事务控制
访问控制细粒度的用户访问权限控制简单的基于IP绑定或密码的访问控制
外键支持不支持
索引支持不支持

所以NoSQL数据库的最大优势体现为:高性能(速度快、效率高)、高可用性(非关系型数据库可以更好地搭建高可用集群)和可伸缩性(灵活)。

2. 非关系型数据库的适用场景

  • 对数据高并发的读写

  • 海量数据的读写

  • 对数据高可扩展性的

3. 非关系型数据库不适用的场景

  • 需要事务支持

  • 基于sql的结构化查询存储,处理复杂的关系,需要多表查询。

第二章 Redis的简介

第一节 Redis的官方介绍

中文官网介绍: Redis是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如字符串(strings),散列(hashes),列表(lists),集合(sets),有序集合(sorted sets) 与范围查询,bitmaps,hyperloglogs和地理空间(geospatial) 索引半径查询。 Redis 内置了复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions)和不同级别的磁盘持久化(persistence), 并通过Redis哨兵(Sentinel)和自动分区(Cluster)提供高可用性(high availability)。

下面是几点补充:

  • Redis的名字是Remote Dictionary Server的缩写。
  • 开发语言是ANSI C。
  • 支持多种不同语言的客户端。
  • 官方给出的性能参考(在并发量50的情况下):
    • GET: 110000/s:读的速度每秒11万次
    • SET: 81000/s: 写的速度每秒8万次

中文官网http://www.redis.cn
英文官网http://redis.io

Redis命令参考文档网址:http://redisdoc.com

第二节 Redis的应用场景

1. 配合关系型数据库做高速缓存

使用Redis可以建立性能非常出色的缓存服务器,查询请求先在Redis中查找所需要的数据,如果能够查询到(命中)则直接返回,大大减轻关系型数据库的压力。 例如: 高频次,热门访问,并且不会经常变化的数据,降低数据库IO

2. 数据临时存储位置

使用token(令牌)作为用户登录系统时的身份标识,这个token就可以在Redis中临时存储。

3. 作为分布式环境下解决Session不一致问题时的Session库

Spring提供了一种技术解决分布式环境下Session不一致问题,叫SpringSession。而Redis就可以为SpringSession提供一个数据存储空间。

4. 多样的数据结构存储持久化数据

在这里插入图片描述

第三章 安装Redis

第一节 安装Linux版本的Redis

1. 具体安装步骤

1.1 上传redis压缩包

使用xftp将redis压缩包上传到虚拟机的/usr/local目录中
在这里插入图片描述

上传完之后建议拍个快照,以防安装出错

1.2 安装c语言编译环境

因为是Redis是c语言开发的,所以要运行redis必须有c语言编译环境

yum install gcc-c++ -y
# 安装GCC环境,中间有确认的话,一律选y (yes)
# 注意:使用yum命令安装软件,需要联网
1.3 解压redis
  1. 进入/usr/local目录: cd /usr/local
  2. 解压: tar -xvf redis-5.0.13.tar.gz
1.4 重命名文件夹

redis-5.0.13重命名成redis

mv redis-5.0.13 redis
1.5 编译安装
  1. 进入redis目录:cd redis/
  2. 编译redis:make
  3. 指定安装路径并且安装: make PREFIX=/usr/local/redis install,安装好之后/usr/local/redis目录中会多出来一个bin目录

2. redis的配置和启动

2.1 修改配置文件
  1. /usr/local/redis/redis.conf配置文件拷贝到/usr/local/redis/bin目录中
cp /usr/local/redis/redis.conf /usr/local/redis/bin
  1. 创建一个redis的日志存储目录
mkdir /var/logs
  1. 使用vim编辑器修改bin目录中的redis.conf文件,修改如下三项
vim /usr/local/redis/bin/redis.conf
配置项名称作用取值
daemonize控制是否以守护进程形式运行Redis服务器yes
logfile指定日志文件位置“/var/logs/redis.log”
dirRedis工作目录/usr/local/redis
2.2 后台启动redis服务器
  1. 进入redis的bin目录: cd /usr/local/redis/bin
  2. 让redis根据配置文件启动: ./redis-server ./redis.conf
2.3 启动redis客户端连接服务器

./redis-cli,然后执行ping命令,如果能连接上,代表redis安装成功,并且redis服务器启动成功

第二节 Windows版本Redis的安装(不建议使用)

Redis官方没有开发支持Windows的版本, 但是,Microsoft开发技术小组开发和维护了Redis的Windows版本(只能使用在64位的电脑上)

1. 具体安装步骤

1.1 软件所在位置

在这里插入图片描述

任选一个版本均可,建议选最高的

1.2 开始安装
  1. 双击msi文件
    在这里插入图片描述

  2. 直接点击下一步
    在这里插入图片描述

  3. 同意协议
    在这里插入图片描述

  4. 设置安装路径
    在这里插入图片描述

  5. 端口号为6379不变
    在这里插入图片描述

  6. 设置最大内存空间限制
    在这里插入图片描述

  7. 开始安装
    在这里插入图片描述

  8. 安装之后的目录结构
    在这里插入图片描述

2. 启动Redis服务

redis安装之后是Windows中的服务,采用启动和关闭服务的方式对其进行启动和关闭即可
在这里插入图片描述

3. Windows版本客户端连接Redis

双击redis安装路径中的redis-cli.exe即可打开redis的客户端,然后连接到redis服务

4. 安装Redis可视化客户端

在这里插入图片描述

但是Windows中的Redis可视化客户端默认无法与Linux中的Redis服务器连接,需要修改Linux中的Redis服务器的配置: 在redis.conf配置文件中在bind的值的后面加上虚拟机的IP地址(在后面将Jedis的时候会讲到),并且要确保Linux的防火墙放行了"6379"端口,或者防火墙关闭了

例如:原本的是
bind 127.0.0.1
现在改成
bind 127.0.0.1 192.168.25.128

改完之后要重启redis:

方案一(野蛮方式):

先找到redis服务的进程id
ps -ef | grep redis
然后根据进程id杀死进程
kill -9 进程id

方案二(优雅方式):

在redis客户端中执行shutdown命令

第三章 Redis常用数据结构

第一节 Redis总体结构

Redis中的数据,总体上是键值对,不同数据类型指的是键值对中值的类型。其中value支持8种数据类型

数据类型应用场景
string分布式Session存储 分布式数据库ID 计数器:统计网站访问量
hash存储对象信息(购物车中的商品信息) 存储表的信息
list实现队列、栈操作 汇总日志 粉丝列表 关注的人列表
set签到 打卡 点赞
zset排行榜 百度热点搜索
geospatial获取地理位置信息 两地之间的距离
hyperloglogs基数统计
bitmaps统计用户访问次数

第二节 八种数据类型的简介

1. string 类型

Redis中最基本的类型,它是key对应的一个单一值。二进制安全,不必担心由于编码等问题导致二进制数据变化。所以redis的string可以包含任何数据,比如jpg图片或者序列化的对象。Redis中一个字符串值的最大容量是512M。

2. list类型

Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。它的底层是双向链表,所以它操作时头尾效率高,中间效率低(额外花费查找插入位置的时间)。

在Redis中list类型是按照插入顺序排序的字符串链表。和数据结构中的普通链表一样,我们可以在其头部(left)和尾部(right)添加新的元素。在插入时,如果该键并不存在,Redis将为该键创建一个新的链表。与此相反,如果链表中所有的元素均被移除,那么该键也将会被从数据库中删除。List中可以包含的最大元素数量是2^32-1个。

list是一个有序可以重复的数据类型。

3. set类型

Redis的set是string类型的无序集合。它是基于哈希表实现的。set类型插入数据时会自动去重。最大可以包含2^32-1个元素。
在这里插入图片描述

4. hash类型

本身就是一个键值对集合。可以当做Java中的Map<String,String>对待。每一个hash可以存储2^32-1个键值对。
在这里插入图片描述

5. zset类型

Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。
在这里插入图片描述

6. Geospatial

Redis 在 3.2 推出 Geo 类型,该功能可以推算出地理位置信息,两地之间的距离。
在这里插入图片描述

7. HyperLogLogs

用于大数据量基数统计,速度非常快,占用内存非常小。每个HyperLogLog键只需要花费12KB内存,就可以计算接近 2^64个不同元素的基数。比如计算网站UV(User view,用户访问数量,一个用户一天访问同一个URL地址多次合并为一次)。

8. bitmap

直接对string的二进制位进行操作的一组命令

第四章 Redis命令行操作

第一节 基本操作命令

1. 切换数据库

Redis默认有16个数据库,默认情况下使用的是第一个数据库,我们使用select进行切换,数据库索引从0开始

2. 查看数据库长度

数据库长度就是这个数据库中存储了多少条数据,使用dbsize可以查看数据库长度

3. 清空数据库

3.1 清空当前数据库

flushdb

3.2 清空所有数据库

flushall

第二节 KEY操作

1. KEY的命名规范

在实际操作中对于Key的定义大家注意下面几点:

  • Key不要太长,超过1024字节将消耗过多内存,降低查询效率。尽管Redis支持的Key最大长度为512MB。
  • Key仍然要做到见名知意。
  • 在同一个项目中遵循同一个命名规范,习惯上多个单词用“:”分开。例如:“user:token:session:id”
  • Redis命令不区分大小写,Key区分大小写

2. KEY操作相关命令

命令描述
KEYS PATTERN把匹配PATTERN的key返回。PATTERN中可以使用“*”匹配多个字符,使用“?”匹配单个字符
TYPE KEY返回KEY对应的值的类型
MOVE KEY DB把一组键值对数据移动到另一个数据库中
DEL KEY [KEY …] [重点]根据KEY进行删除,至少要指定一个KEY
EXISTS KEY [KEY …]检查指定的KEY是否存在。指定一个KEY时,存在返回1,不存在返回0。可以指定多个,返回存在的KEY的数量。
RENAME KEY NEWKEY重命名一个KEY,NEWKEY不管是否是已经存在的都会执行,如果NEWKEY已经存在则会被覆盖。
RENAMENX KEY NEWKEY只有在NEWKEY不存在时能够执行成功,否则失败
TTL KEY以秒为单位查看KEY还能存在多长时间
正数:剩余的存活时间(单位:秒)
-1:永不过期
-2:不存在的Key
EXPIRE KEY SECONDS [重点]给一个KEY设置在SECONDS秒后过期,过期会被Redis移除。
PERSIST KEY移除过期时间,变成永久key

第三节 string操作

命令描述
SET key value(重点)设置指定 key 的值
GET key(重点)获取指定 key 的值
APPEND KEY VALUE把指定的value追加到KEY对应的原来的值后面,返回值是追加后字符串长度
GETSET key value将给定 key 的值设为 value ,并返回 key 的旧值(old value)。
GETRANGE KEY START END从字符串中取指定的一段,索引从0开始 START是开始取值的索引 END是结束取值的索引
SETRANGE KEY OFFSET VALUE跳过offset个字符,然后使用Value替换等长度的内容
STRLEN KEY直接返回字符串长度
SETEX key seconds value(重点)将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)。
SETNX key value(重点)只有在 key 不存在时设置 key 的值。
INCR key(重点)将 key 中储存的数字值增一。
INCRBY key increment将 key 所储存的值加上给定的增量值(increment) 。
DECR key将 key 中储存的数字值减一。
DECRBY key decrementkey 所储存的值减去给定的减量值(decrement)。
MSET KEY VALUE [KEY VALUE …]一次性设置一组多个键值对
MGET KEY [KEY …]一次性指定多个KEY,返回它们对应的值,没有值的KEY返回值是(nil
MSETNX KEY VALUE [KEY VALUE …一次性新建多个值

第四节 list操作

命令命令描述
LPUSH key value [value …] 重点将一个或多个值插入到列表头部(左边)
LPUSHX key value…只能针对存在的list执行LPUSH
RPUSH key value [value …] 重点在列表中添加一个或多个值(右边)
LRANGE key start stop根据list集合的索引打印元素数据 正着数:0,1,2,3,… 倒着数:-1,-2,-3,…
LPOP key 重点左边弹出一个 相当于移除第一个
RPOP key 重点右边弹出一个 相当于移除最后一个
LLEN key返回指定key所对应的list中元素个数
LINDEX key index通过索引获取列表中的元素
LINSERT key BEFORE| AFTER pivot value在pivot指定的值前面或后面插入value 如果pivot值有重复的,那么就从左往右数,以第一个遇到的pivot为基准 BEFORE表示放在pivot前面 AFTER表示放在pivot后面
RPOPLPUSH source destination从source中RPOP一个元素,LPUSH到destination中
LREM key count value根据count指定的数量从key对应的list中删除value 具体执行时从左往右删除,遇到一个删一个,知道删除掉count个为止,如果整个列表中没有count个要删除的元素,就删完为止
LSET key index value把指定索引位置的元素替换为另一个值
LTRIM key start stop仅保留指定区间的数据,两边的数据被删除

第五节 set操作

命令命令描述
SADD key member [member …] 重点给key指定的set集合中存入数据,set会自动去重
SREM key member [member …] 重点从集合中删除元素
SMEMBERS key返回可以指定的set集合中所有的元素
SCARD key返回集合中元素的数量
SISMEMBER key member检查当前指定member是否是集合中的元素 返回1:表示是集合中的元素 返回0:表示不是集合中的元素
SPOP key移除并返回集合中的一个随机元素
SDIFF key [key …] 重点将指定的集合执行“差集”操作 集合A:a,b,c 集合B:b,c,d A对B执行diff:a 相当于:A-交集部分
SDIFFSTORE destination key [key …]取差集后存入destination这个集合
SUNION key [key …]重点将指定的集合执行“并集”操作 集合A:a,b,c 集合B:b,c,d 并集:a,b,c,d
SUNIONSTORE destination key [key …]取并集后存入destination这个集合
SINTER key [key …]重点将指定的集合进行“交集”操作 集合A:a,b,c 集合B:b,c,d 交集:b,c
SINTERSTORE destination key [key …]取交集后存入destination这个集合
SMOVE source destination member把member从source移动到destination

第六节 Hash操作

命令命令描述
HSET key field value将哈希表 key 中的字段 field 的值设为 value
HMSET key field value [field value …] 重点同时将多个 field-value (字段-值)对设置到哈希表 key 中
HGET key field获取存储在哈希表中指定字段的值
HMGET key field [field …] 重点获取多个给定字段的值
HDEL key field [field …]删除一个或多个哈希表字段
HLEN key获取哈希表中字段的数量
HGETALL key 重点获取在哈希表中指定 key 的所有字段和值
HKEYS key获取所有哈希表中的字段
HVALS key获取哈希表中所有值
HEXISTS key field判断是否存在某个字段

第七节 zset(sorted set)操作

命令命令描述
ZADD key score member [score member …] 重点增加元素
ZSCORE key member获取元素的分数
ZREM key member [member …]删除元素
ZCARD key获得集合中元素的数量
ZRANGE key start stop[WITHSCORES] 重点获得排名在某个范围的元素列表
ZREVRANGE key start stop 重点按照分数从高到低排序
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] 重点在分数的指定区间内返回数据 min参数可以通过 -inf 表示负无穷 max参数可以通过 +inf 表示正无穷
ZRANK key member先对分数进行升序排序,返回member的排名。排名从0开始

第八节 Geospatial(了解)

查询经纬度数据的网址:http://www.jsons.cn/lngcode

1. 添加地理位置

GEOADD key longitude latitude member [longitude latitude member ...]

规则:

1.取值范围

有效的经度从 -180 度到 180 度。

有效的纬度从 -85.05112878 度到 85.05112878 度。

当坐标位置超出指定范围时,该命令将会返回一个错误。

2.已经添加的数据,是无法再次往里面添加的。

例子:

GEOADD china:city 114.085947 22.547 shenzhen 
GEOADD china:city 113.280637 23.125178 guangzhou

2. 查询已添加的地理位置

Geo类型在Redis内部其实是使用zset类型存储的,所以可以使用zset的命令进行常规操作

ZRANGE china:city 0 -1 
ZRANGE china:city 0 -1 WITHSCORES

3. 删除已添加的地理位置

ZREM china:city guangzhou

4. 获取指定地区的坐标值

GEOPOS china:city shenzhen
5. 计算两地之间的直线距离
GEODIST china:city guangzhou shenzhen km

单位:

m 表示单位为米[默认值]。

km 表示单位为千米。

mi 表示单位为英里。

ft 表示单位为英尺。

如果用户没有显式地指定单位参数, 那么 GEODIST 默认使用米作为单位。

6. 以给定坐标为中心,在指定半径内查找元素

GEORADIUS china:city 110 20 1000 km WITHCOORD WITHDIST

WITHCOORD表示显示经纬度

WITHDIST表示显示到中心的距离

7. 在指定元素周围查找其他元素

GEORADIUSBYMEMBER china:city shenzhen 300 km WITHCOORD WITHDIST

第九节 HyperLogLogs(了解)

1. 基数概念

一个集合中不重复元素的个数。例如:集合{1,2,5,1,7,2,5}中元素个数是7,但是基数是4。而hyperloglogs的主要功能就是进行基数统计。

2. 常用命令

2.1 添加
PFADD user:access:1 tom jerry andy jim andy jerry tom
PFADD user:access:2 andy jerry tom bob kate
PFADD user:access:3 mary harry tom jerry
2.2 统计
PFCOUNT user:access:1 user:access:2 user:access:3
2.3 合并
PFMERGE user:access:merge user:access:1 user:access:2 user:access:3

第十节 bitmap位图(了解)

直接对数据的二进制位进行操作 :

setbit设置指定比特位
getbit获取指定比特位
bitcount统计所有比特位中1的数量

set a hello
GETBIT a 0
GETBIT a 1
GETBIT a 2
GETBIT a 3
GETBIT a 4
GETBIT a 5
SETBIT a 5 1
get a
BITCOUNT a

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/40316.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

centos8.4下搭建 rocketmq集群部署 4.9.4

1.简单介绍 搭建rocketmq集群,nameserver至少3个节点&#xff0c;brokerserver采用2主2从同步&#xff0c;服务器资源多的&#xff0c;可以至少部署在7台服务器上&#xff0c;资源少的可以准备至少3台服务器 172.16.4.15nameserver172.16.4.16nameserver172.16.4.17nameserver…

三维种子点生长算法(以及Python递归深度问题)

前言 种子点生长算法是从一个种子点向周围的遍历图像的每个像素的图遍历算法。 通常在二维中有8邻域方法&#xff0c;三维中有6邻域与26邻域方法。 本文实现了三维种子点生长的6邻域算法。 种子点生长算法本质上是对图像的连通部分进行遍历&#xff0c;因此可以分别利用深度优…

spring initializr脚手架搭建详解

前段时间&#xff0c;我在「基于start.spring.io&#xff0c;我实现了Java脚手架定制」一文中讲述了敝司的微服务脚手架落地过程中的前世今生&#xff0c;并提到了基于 spring initializr 的搭建了 2.0 版本的脚手架。今天我打算和你分享一下这其中的实现过程与细节&#xff0c…

Vue3 如何实现一个全局搜索框

前言&#xff1a;自从学习 vue 以来&#xff0c;就对 vue 官网全局的 command K 调出全局关键词搜索这个功能心心念念。恰好最近项目也是需要实现一个全局搜索的功能&#xff0c;也正好可以正大光明的带薪学习这个功能的思路。网上的教程水平参差不齐&#xff0c;而恰好之前的…

qmake 与 配置文件

用qmake生成makefile的时候&#xff0c;背后会先执行一堆用qmake language编写的库文件&#xff08;配置文件&#xff09;&#xff0c;用于初始化一些环境相关的工作&#xff0c;为后续解析pro文件做准备。 下面是qmake解析一个新建的qt工程的pro文件背后所解析的配置文件的文件…

2022-11-27阿里云物联网平台 MICROPYTHON记录

之前写过EMQX在阿里云的云服务器上搭建流程&#xff0c;近期云服务器到期了&#xff0c;而且由于没有业务支撑短期也不打算再开云服务器了&#xff0c;但是物联网还是要用的&#xff0c;于是开了这个阿里云物联网的记录。 这个是比较详细的已有的博客记录 这个博客居然还有配套…

从ABNF读懂HTTP协议格式

定义 HTTP&#xff08;Hyper Text Transfer Protocol&#xff09;超文本传输协议 HTML&#xff08; Hyper Text Markup Language&#xff09;超文本标记语言 URI&#xff08;Uniform Resource Identifier&#xff09;用于标识某一互联网资源名称的字符串&#xff08;uri 包括了…

自动控制原理1~3章课后练习题

1.适合于应用传递函数描述的系统是线性定常系统 2.某0型单位反馈系统的开环增益为K&#xff0c;则在 r(t)1/2*t^2 输入下&#xff0c;系统的稳态误差为 无穷 3.动态系统 0 初始条件是指 t<0 时系统的 输入、输出以及它们的各阶导数为 0 4.若二阶系统处于无阻尼状态&#…

毕业设计-opencv图像视频质量评价分析

目录 前言 课题背景和意义 实现技术思路 实现效果图样例 前言 &#x1f4c5;大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科…

二级域名配置以及nginx解析二级域名到html页面

此文章适合发布前端项目使用&#xff0c;如果想要配置二级域名到后端服务&#xff0c;可以查看这篇文章&#xff1a;nginx配置二级域名 - 简书 在阿里云上配置二级域名&#xff0c;就是添加一条记录就可以了&#xff0c;超级简单&#xff0c;不懂的可以看后面的解释说明&#…

05.深入理解JMM和Happens-Before

JMM都问啥&#xff1f; 最近沉迷P5R&#xff0c;所以写作的进度很不理想&#xff0c;但不得不说高卷杏YYDS。话不多说&#xff0c;开始今天的主题&#xff0c;JMM和Happens-Before。 关于它们的问题并不多&#xff0c;基本上只有两个&#xff1a; JMM是什么&#xff1f;详细…

[附源码]计算机毕业设计JAVA社团管理系统

[附源码]计算机毕业设计JAVA社团管理系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis M…

c语言实现三子棋

目录 一、三子棋玩法 二、需要实现的游戏功能 三、拆分代码 3.1游戏菜单 3.2初始化棋盘 3.2.1函数调用 3.2.2函数体实现 3.3打印棋盘 3.3.1函数调用 3.3.2函数体实现 3.4玩家下棋 3.4.1函数调用 3.4.2函数体实现 3.4.3效果展示 3.5电脑下棋 3.5.1函数调用 3.5…

强大博客搭建全过程(1)-hexo博客搭建保姆级教程

1、 前言 本人本来使用国内的开源项目solo搭建了博客&#xff0c;但感觉1核CPU2G内存的服务器&#xff0c;还是稍微有点重&#xff0c;包括服务器内还搭建了数据库。如果自己开发然后搭建&#xff0c;耗费时间又比较多&#xff0c;于是乎开始寻找轻量型的博客系统。 此时hexo…

苹果系统(macos)code with me 控制端下载不下来,下载缓慢,解决办法

jetbrains的插件,依赖包,或者是工具之类的下载通常都比较慢,尤其是大文件等很久后可能还断开了.又要重头下.比如 code with me,以下简称cwm curl: (56) Recv failure: Connection reset by peer 如果你曾用sh安装时提示这个,多数就是网络连接不行了. 简单说就是用下载工具下…

redis集群搭建教程及遇到的问题处理

这里&#xff0c;在一个Linux虚拟机上搭建6个节点的redis伪集群&#xff0c;思路很简单&#xff0c;一台虚拟机上开启6个redis实例&#xff0c;每个redis实例有自己的端口。这样的话&#xff0c;相当于模拟出了6台机器了&#xff0c;然后在以这6个实例组建redis集群就可以了。 …

jsp旅行社管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 旅行社管理系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5 开发&#xff0c;数据库为Mysql&#xff0c;使用…

JAVA之Spring MVC 请求与响应 REST风格 SSM整合(注解版)

SpringMVC是一种基于Java实现MVC模型的轻量级Web框架 使用简单&#xff0c;开发便捷&#xff08;相比于Servlet&#xff09; 灵活性强 入门案例 导入依赖SpringMVC坐标 <dependency><groupId>org.springframework</groupId><artifactId>spring-web…

[附源码]计算机毕业设计JAVA实践教学管理系统

[附源码]计算机毕业设计JAVA实践教学管理系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybati…

01 使用docker搭建wordpress博客网站

文章目录1. 前言1.1 容器技术思维导图1.2 wordpress 网络架构图2. 拉取镜像3. 搭建博客网站3.1 启动MariaDB3.2 运行应用服务器 WordPress3.3 使用nginx 做反向代理3.4 检查容器状态4. 登录博客配置5 查看数据库1. 前言 基于之前学习kubernetes 比较乱&#xff0c;打算重新学习…