Linux

Linux

touch :创建一个文件夹

rm -r 'b':删除一个文件夹

cd .

cd ..

cd /

cat -n /etc/profile :显示行数显示

文件目录操作命令

more命令

more fileName

操作命令

  1. 回车键:向下滚动一行
  2. 空格键:向下滚动一屏
  3. b:返回上一屏
  4. q或者Ctral+C:退出

tail命令

作用:查看文件末尾的内容

语法:tail[-f] fileName

说明:

  • -f:动态读取文件末尾内容并显示,通常用于日志文件的内容输出

举例:

tail/etc/profile :显示......末尾10行内容

tail -20 /etc/profile :显示/etc下的profile文件末尾20行内容

tail -f /itcast/my.log :动态读取/itcast目录下的my.log文件末尾内容并显示

echo '1' >> mylog:追加

echo '1' >> my.log:被监控的文件输出1

mkdir

作用:创建目录的

语法:mkdir[-p] dirName

说明:

  • -p:确保目录名称存在,不存在的就创建一个。通过此选项,可以实现多层目录同时创建

举例:

mkdir itcast 在当前目录下,建立一个名为itcast的目录

mkdir -p itcast/test 在工作目录下的itcast目录中建立一个名为test的子目录,若itcast目录不存在,则建立一个

:也就是可以实现多级目录的创建

rmdir

作用:删除空目录

语法:rmdir[-p] dirName

说明

  • -p:当子目录被删除导致父目录为空目录的话,则一并删除

drwxr-xr-x 2 root root 6 5月 2 15:33 itcast1
drwxr-xr-x 2 root root 6 5月 2 15:33 itcast2
-rw-r--r-- 1 root root 6 5月 2 15:14 my.log
[root@localhost ~]# rmdir itcasr* :通配符

rm

作用:删除文件或者目录

语法:rm [-rf] name

说明:

  1. -r:将目录及目录中所有文件(目录)逐一删除,即递归删除
  2. -f:无需确认,直接删除

举例:

  • rm -r itcast/ 删除名为itcast的目录和目录中所有文件,删除前需确认
  • rm -rf itcast/ 无需确认,直接删除名为itcast的 目录和目录中的文件
  • rm -f hello.txt 无需确认,直接删除hello.txt文件

拷贝移动命令

cp

作用:用于复制文件或目录

语法:cp [-r] source dest

source :源

dest:目标

说明

  • -r:如果复制的是目录需要使用此选项,次是将复制该目录下所有的子目录和文件
  • 如果是文件就不用写-r

举例:

  • cp hello.txt itcast/ :将hello.txt复制到itcast目录中
  • cp hello.txt ./hi.txt :将文件复制到当前目录并重命名
  • cp -r itcast/ itheima/ :将itcast目录复制到itheima目录下
  • cp itcast/* itheima/ :复制的是里面的内容

mv

作用:为文件或目录改名,或将文件或目录移动到其他位置

语法:mv source dest

举例:

  • mv hello.txt hi.txt :改名
  • mv hi.txt itcast/ :移动
  • mv itcast.txt itheima/itcast01.txt :移动并改名
  • mv itcast/ itheima :如果这个目录itheima不存在则是改名
  • mv itheima/ itcast/ :如果这个目录存在则是移动

打包压缩命令

tar

作用:对文件进行打包、压缩、解压

语法:tar[-zcxvf] filleName [files]

包文件后缀为.tar表示只是完成了打包,并没有压缩

包文件后缀为.tar.gz表示打包的同时还进行了压缩

说明:

  • -z:代表的是gzip,通过gzip命令处理文件,gzip可以对文件压缩或者解压
  • -c:代表的是create,即创建新的包文件
  • -x:代表的是extract,实现从包文件中还原文件
  • -v:代表的是verbose,显示命令的执行过程
  • -f:代表的是file,用于指定包文件的名称

举例:

注意打包和压缩不一样:解压缩与解包也不一样

  • tar -cvf test.tar test :直接打包
  • tar -zxvf test.tar.gz :解压gz压缩文件,默认当前目录
  • tar -xvf test.tar :从包中还原文件,默认当前目录
  • tar zxvf test.tar.gz -C/ :解压文件到根目录

文本遍历命令

作用:vi命令是Linux系统提供的一个文本编辑工具,可以对文件内容进行编辑,类似于Windows中的记事本

语法:vi fileName

说明:

  1. vim是从vi发展来的一个功能强大的文本编辑工具,在编辑文件时可以对文本内容进行着色,方便我们对文件进行编辑处理,vim更常用
  2. 要使用vim命令,需要我们自己完成安卓,可以使用下面的命令来安装yum install vim

Vim

作用:对文件内容进行编辑,vim其实就是一个文本编辑器

语法:vim fileName

说明:

  1. 在使用vim命令编辑文件时,如果指定的文件存在则直接打开此文件,如果指定的文件不存在,则新建文件
  2. vim在进行文本编辑时分为三种模式,分别是命令模式,插入模式,底行模式,,这三种模式可以相互切换

三种模式说明:

  1. 命令模式

    • 命令模式下可以查看文件内容、移动光标(上下左右箭头、gg(头)、G(尾))
    • 通过vim命令打开文件,默认进入命令模式
    • 另外两种模式需要首先进入命令模式,才能进入彼此
  2. 插入模式

    • 插入模式可以对文件进行编辑
    • 在命令模式下按下[i,a,o]任意一个,可以进入插入模式,进入插入模式后,下方会出现insert字样
    • 在插入模式下按下ESC键,回到命令模式
  3. 底行模式

    • 底行模式下可以通过命令对文件内容进行查找、显示行号、退出等操作
    • 在命令模式下按下{:,/}任意一个,可以进入底行模式
    • 通过/方式进入底行模式后,可以对文件内容进行查找
    • 通过:方式进入底行模式后,可以输入wq(保存并退出)、q!(不保存直接退出)、

    set nu(显示行号)

查找命令

find

作用:在指定目录下查找文件

语法:find dirName -option fileName

可以在任意目录找

举例:

  • find . -name "*.java" :在当前目录及其子目录下查找.java结尾的文件
  • find /itcast -name "*.java" :在/itcast目录及其子目录下查找.java结尾的文件

grep

作用:从指定的文件中查找指定的文本内容

语法:grep word fileName

注意:在查找的时候是区分大小写的

举例:

  • grep Hello helloWorld.java

1651489213272

  • 1651489387063

软件安装

软件安装的方式

安装JDK

source /etc/profile:重新加载一下,让他生效

安装Tomcat

启动tomcat

sh startup.sh

查看是否启动成功

查看启动日志

  1. more /usr/local/apache-tomcat-7.0.57/logs/catalina.out
  2. tail -50 //usr/local/apache-tomcat-7.0.57/logs/catalina.out

vim setclasspath.sh

set java env

export JAVA_HOME=/usr/java/jdk1.8.0_212
export JRE_HOME=/usr/java/jdk1.8.0_212/jre

查看进程

  1. ps -ef | grep tomcat

扩展ps命令

注意:

  • ps命令是linux下非常强大的进程查看命令,通过ps -ef 可以查看当前运行的所有进程的详细信息
  • “|” 管道符,可以将前一个命令的结果输出给后一个命令作为输入
  • 使用ps命令查看进程时,经常配合管道符和查看命令grep一起使用,来查看特定进程

windows中访问tomcat

1651492845491

因为linux中默认是开启防火墙的

防火墙

防火墙操作:

  • 查看防火墙状态(systemctl status firewalld、firewall-cmd --state)

1651493371608

1651493414171

  • 暂时关闭防火墙(systemctl stop firewalld)
  • 永久关闭防火墙(systemctl disable firewalld)
  • 开启防火墙(systemctl start firewalld)
  • 开放指定端口(firewall-cmd --zone=public --add-port=8080/tcp --permanent)

注意开启了要马上生效firewall-cmd --reload

  • 关闭指定端口(firewall-cmd --zone=public --remove-port=8080/tcp --permanent)
  • 立即生效(firewall-cmd --reload)
  • 查看开发的端口(firewall-cmd --zone=public --list-ports)

结束tomcat

bin目录下 sh stutdown.sh

或者找到tomcat进程id kill -9 id号(不建议除非停不掉了)

安装MySQL

先要看一下os中是否有其他数据库看后面

注意使用rpm安装必须要按照顺序:

  1. rpm -ivh mysql-community-common-5.7.25-1.el7.x86_64.rpm
  2. rpm -ivh mysql-community-libs-5.7.25-1.el7.x86_64.rpm
  3. rpm -ivh mysql-community-devel-5.7.25-1.el7.x86_64.rpm
  4. rpm -ivh mysql-community-libs-compat-5.7.25-1.el7.x86_64.rpm
  5. rpm -ivh mysql-community-client-5.7.25-1.el7.x86_64.rpm
  6. yum install net-tools :直接按照server可能会报错,要先用yum命令按照一个插件
  7. rpm -ivh mysql-community-server-5.7.25-1.el7.x86_64.rpm

安装rpm安装MySQL时爆出警告: 警告:MySQL-server-5.5.46-1.linux2.6.x86_64.rpm: 头V3 DSA/SHA1 Signature, 密钥 ID 5072e1f5: NOKEY 原因:这是由于yum安装了旧版本的GPG keys造成的 解决办法:后面加上 --force --nodeps 如: rpm -ivh MySQL-server-5.5.46-1.linux2.6.x86_64.rpm --force --nodeps 从 RPM 版本 4.1 开始,在安装或升级软件包时会检查软件包的签名。

后面加上 --force --nodeps

systemctl status mysqld:查看当前数据库状态

yum update:更新一下内核

rpm -Uvh mysql57-community-release-el7-11.noarch.rpm

安装方式RPM

这个命令用于管理和安装软件的工具

1、先看自己centOS下有没有Mysql数据库有的话安装失败,CentOS7自带mariadb,与mysql冲突

怎么看?

rpm -qa:看全部

rpm -qa | grep mysql

rpm -qa | grep mariadb

怎么卸载

rpm -e --nodeps : 软件名称

rpm -e --nodeps mariadb-libs

启动Mysql

systemctl status mysqld :查看mysql服务 (刚开始是dead)

systemctl start mysqld :开启mysql服务(为running)

为了避免每次开机都要启动mysql

设置一下

systemctl enable mysqld :开机启动服务

如果已经安装了yum install net-tools 就可以使用下面命令

netstat -tunlp :查看已经启动的服务

netstat -tunlp | grep mysql

ps -ef | grep mysql :查看mysql进度

登录

刚安装mysql给我们提供了一个临时的密码我们要改一下

  1. 登录MySQL数据库,查阅临时密码
    • cat /var/log/mysqld.log :查看文件内容
    • cat /var/log/mysqld.log | grep password :查看日志中password信息jk;r*EMh-8Ff
  2. mysql -uroot -p:进入数据库
  3. 修改密码
    • set global validate_password_length=4 :设置密码最低4位
    • set global validate_password_policy=LOW :安全级别
    • set password =password('root')
  4. 开启访问权限
    • grant all on . to 'root'@'%' identified by 'root';
    • flush privileges :立即生效

安装lrzsz

作用:用于文件上传与下载,因为不是所有工具都有文件上传功能的

yum命令

yum list lrzsz :搜索lrzsz安装包

1651556668830

安装命令

yum install lrzsz.x86_64

就可以输入rz命令

1651556757418

部署项目

手工部署项目

自动从git仓库拉取代码,自动打包,全自动的

java -jar helloworld....:这种方式是霸屏的方式,我们需要在后台运行

线上程序不会将日志输出到控制台,而是输出到日志文件,方便运维查阅信息

1651558862553

java -jar helloworld....:这种方式是霸屏的方式,我们需要在后台运行

解决:

  • nohup命令:用于不挂断地运行指定命令,退出中断不会影响程序的运行
  • 语法格式 nohup Command [Arg ...] [&]
  • Arg:一些参数,可以指定输出文件
  • &:让命令在后台运行

举例:

nohup java -jar helloworld-0.0.1-SNAPSHOT.jar &> hello.log &

:后台运行java -jar 命令,并将日志输出到hello.log文件

这种方式启动怎么停止?

杀进程的方式

ps -ef | grep hello :找到进程id

kill -9 进程id

Shell脚本自动部署项目

操作步骤:

  1. 在Linux中安装Git

    • yum list git
    • yum install ...
    • git clone https:.........
  2. 在Linux中安装maven

    • 编制配置 vim /etc/profile

    • 在最后追加以下内容 export MAVEN_HOME=/usr/local/apache-maven-3.8.4
      export PATH=$MAVEN_HOME/bin:$PATH

    • 刷新配置 source /etc/profile

    • 查看maven是否配置好 mvn -version

    • 配置自己setting.xml

    • <localRepository>/path/to/local/repo</localRepository>
  3. 编写Shell脚本(拉取代码、编译、打包、启动)

  4. 为用户授予执行Shell脚本的权限

    • chmod命令
    • linux中的权限一般分为三种r(读)、w(写)、x(执行)
    • linux的文件调用权限分为三级:文件所有者,用户组、其他用户
    • 注意:只有文件的所有者和超级用户可以修改文件或目录的权限
    • 要执行Shell脚本需要有对此脚本文件的执行权限,如果没有则不能执行
    • chmod 777 bootStart.sh
    • 555 210
  5. 执行Shell脚本

    • 第一次很慢,因为jar包都没有
    • 1651567137085

部署后一直运行

CentOS 系列系统: yum install screen          
Ubuntu 系列系统: sudo apt-get install screen            


screen -S myblog   #后面的名字随便取,用来说明你这个窗口是用来干什么的。
  • 之后会进入一个新窗口。进入项目所在的目录,运行项目
cd /usr/local/app
nohup java -jar demo
  • 按 Ctrl +a+d 退出窗口,进入原来的窗口。
  • screen -ls 查看所有的后台进程
  • kill -9 进程号 杀死进程
  • screen -r -d 进程号 进入所在的进程。

设置静态IP

  1. vim /etc/sysconfig/network-scripts/ifcfg-ens33
  2. BOOTPROTO=static # 使用静态IP地址,默认为dhcp
    IPADDR=192.168.192.106 # 设置的静态IP地址
    NETMASK=255.255.255.0 # 子网掩码
    GATEWAY=192.168.192.2 # 网关地址
    DNS1=192.168.192.2 # DNS服务器
  3. service network restart:重启服务

主从复制

配置主库(master)

开启二进制日志功能

  1. 需要两台服务器,虚拟机可以搞定
  2. 修改Mysql数据库的配置文件/etc/my.cof
  3. [mysqld]
  4. log-bin=mysql-bin #[必须]启动二进制日志
  5. server-id=100 #[必须]服务器唯一ID
    • 1651733831013
  6. 重启Mysql服务 systemctl restart mysqld
  7. 登录到mysql数据库中执行下面数据库
    • GRANT REPLICATION SLAVE ON . to 'xiaomao'@'%' identified by 'root'; :注意要加分号的
    • 创建了一个用户密码是root,授予了一个权限
    • 为什么要创建?
    • 因为主从复制会涉及到从库slave到主库拿日志,他们之间要通信,而通信是要认证的
    • 意思就是你slave要有相应的身份和相应的权限,然后主库才同意你拷日志
  8. 登录MySql数据库,执行下面SQL,记录下结果中File和Position的值
    • show master status;
    • 注意:上面sql作用是查看master的状态,执行完此sql后不要再执行任何操作
    • 1651734666878

配置从库

步骤:

  1. 修改Mysql配置文件 /etc/my.conf
  2. [mysqld]
  3. server-id=101 #[必须]服务器唯一ID
  4. 重启Mysql服务
  5. systemctl restart mysqld;
  6. 登录到mysql中,执行下面的sql
    • change master to master_host='192.168.78.130',master_user='xiaomao',master_password='root',master_log_file='mysql-bin.000001',master_log_pos=440;
    • 1651735216023
    • 要与主库一致
    • 可能会遇到线程已经运行的问题,如果之前配置过,要停止该线程,stop slave
    • start slave; :开启线程
    • show slave status :查看是否已经配置好
    • 1651735571323
    • 太乱了,可以复制到文本编辑器中查看,也可以使用竖排查看 show slave status\G;没连接上看下面

注意!!!从数据库中克隆uuid一样!

因为我们的虚拟机是克隆出来的,所以所以数据库服务的uuid就相等了,

解决办法:

  1. 从机先停掉 slave :stop slave;
  2. 停掉数据库 :也可以不停等会刷新一下就好了
  3. 删除 /var/lib/mysql/auto.cnf,这个文件就是包含了uuid的配置,启动数据库服务的时候这个文件会自动生成
  4. rm-rf 找到这个文件
  5. 从机再次数据命令连接主机,和启动slave

配置好了!!

1651737471152

到这里已经实现了主从复制,数据同步,可以试一下新建一个表

添加一条记录,从库也会添加

任意操作都会变化!

1651737677116

Redis

简介:

https://www.redis.net.cn/ redis中文网

应用场景

  • 缓存
  • 任务队列
  • 消息队列
  • 分布式锁

Redis下载与安装

Linux下:

  1. 将redis安装包上传到Linux
  2. 解压安装包
  3. 安装redis的依赖环境gcc,命令:yum install gcc-c++
  4. 进入/usr/local/redis-4.0.0,进行编译,命令make
  5. 进入redis的src目录,进行安装,命令:make install

Windows下:

  • 免安装的直接解压就可以了

Redis服务启动与停止

Linux下

  • 直接./redis-server
  • 注意默认是霸屏的
  • 修改配置文件,redis.conf 输入/dae找到 daemonize 将no 改为yes
  • src/redis-server ./redis.conf 后台启动reids 通过conf文件,还可以拥有密码

Windows下

  • redis-server.exe redis.windows.conf

因为没密码不安全

设置密码:

  • 找到redis.conf中的 requirepass 123456 改为123456
  • 杀死进程
  • 重新启动服务
  • 客户端连接src/redis-cli -h localhost -p 6379 -h:表示host即本地的 -p:端口号

src/redis-cli -h localhost -p 6379 -a 123456:在连接的时候就用密码连接

远程连接Linux的redis

Redis默认是不允许远程连接的:拒绝连接的

shift加右键

1651579700129

.\redis-cli.exe -h 192.168.78.130 -p 6379 -a 123456

1651579669504

1651579657994

把这句话注释起来就好了,因为他默认的是本地才可以访问

注意防火墙端口6379的问题

1651580157675

数据类型

  • 字符串String
  • 哈希hash
  • 列表list
  • 集合set
  • 有序列表 sorted set

特点

  • String 普通字符串,常用
  • hash 适合存查对象
  • list安装插入顺序排序,可以有重复元素:可以做任务队列
  • set无序集合,没有重复元素
  • sorted set有序集合,没有重复元素

字符串String操作命令

redis中字符串常用命令

  • set key value :设置指定key的值
  • get key :获取指定key的值
  • setex key seconds value :设置指定key的值,并将key的过期时间设为seconds秒 可以做验证码验证功能,如手机验证码,到期会自动删除 如 setex city 20 beijing
  • setnx key value :只有在key不存在时设置key的值:分布式锁的时候会用

注意

  1. 存储的都是字符串形式的
  2. key相同的时候,后设置的值会覆盖前面的值
  3. 1651581153351

hash 操作命令

可以用来存储对象的数据

结构:

1651581687536

操作命令:

  • hset key field value:将哈希表key中的字段field的值设为value key可以用用户id
  • hget key field:获取存储在哈希表中指定字段的值
  • hdel key field:删除存储在哈希表中指定字段的值
  • hkeys key:获取哈希表中所有字段
  • hvals key:获取哈希表中所有的值
  • hgetall key:获取在哈希表中所有的字段和值

1651581843894

列表list操作命令

结构:

1651582244180

操作命令:

Redis列表是简单的字符串列表,按照插入顺序排序,常用命令

  • lpush key value 1 [value 2]:将一个或多个值插入到列表头部
  • lrange key start stop:获取列表指定范围内的元素
  • rpop key:移除并获取列表最后一个元素
  • lpop key :移除左边第一个元素
  • llen key:获取列表长度
  • brpop key1 [key2] timeout:移出并获取列表的最后一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止

range:范围的意思

Set集合操作命令

结构:

1651632177485

操作命令:

Redis set是String类型的无序集合,集合成员是唯一的,这就意味着集合中不能出现重复的数据常用命令:

  • sadd key member 1 [member2]:向集合添加一个或多个成员
  • smembers key :返回集合中的所有成员
  • scard key:返回给定所有集合的交集 (集合里卖弄有几个成员)
  • sinter key1 [key2]:返回所有给定集合的并集
  • sdiff key1 [key2]:返回给定所有集合的差集,顺序,前面的集合中拿后面集合中没有的
  • srem key mermber1 [member2]:移除集合中一个或多个成员

1651632475733

有序集合sorted set操作命令

结构:

1651632858077

操作命令:

Redis sorted set 有序集合是string类型元素的集合,且不允许重复的成员,每个元素都会关联一个double类型的分数(sorted)。redis正是通过分数来为集合中的成员进行从小到大排序,有序集合的成员是唯一的,单分数却可以重复

常用命令:

  • zadd key score1 member1 [ score2 member2]
  • zrange key 0 -1
  • zrange key start stop [withscores]:通过索引区间返回有序集合中指定区间内的成员
  • zincrby key increment member :有序集合中对指定成员的分数加上增量increment
  • zrem key member [member...]:移除有序集合中的一个或多个成员

通用命令

  • keys pattern :查找所有符合给定模式(pattern)的key
  • exists key:检查给定key是否存在
  • type key:返回key所存储的值的类型
  • ttl key:返回给定key的剩余生存时间(ttl,time to live),以秒为单位
  • del key:如果key存在则删除key

1651633463444

在java中操作Redis

介绍

Redis的Java客户端很多,官方推荐的有三种

  • Jedis
  • Lettuce
  • Redisson

Spring 对Redis客户端进行了整合,提供了Spring Data Redis,在Spring Boot项目中还提供了对应的Stater,即spring-boot-starter-data-redis

Jedis

在maven环境下操作redis

导入依赖

<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.9.0</version>
</dependency>
package com.itcast.test;

import org.junit.Test;
import redis.clients.jedis.Jedis;

import java.util.Set;

/**
 * 使用Jedis和操作Redis
 */
public class JedisTest {
    @Test
    public void testRedis(){

//        1、获取连接
        Jedis jedis = new Jedis("localhost", 6379);

//        2、执行具体操作
        jedis.set("username","xiaomao2");
        String username = jedis.get("username");
        System.out.println(username);
//        jedis.del("username");
        jedis.hset("myhash","addr","beijing");
        String hValue = jedis.hget("myhash", "addr");
        System.out.println(hValue);

        Set<String> keys = jedis.keys("*");


        for (String key : keys) {
            System.out.println(key);
        }

//        3、关闭连接
        jedis.close();
    }

}
Spring Data Redis

在spring Boot项目中操作redis

Spring Data Redis中提供了一个高度封装的类:RedisTemplate,针对jedis客户端中大量api进行了归类封装,将同一类型操作封装为operation接口,具体分类如下:

  • ValueOperations:操作String类型数据
  • SetOperations:set类型数据操作
  • ZSetOperations:zset类型数据操作
  • HashOperations:针对map类型的数据操作
  • ListOperations:针对list类型的数据操作
操作String类型数据ValueOperations

导入maven

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

appliaction.yml

spring:
  application:
    name: springdataredis_demo
    #    Redis相关配置
  redis:
    host: localhost
    port: 6379
#    默认启动16个号的数据库,操作的是0号数据库
    database: 0
    jedis:
      pool:
        max-active: 8 #最大连接数
        max-wait: 1ms  #连接池最大阻塞等待时间
        max-idle: 4 #连接池中的最大空闲连接
        min-idle: 0 #连接池中的最小空闲连接
#        password
#    password:

test

package com.itcast;

import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.concurrent.TimeUnit;

@SpringBootTest
@RunWith(SpringRunner.class)
class SpringdataredisDemoApplicationTests {

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    public void testString(){

        redisTemplate.opsForValue().set("city","beijing");

        Object city = redisTemplate.opsForValue().get("city");
        System.out.println(city);

        redisTemplate.opsForValue().set("key1","value1",10L, TimeUnit.SECONDS);

        Boolean flag = redisTemplate.opsForValue().setIfAbsent("city", "nanjing");
        System.out.println(flag);

    }

}

注意直接添加键值对的形式会出现下列这种情况

因为键值对都被序列化了:这样不利于操作键,所以创建一个配置类

1651641871902

RedisConfig.java

package com.itcast.config;

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.StringRedisSerializer;

@Configuration
public class RedisConfig {
    @Bean
    public RedisTemplate<Object,Object> redisTemplate(RedisConnectionFactory connectionFactory){
        RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
//        默认的key序列化器为:JdkSerializationRedisSerializer
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.setConnectionFactory(connectionFactory);

        return redisTemplate;
    }
}

值的话序列化没事因为我们拿到会自动进行反序列化

HashOperations:针对map类型的数据操作
@Test
    public void testHash(){

        //存值
        HashOperations hashOperations = redisTemplate.opsForHash();
        hashOperations.put("0001","name","xiaoliao");
        hashOperations.put("0001","age",20);
        hashOperations.put("0001","addr","beijing");
        //取值
        String name = (String) hashOperations.get("0001", "name");
        System.out.println(name);

//        获取hash结构中的所有字段
        Set keys = hashOperations.keys("0001");
        keys.forEach(System.out::println);

//        获取hash结构中所有值
        List values = hashOperations.values("0001");
        values.forEach(System.out::println);



    }
ListOperations:针对list类型的数据操作
@Test
    public void testList(){
        ListOperations listOperations = redisTemplate.opsForList();
        listOperations.leftPush("myList","a");
        listOperations.leftPushAll("myList","b","c","d");
//        取值
        List<String> myList = listOperations.range("myList", 0, -1);
        myList.forEach(System.out::println);


//        获得列表长度
        Long size = listOperations.size("myList");

        int iSize = size.intValue();

//        获取的同时删除掉,出队列
        for (int i = 0; i < iSize; i++) {
            String element = (String) listOperations.rightPop("myList");
            System.out.println(element);

        }


    }
SetOperations:set类型数据操作
@Test
    public void testSet(){
        SetOperations setOperations = redisTemplate.opsForSet();

//        存值
        setOperations.add("mySet","a","b","c","a");


//        取值
        Set mySet = setOperations.members("mySet");
        mySet.forEach(System.out::print);
//        删除成员

        System.out.println();
        setOperations.remove("mySet","a","b");
        mySet.forEach(System.out::print);

    }
ZSetOperations:zset类型数据操作
@Test
    public void testZSet(){
//        存储
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();
        zSetOperations.add("myZSet","a",10.0);
        zSetOperations.add("myZSet","a",10.0);
        zSetOperations.add("myZSet","b",9.0);
        zSetOperations.add("myZSet","c",12.0);
//        取值
        Set myZSet = zSetOperations.range("myZSet", 0, -1);
        myZSet.forEach(System.out::println);
//        修改分数
//        给b加20分
        zSetOperations.incrementScore("myZSet","b",20.0);
//        删除成员

        zSetOperations.remove("myZSet","a","b");
        myZSet = zSetOperations.range("myZSet", 0, -1);
        myZSet.forEach(System.out::println);
    }
通用操作
/**
     * 通用操作
     */
    @Test
    public void testCommon(){
//        获取Redis中所有的key
        Set keys = redisTemplate.keys("*");
        keys.forEach(System.out::println);
//        判断某个key是否存在
        Boolean itcast = redisTemplate.hasKey("itcast");
        System.out.println(itcast);
//        删除指定key
        Boolean myList = redisTemplate.delete("myList");
        System.out.println(myList);
//        获取指定key对应的value的数据类型
        DataType dataType = redisTemplate.type("myZSet");
        System.out.println(dataType.name());

    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值