Linux
Linux
touch :创建一个文件夹
rm -r 'b':删除一个文件夹
cd .
cd ..
cd /
cat -n /etc/profile :显示行数显示
文件目录操作命令
more命令
more fileName
操作命令
- 回车键:向下滚动一行
- 空格键:向下滚动一屏
- b:返回上一屏
- 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
说明:
- -r:将目录及目录中所有文件(目录)逐一删除,即递归删除
- -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
说明:
- vim是从vi发展来的一个功能强大的文本编辑工具,在编辑文件时可以对文本内容进行着色,方便我们对文件进行编辑处理,vim更常用
- 要使用vim命令,需要我们自己完成安卓,可以使用下面的命令来安装yum install vim
Vim
作用:对文件内容进行编辑,vim其实就是一个文本编辑器
语法:vim fileName
说明:
- 在使用vim命令编辑文件时,如果指定的文件存在则直接打开此文件,如果指定的文件不存在,则新建文件
- vim在进行文本编辑时分为三种模式,分别是命令模式,插入模式,底行模式,,这三种模式可以相互切换
三种模式说明:
-
命令模式
- 命令模式下可以查看文件内容、移动光标(上下左右箭头、gg(头)、G(尾))
- 通过vim命令打开文件,默认进入命令模式
- 另外两种模式需要首先进入命令模式,才能进入彼此
-
插入模式
- 插入模式可以对文件进行编辑
- 在命令模式下按下[i,a,o]任意一个,可以进入插入模式,进入插入模式后,下方会出现insert字样
- 在插入模式下按下ESC键,回到命令模式
-
底行模式
- 底行模式下可以通过命令对文件内容进行查找、显示行号、退出等操作
- 在命令模式下按下{:,/}任意一个,可以进入底行模式
- 通过/方式进入底行模式后,可以对文件内容进行查找
- 通过:方式进入底行模式后,可以输入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
软件安装
软件安装的方式
安装JDK
source /etc/profile:重新加载一下,让他生效
安装Tomcat
启动tomcat
sh startup.sh
查看是否启动成功
查看启动日志
- more /usr/local/apache-tomcat-7.0.57/logs/catalina.out
- 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
查看进程
- ps -ef | grep tomcat
扩展ps命令
注意:
- ps命令是linux下非常强大的进程查看命令,通过ps -ef 可以查看当前运行的所有进程的详细信息
- “|” 管道符,可以将前一个命令的结果输出给后一个命令作为输入
- 使用ps命令查看进程时,经常配合管道符和查看命令grep一起使用,来查看特定进程
windows中访问tomcat
因为linux中默认是开启防火墙的
防火墙
防火墙操作:
- 查看防火墙状态(systemctl status firewalld、firewall-cmd --state)
- 暂时关闭防火墙(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安装必须要按照顺序:
- rpm -ivh mysql-community-common-5.7.25-1.el7.x86_64.rpm
- rpm -ivh mysql-community-libs-5.7.25-1.el7.x86_64.rpm
- rpm -ivh mysql-community-devel-5.7.25-1.el7.x86_64.rpm
- rpm -ivh mysql-community-libs-compat-5.7.25-1.el7.x86_64.rpm
- rpm -ivh mysql-community-client-5.7.25-1.el7.x86_64.rpm
- yum install net-tools :直接按照server可能会报错,要先用yum命令按照一个插件
- 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给我们提供了一个临时的密码我们要改一下
- 登录MySQL数据库,查阅临时密码
- cat /var/log/mysqld.log :查看文件内容
- cat /var/log/mysqld.log | grep password :查看日志中password信息jk;r*EMh-8Ff
- mysql -uroot -p:进入数据库
- 修改密码
- set global validate_password_length=4 :设置密码最低4位
- set global validate_password_policy=LOW :安全级别
- set password =password('root')
- 开启访问权限
- grant all on . to 'root'@'%' identified by 'root';
- flush privileges :立即生效
安装lrzsz
作用:用于文件上传与下载,因为不是所有工具都有文件上传功能的
yum命令
yum list lrzsz :搜索lrzsz安装包
安装命令
yum install lrzsz.x86_64
就可以输入rz命令
部署项目
手工部署项目
自动从git仓库拉取代码,自动打包,全自动的
java -jar helloworld....:这种方式是霸屏的方式,我们需要在后台运行
线上程序不会将日志输出到控制台,而是输出到日志文件,方便运维查阅信息
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脚本自动部署项目
操作步骤:
-
在Linux中安装Git
- yum list git
- yum install ...
- git clone https:.........
-
在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>
-
-
编写Shell脚本(拉取代码、编译、打包、启动)
-
为用户授予执行Shell脚本的权限
- chmod命令
- linux中的权限一般分为三种r(读)、w(写)、x(执行)
- linux的文件调用权限分为三级:文件所有者,用户组、其他用户
- 注意:只有文件的所有者和超级用户可以修改文件或目录的权限
- 要执行Shell脚本需要有对此脚本文件的执行权限,如果没有则不能执行
- chmod 777 bootStart.sh
- 555 210
-
执行Shell脚本
- 第一次很慢,因为jar包都没有
部署后一直运行
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
- vim /etc/sysconfig/network-scripts/ifcfg-ens33
- 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服务器 - service network restart:重启服务
主从复制
配置主库(master)
开启二进制日志功能
- 需要两台服务器,虚拟机可以搞定
- 修改Mysql数据库的配置文件/etc/my.cof
- [mysqld]
- log-bin=mysql-bin #[必须]启动二进制日志
- server-id=100 #[必须]服务器唯一ID
- 重启Mysql服务 systemctl restart mysqld
- 登录到mysql数据库中执行下面数据库
- GRANT REPLICATION SLAVE ON . to 'xiaomao'@'%' identified by 'root'; :注意要加分号的
- 创建了一个用户密码是root,授予了一个权限
- 为什么要创建?
- 因为主从复制会涉及到从库slave到主库拿日志,他们之间要通信,而通信是要认证的
- 意思就是你slave要有相应的身份和相应的权限,然后主库才同意你拷日志
- 登录MySql数据库,执行下面SQL,记录下结果中File和Position的值
- show master status;
- 注意:上面sql作用是查看master的状态,执行完此sql后不要再执行任何操作
配置从库
步骤:
- 修改Mysql配置文件 /etc/my.conf
- [mysqld]
- server-id=101 #[必须]服务器唯一ID
- 重启Mysql服务
- systemctl restart mysqld;
- 登录到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;
- 要与主库一致
- 可能会遇到线程已经运行的问题,如果之前配置过,要停止该线程,stop slave
- start slave; :开启线程
- show slave status :查看是否已经配置好
- 太乱了,可以复制到文本编辑器中查看,也可以使用竖排查看 show slave status\G;没连接上看下面
注意!!!从数据库中克隆uuid一样!
因为我们的虚拟机是克隆出来的,所以所以数据库服务的uuid就相等了,
解决办法:
- 从机先停掉 slave :stop slave;
- 停掉数据库 :也可以不停等会刷新一下就好了
- 删除 /var/lib/mysql/auto.cnf,这个文件就是包含了uuid的配置,启动数据库服务的时候这个文件会自动生成
- rm-rf 找到这个文件
- 从机再次数据命令连接主机,和启动slave
配置好了!!
到这里已经实现了主从复制,数据同步,可以试一下新建一个表
添加一条记录,从库也会添加
任意操作都会变化!
Redis
简介:
https://www.redis.net.cn/ redis中文网
应用场景
- 缓存
- 任务队列
- 消息队列
- 分布式锁
Redis下载与安装
Linux下:
- 将redis安装包上传到Linux
- 解压安装包
- 安装redis的依赖环境gcc,命令:yum install gcc-c++
- 进入/usr/local/redis-4.0.0,进行编译,命令make
- 进入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加右键
.\redis-cli.exe -h 192.168.78.130 -p 6379 -a 123456
把这句话注释起来就好了,因为他默认的是本地才可以访问
注意防火墙端口6379的问题
数据类型
- 字符串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的值:分布式锁的时候会用
注意
- 存储的都是字符串形式的
- key相同的时候,后设置的值会覆盖前面的值
hash 操作命令
可以用来存储对象的数据
结构:
操作命令:
- hset key field value:将哈希表key中的字段field的值设为value key可以用用户id
- hget key field:获取存储在哈希表中指定字段的值
- hdel key field:删除存储在哈希表中指定字段的值
- hkeys key:获取哈希表中所有字段
- hvals key:获取哈希表中所有的值
- hgetall key:获取在哈希表中所有的字段和值
列表list操作命令
结构:
操作命令:
Redis列表是简单的字符串列表,按照插入顺序排序,常用命令
- lpush key value 1 [value 2]:将一个或多个值插入到列表头部
- lrange key start stop:获取列表指定范围内的元素
- rpop key:移除并获取列表最后一个元素
- lpop key :移除左边第一个元素
- llen key:获取列表长度
- brpop key1 [key2] timeout:移出并获取列表的最后一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
range:范围的意思
Set集合操作命令
结构:
操作命令:
Redis set是String类型的无序集合,集合成员是唯一的,这就意味着集合中不能出现重复的数据常用命令:
- sadd key member 1 [member2]:向集合添加一个或多个成员
- smembers key :返回集合中的所有成员
- scard key:返回给定所有集合的交集 (集合里卖弄有几个成员)
- sinter key1 [key2]:返回所有给定集合的并集
- sdiff key1 [key2]:返回给定所有集合的差集,顺序,前面的集合中拿后面集合中没有的
- srem key mermber1 [member2]:移除集合中一个或多个成员
有序集合sorted set操作命令
结构:
操作命令:
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
在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);
}
}
注意直接添加键值对的形式会出现下列这种情况
因为键值对都被序列化了:这样不利于操作键,所以创建一个配置类
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());
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了