Git、Linux、Redis

一、Git

1.1Git概述

1.1.1Git简介

Git是一个分布式版本控制工具,通常用来对软件开发过程中的源代码文件进行管理。通过Git仓库来存储和管理这些文件,Git仓库分为两种:
●本地仓库:开发人员自己电脑上的Git仓库
●远程仓库:远程服务器上的Git仓库.

主要功能有:

代码回溯
版本切换
多人协作
远程备份

commit:提交将本地文件和版本信息保存到本地仓库
push:推送,将本地仓库文件和版本信息上传到远程仓库
pull:拉取,将远程仓库文件和版本信息下载到本地仓库

1.1.2Git下载与安装

下载地址: https://git-scm.com/ download
下载完成后得到安装文件:◆Git-2.20.1-64-bit.exe

安装完成后在任意目录点击鼠标右键,如果能看到菜单中有Git GUI Here;Git Bash Here则表示安装完成.
Git GUI Here:打开Git图形界面
Git Bash Here: 打开Git命令行

1.2Git代码托管服务

1.2.1常用的Git代码托管服务

Git中存在两种类型的仓库,即本地仓库和远程仓库。那么我们如何搭建Git远程仓库呢?
我们可以借助互联网_上提供的一些代码托 管服务来实现,其中比较常用的有GitHub、码云、GitLab等。
(1)gitHub (地址: https://github.com/ ),是一个面向开源及私有软件项目的托管平台,因为只支持Git作为唯一
的版本库格式进行托管,故名gitHub
(2)码云(地址: https://gitee.com/ ),是国内的一一个代码托管平台,由于服务器在国内,所以相比于GitHub,码?
云速度会更快
(3)GitLab ( 地址: https://about.gitlab.com/ ),是一一个用于仓库管理系统的开源项目,使用Git作为代码管理工
具,并在此基础上搭建起来的web服务
(4)BitBucket (地址: https:/ /bitbucket.org/), 是-家源代码托管网站,采用Mercurial和Git作为分布式版本控制系统,同时提供商业计划和免费账户

1.2.2使用码云代码托管服务

使用码云的操作流程如下:
1、注册码云账号
2、登录码云
3、创建远程仓库
4、邀请其他用户成为仓库成员

使用码云代码托管服务-创建远程仓库hellogit
创建完成后可以查看仓库信息:
注意:每个Git远程仓库都会对应一个网络地址,点击[克隆/下载]按钮,在弹出窗口点击l复制]按钮获得网络地址https://gitee.com/fuchen0618/hellogith.git

使用码云代码托管服务-邀请其他用户成为仓库成员
前面已经在码云上创建了自己的远程仓库,目前仓库成员只有自己一个人(身份为管理员)。在企业实际开发中,一个
d项目往往是由多个人共同开发完成的,为了使多个参与者都有权限操作远程仓库,就需要邀请其他项目参与者成为当前d
仓库的成员。

1.3Git常用命令

1.3.1Git全局设置

当安装Git后首先要做的事情是设置用户名称和email地址。这是非常重要的,因为每次Git提交都会使用该用户信息。
在Git命令行中执行下面命令:
◆设置用户信息
git config --global user.name “itcast”
git config --global user.email "[email protected]
◆查看配置信息
git config --list
注意: .上面设置的user.name和user.email并不是我们在注册码云账号时使用的用户名和邮箱,此处可以任意设置。

例如:

git config --global user.name “cyc”
git config --global user.email “[email protected]

1.3.2获取Git仓库

要使用Git对我们的代码进行版本控制,首先需要获得Git仓库。
获取Git仓库通常有两种方式:
◆在本地初始化- 一个Git仓库(不常用)
◆从远程仓库克隆(常用)

1.3.2.1获取Git仓库-在本地初始化Git仓库

执行步骤如下:
1.在任意目录下创建一一个空目录(例如repo)作为我们的本地Git仓库
2.进入这个目录中,点击右键打开Git bash窗口
3.执行命令git init
如果在E:\git\repo目录中看到.git文件夹(此文件夹为隐藏文件夹)则说明Git仓库创建成功
我的电脑> (E:) > git > repo

1.3.2.2获取Git仓库-从远程仓库克隆

可以通过Git提供的命令从远程仓库进行克隆,将远程仓库克隆到本地.在目录E:\git下

点击右键打开Git bash窗口,输入命令形式: git clone [ 远程Git仓库地址]

git clone https://gitee.com/fuchen0618/hellogith.git

将在码云上面创建的远程仓库克隆下来。

1.3.3工作区、暂存区、版本库概念

版本库:前面看到的.git隐藏文件夹就是版本库,版本库中存储了很多配置信息、日志信息和文件版本信息等
工作区:包含.git文件夹的目录就是工作区,也称为工作目录,主要用于存放开发的代码
暂存区: .git文件夹中有很多文件,其中有一个index文件就是暂存区,也可以叫做stage。暂存区是-个临时保存修改文件的地方

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pmprzIqE-1662635805693)(E:\git\image\工作区、暂存区、版本库.png)]

1.3.4Git工作区中文件的状态

Git工作区中的文件存在两种状态:
◆untracked 未跟踪( 未被纳入版本控制)
◆tracked 已跟踪( 被纳入版本控制)

  1. Unmodified未修改状态

  2. Modified 已修改状态

  3. Staged 已暂存状态
    注意:这些文件的状态会随着我们执行Git的命令发生变化

helleogit仓库中新创建文件user.java 此时文件状态为未跟踪状态,使用git add user.java把user.java文件放入暂存区(index文件中),user.java文件此时为已暂存状态。
git commit -m “init User.java” User.java把暂存区中User.java文件放入版本库,User.java文件此时状态为未修改状态(Unmodified)
打开User.java文件,写几行代码,此时git status User.java,User.java文件状态为修改状态(Modified)

1.3.5本地仓库操作

本地仓库常用命令如下:
●git status 查看文件状态
●git add 文件名 将文件(User.java)的修改加入暂存区

●git add * 将所有文件的修改加入暂存区

●git reset 将暂存区的文件取消暂存或者是切换到指定版本

●git commit 将暂存区的文件修改提交到版本库
●git log 查看日志

git reset 命令的作用是将暂存区的文件取消暂存或者是切换到指定版本

git reset User.java 将暂存区中的User.java文件拿出来。

git reset --hard 版本号 切换版本

​ git reset --hard bc331f694088a4e2c02c28bf26674beb80fd0bf9

git commit命令的作用是将暂存区的文件修改提交到版本库,提交一次就有一个版本号

git commit -m “init User.java” User.java把暂存区中User.java文件放入版本库,User.java文件此时状态为未修改状态(Unmodified);"init User.java”提示信息,会写入日志中,命令git log可以查看日志

1.3.6远程仓库操作

前面执行的命令操作都是针对的本地仓库,本节我们会学习关于远程仓库的一些操作,具体包括:
●git remote 查看远程仓库

●git remote -v 查看远程仓库详细信息

●git remote add 添加远程仓库
●git clone 从远程仓库克隆
●git pull 从远程仓库拉取
●git push 推送到远程仓库

远程仓库操作-查看远程仓库
如果想查看已经配置的远程仓库服务器,可以运行git remote命令,它会列出每一个远程服务器的简写。如果已经克隆了远程仓库,那么至少应该能看到origin,这是Git克隆的仓库服务器的默认名字。

远程仓库操作-添加远程仓库
添加远程仓库,运行git remote add 添加一个新的远程Git仓库,同时指定一个可以引用的简写。shortname远程仓库别名

git remote add origin https://gitee.com/fuchen0618/hellogith.git

git clone https://gitee.com/fuchen0618/hellogith.git 从远程仓库克隆

文件User.java先执行命令git add User.java加入暂存区,再执行命令git commit -m ‘‘init User.java’’ User.java放入版本库,最后执行命令git push origin master把文件推送到远程仓库

远程仓库操作-从远程仓库拉取
git pull命令的作用是从远程仓库获取最新版本并合并到本地仓库,命令格式: git pull [short-name] [branch-name] git pull origin master
注意:如果当前本地仓库不是从远程仓库克隆,而是本地创建的仓库,并且仓库中存在文件,此时再从远程仓库拉取文
件的时候会报错(fatal: refusing to merge unrelated histories )
解决此问题可以在git pull命令后加入参数-- allow-unrelated-histories

1.3.7分支操作

分支是Git使用过程中非常重要的概念。使用分支意味着你可以把你的工作从开发主线.上分离开来,以免影响开发主线。同一个仓库可以有多个分支,各个分支相互独立,互不干扰。
通过git init命令创建本地仓库时默认会创建一个master分支。
本节我们会学习关于分支的相关命令,具体如下:
●git branch 查看分支、列出所有本地分支

●git branch -r 列出所有远程分支
●git branch -a 列出所有本地分支和远程分支

●git branch [name] 创建分支 git branch b1
●git checkout [name] 切换分支 git checkout b1
●git push [shortName] [name] 推送至远程仓库分支

git push origin b1 把b1分支推送到远程仓库
●git merge [name] 合并分支

master分支下命令:git merge b1 把b1分支下的内容合并到master分支下

1.3.8标签操作

Git中的标签,指的是某个分支某个特定时间点的状态。通过标签,可以很方便的切换到标记时的状态。比较有代表性的是人们会使用这个功能来标记发布结点(v1.0、 v1.2等)。

在本节中,我们将学习如下和标签相关的命令:
●git tag 列出已有的标签
● git tag [name] 创建标签 git tag v0.1

●git push [shortName] [name] 将标签推送至远程仓库

git push origin v0.1

●git checkout -b [branch] [name]检 出标签,需要新建一个分支指向某个标签。

git checkout -b b3 v0.2

1.4在IDEA中使用Git

1.4.1在IDEA中配置Git

在IDEA中使用Git,本质上还是使用的本地安装的Git软件,所以需要在IDEA中配置Git。

File下的setting中搜索Git,git的应用程序目录默认安装位置:

path to Git executable:C:\Program Files\Git\cmd\git.exe

1.4.2获取Git仓库

在IDEA中使用Git获取仓库有两种方式:
本地初始化仓库
已存在的项目,选择vcs中的import into version controller下的create new repository
选择E:\java\Test\demo1目录作为本地仓库,相当于命令git init再此目录下生成.git文件;

从远程仓库克隆
file下的close project,关闭当前项目,vcs中选择Get from Version Control,进入填写URL,选择本地仓库位置,点击clone,克隆远程仓库。Git、Linux、Redis_第1张图片

1.4.3本地仓库操作

本地仓库操作:
●将文件加入暂存区

Git、Linux、Redis_第2张图片
●将暂存区的文件提交到版本库
Git、Linux、Redis_第3张图片
●查看日志

点击IDEA中右上角Git中时间符号

1.4.4远程仓库操作

●查看 远程仓库
Git、Linux、Redis_第4张图片
●添加远程仓库

Git、Linux、Redis_第5张图片
●推送至远程仓库

●从远程仓库拉取

Git、Linux、Redis_第6张图片
Git、Linux、Redis_第7张图片

在把文件推送到远程仓库时出现问题:

Push to origin/master was rejected

解决方案如下:

1.切换到自己项目所在的目录,右键选择GIT BASH Here

2.或者在terminl窗口中依次输入命令:

git pull origin master --allow-unrelated-histories

再次推送解决问题。

1.4.5分支操作

●查看分支
●创建分支
●切换分支
●将分支推送到远程仓库
●合并分支

Git、Linux、Redis_第8张图片

Git、Linux、Redis_第9张图片

二、Linux

2.1linux基础文件目录

root用户密码123456
chenyuchuan 密码123456

在登录Linux时,一个具有唯一进程ID号的shell将被调用pid

/root 系统管理员root的目录
/usr 系统应用程序存放的目录
/etc 系统配置文件存放的目录 (用户密码信息)
/home 系统存放普通用户的目录
/var 放置系统执行过程中经常变化的文件:列如日志文件

2.2linux常用操作

man rm 查看命令帮助
mkdir 创建目录
touch 创建文件
cd 切换目录
ls 查看目录
ls -lh 查看目录详情
pwd 查看当前目录路径
vim/vi 添加内容
在a.txt文件中添加内容 vi a.txt

echo 输入内容
echo cycc cycc打印到屏幕上
将abcdef追加到a.txt文件末尾命令 echo abcbedf>>a.txt
把原来的a.txt文件内容aaaaa替换成bbbbb命令 echo bbbbb>a.txt

cat 查看内容

mv 移动
mv 目录名称 目录的新位置 移动目录位置
mv 目录名称 新目录名称 修改目录的名称

cp 拷贝
cp -r 目录名称 目录拷贝的位置 拷贝目录

find 搜索
在/home目录下查找以.txt 结尾的文件名:find /home -name “*.txt”

rm 删除数据
使用rm -rf 目录/文件/压缩包名 删除目录/文件/压缩包

ping 查看能不能上网

2.3linux文件解压打包命令

tar命令
打包压缩文件
命令:tar -zcvf 打包压缩后的文件名 要打包压缩的文件 ,其中:
z:调用 gzip 压缩命令进行压缩
c:打包文件
v:显示运行过程
f:指定文件名
比如:假如 test 目录下有三个文件分别是:aaa.txt bbb.txt ccc.txt,
如果我们要打包 test 目录并指定压缩后的压缩包名称为 test.tar.gz
可以使用命令:tar -zcvf test.tar.gz aaa.txt bbb.txt ccc.txt
或 tar -zcvf test.tar.gz /test/

tar -cvf [文件名].tar [文件目录] //打包成.tar文件
tar -jcvf [文件名].tar.bz2 [文件目录] //打包成.bz2文件
tar -zcvf [文件名].tar.gz [文件目录] //打包成.gz文件

解压压缩包
命令:tar [-xvf] 解压压缩文件
其中:x:代表解压
将 /test 下的 test.tar.gz 解压到当前目录下可以使用命令:tar -xvf test.tar.gz
将 /test 下的 test.tar.gz
解压到根目录/usr 下:tar -xvf test.tar.gz -C /usr(- C 代表指定解压的位置

tar -xvf [文件名].tar //解压到当前文件
tar -xvf [文件名].tar -C [文件目录] //将.tar文件解压到指定目录
tar -jxvf [文件名].tar.bz2 -C [文件目录] //解压.bz2文件到指定目录
tar -zxvf [文件名].tar.gz -C [文件目录] //解压.gz文件到指定目录

7z命令
压缩单个文件
7z a -t7z test.7z file 将file压缩为test.7z
压缩文件到指定目录下
7z a -t7z ./test/test.7z file
将file压缩到当前目录的test目录下,压缩文件名为tes

解压到当前目录
7z x filename.7z
解压文件到指定目录,-o后面直接跟目录,不需要空格
7z x test.7z -r -o./test

zip命令
压缩单个文件
zip filename.zip file 将file压缩为filename.zip,file不能是目录
压缩目录文件
zip -r filename.zip filedir
解压
unzip filename.zip -d filedir
将filename.zip解压到filedir目录,如果不指定-d filedir则解压到当前目录

rar命令
将filedir压缩为filename.rar文件
rar a filename.rar filedir
将rar文件解压到指定的dir目录,如果不指定dir则解压到当前目录
rar x filename.rar dir

chown linux中改变文件所有者,更改文件的属主

快捷键
tab 自动补全命令或路径
ctrl+l 清屏
ctrl+c 取消当前操作

2.4linux文件权限命令

r 可读权限
w 可写权限
x 可执行文件的权限
rw 可以对文件读写操作
rwx 表示可读写、执行
chmod(change mode)命令是控制用户对文件的权限的命令
chmod +x helloworld.sh 使得helloworld.sh文件具有可执行权限

  • 添加用户权限
  • 撤销用户权限
    = 将用户的权限重新设置

u(owner)表示文件所有者,即创建文件的人
g(group):表示和文件所有者相同组的用户
o(other):表示非文件所有者和相同group的用户
a(all):表示所有用户

chmod u+r test.txt 给文件所有者设置可读权限
chmod ug+rwx test.txt 给文件所有者、当前组的用户设置可读可写可执行的权限

2.5linux用户管理命令

useradd 选项 用户名:添加用户账号
userdel 选项 用户名:删除用户帐号
usermod 选项 用户名:修改帐号
passwd 用户名:更改或创建用户的密码
passwd -S 用户名 :显示用户账号密码信息
passwd -d 用户名: 清除用户密码

Linux 系统用户组的管理相关命令:
groupadd 选项 用户组 :增加一个新的用户组
groupdel 用户组:要删除一个已有的用户组
groupmod 选项 用户组 : 修改用户组的属性

2.6linux其他常用命令

pwd: 显示当前所在位置
sudo + 其他命令:以系统管理者的身份执行指令
ps -ef/ps -aux: 这两个命令都是查看当前系统正在运行进程
shutdown: shutdown -h now: 指定现在立即关机
reboot 重开机
kill -9 进程的pid: 杀死进程(-9 表示强制终止。)
先用 ps 查找进程,然后用 kill 杀掉

vim有几种工作模式 命令模式;编辑模式;底线命令模式
进入文件vim编辑命令 vi 文件名
i 进入文本编辑区
esc退出文件编辑区,跳到命令模式
:set nu 或者(set number)文件显示行数
:10 定位第十行 对数据进行操作直接敲打yy/p/dd/u
vi快捷键
yy 复制
p 粘贴
dd 剪切
u 撤销
ctrl+r 恢复
:3 d 删除第三行内容
:3,5d 删除第三行到第5行的内容
:3 把光标调到第三行,在敲打5dd 删除第三行后的5行内容

esc退出文件编辑区,跳到命令模式
vim不保存退出的命令是 :q
不保存文件,强制退出的命令是 :q!
保存文件,退出的命令是:wq
强制保存文件,退出的命令是 :wq!

2.7Shell编程文件

要求新建一个文件,输入hello world
chmod(change mode)命令是控制用户对文件的权限的命令
(1)touch helloworld.sh 新建一个helloworld.sh文件
(2)chmod +x helloworld.sh 使得脚本文件具有执行权限
(3)命令模式vi helloworld.sh 进入helloworld.sh文件内
按i进入编辑模式 按esc退出编辑模式,进入底层命令模式
shell 中 # 符号表示注释。shell 的第一行特殊,
一般都会以#!开始来指定使用的 shell 类型。

#!/bin/bash
#第一个shell小程序,echo 是linux中的输出命令。
echo “helloworld!”
(4)./helloworld 运行脚本

三、Redis

3.1Redis入门

3.1.1Redis简介

Redis是 一个开源的内存中的数据结构存储系统,它可以用作:数据库、缓存和消息中间件。
官网: https://redis.io
Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,官方提供的数据是可以达到100000+的QPS ( 每秒内
查询次数)。它存储的value类型比较丰富,也被称为结构化的NoSql数据库。NoSql (Not OnlySQL),不仅仅是SQL,泛指非关系型数据库。NoSql数据库并不是要取代关系型数据库,而是关系型数据库的补充。

Redis是一一个基于内存的key-value结构数据库。
●基于内存存储,读写性能高.
●适合存储热点数据(热点商品、资讯、新闻)
●企业应用广泛

●关系型数据库(RDBMS)
➢MySql
➢Oracle
➢DB2
SQLServer
●非关 系型数据库(NoSql)
➢Redis
➢Mongo db
➢MemCached

3.1.2Redis下载和安装

Ris下载与安装
Redis安装包分为windows版和Linyx版:
●Windows版 下载地址:

https://github.com/microsoftarchive/redis/releases
●Linux版 下载地址: https://download.redis.io/releases/

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

Redis的Windows版属于绿色软件,直接解压即可使用,解压后目录结构如下:

redis.windows.conf Redis配置文件
redis-cli.exe Redis客户端
redis-server.exe Redis服务端

3.1.3Redis服务启动与停止

Linux中redis服务启动,可以使用redis-server, 默认端口号为6379
Ctrl + C停止Redis服务

linux中src目录下 ./redis-server 启动服务

linux中src目录下 ./redis-cli 连接客户端

vim 模式下 输入esc退出编辑区,输入/dea回车,搜索dea.在按i进入编辑区域。

Windows系统中启动Redis,直接双击redis-server.exe即可启动Redis服务, redis服务默认端口号为6379

Redis第一次启动有一点小bug,客户端输入cmd命令redis-cli.exe,然后输入shutdown,在输入exit退出;服务端输入cmd命令redis-server.exe redis.windows.conf,正常启动成功,然后再到客户端;输入cmd命令redis-cli.exe,连接成功,操作redis.

3.2Redis数据类型

3.2.1介绍

Redis存储的是key-value结构的数据,其中key是字符串类型,value有5种常用的数据类型:
●字符串string
●哈希hash
●列表 list
●集合 set
●有序集合 sorted set

3.2.2Redis5种常用数据类型

字符串 string 普通字符串,常用
哈希 hash 适合存储对象
列表list 按照插入顺序排序,可以有重复元素
集合 set 无序集合,没有重复元素
有序集合sorted set 有序集合,没有重复元素

列表 实现任务队列,先进来的任务先执行。
集合,有序集合,没有重复元素,先加入的a,后面在加入一个a,覆盖前面的a.有序集合适合于做那种排行榜。

3.3Redis常用命令

3.3.1字符串string操作命令

●set key value 设置指定key的值
●get key 获取指定key的值
●setex key seconds value 设置指定key的值,并将key的过期时间设为seconds秒
●setnx key value 只有在key不存在时设置key的值

set name chenyucahun

get name 结果chenyucahun

set name cyc

get name 结果cyc

set key value,key相同的情况下,后设置的值覆盖前设置的值。

setnx age 20

get age 结果20

setnx age 30

get age 结果20

setnx key value, key存在时后设置的值不会覆盖前面的值

3.3.2哈希hash操作命令

Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象,常用命令:
●hset key field value将哈希表key中的字段field的值设为value
●hget key field 获取存储在哈希表中指定字段的值
●hdel key field 删除存储在哈希表中的指定字段
●hkeys key 获取哈希表中所有字段
●hvals key 获取哈希表中,所有值
●hgetall key 获取在哈希表中指定key的所有字段和值

hset 001 name zhangsan ,hset 001 age 20,hset 001 city beijing

hget 001 name 结果zhangsan

hdel 001 age 删除age字段

hkeys 001 结果 name city

hvals 001 结果zhangsan beijing

hgetall 001 结果 name zhangsan city beijing

ctrl+l清理屏幕

3.3.3列表 list操作命令

Redis列表是简单的字符串列表,按照插入顺序排序,常用命令:
●lpush key value1 [value2] 将一个或多个值插入到列表头部
●lrange key start stop 获取列表指定范围内的元素
●rpop key 移除并获取列表最后一个元素
●llen key 获取列表长度
●brpop key1 [key2 ] timeout 移出并获取列表的最后一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止

lpush list a b c d 在列表中插入多个值

lrange list 0 -1,获取列表中的元素,从0开始到结束。结果一次输出 d c b a

rpop list 结果为a

llen list 结果为3

brpop list 10 结果为b ,brpop list 10 结果为 c,brpop list 10 结果为d,brpop list 10 列表中没有元素,阻塞等待10s后结束。

3.3.4无序集合 set操作命令

Redis set是string类型的无序集合。集合成员是唯一-的, 这就意味着集合中不能出现重复的数据,常用命令:
●sadd key member1 [member2] 向集合添加一个或多个成员
●smembers key 返回集合中的所有成员,
●scard key 获取集合的成员数
●sinter key1 [key2] 返回给定所有集合的交集
●sunion key1 [key2] 返回所有给定集合的并集
●sdiff key1 [key2] 返回给定所有集合的差集
●srem key member1 [member2] 移除集合中一个或多个成员

sadd set1 a b c d m n 向集合添加多个成员,

sadd set2 a b c d x y z

smembers set1 得到集合所有成员 b d a c m n

scard set1 结果为6

sinter set1 set2 返回给定集合的交集,结果为a b c d

sunion set1 set2 返回给定集合的并集,结果为a b c d m n x y z

sdiff set1 set2 返回给定集合的差集,结果为 m n

srem set1 m n 移除set1集合中的 m n 成员

3.3.5有序集合 sorted set操作命令

Redis sorted set有序集合是string类型元素的集合,且不允许重复的成员。每个元素都会关联一-个double类 型的分数(score)。redis正是通过分数来为集合中的成员进行从小到大排序。有序集合的成员是唯一的, 但分数却可以重复。
常用命令:
●zadd key score1 member1 [score2 member2] 向有序集合添加一一个或多个成员,或者更新已存在成员的
分数
●zrange key start stop [WITHSCORES] 通过索引区间返回有序集合中指定区间内的成员
●zincrby key increment member 有序集合中对指定成员的分数加上增量increment
●zrem key member [member] 移除有序集合中的一个或多个成员

zadd zset 10. 0 a 9.0 c 6.0 d 8.0 e

zadd zset 12.0 a 后添加的a的分数会覆盖先添加的

zrange zset 0 -1 结果为 d e c a

zincrby zset 1.0 e,给zset集合中的e元素的分数加一

zrem zset e c ,移除zset集合中的多个成员。

3.3.6通用命令

●keys pattern 查找所有符合给定模式( pattern)的key
●exists key 检查给定key是否存在
●type key 返回key所储存的值的类型
●ttl key 返回给定key的剩余生存时间(TTL, time to live),以秒为单位
●del key 该命令用于在key存在是删除key

keys * 返回结果name age 001 list set zset

exists name 结果为1,表名存在该key;exists sex 结果为0,表名不存在该key

type name 结果为string;type 001 结果为hash;type set 结果为set

setex code 60 3456,设置一个实效60s的String类型数据

ttl code 返回code的剩余时间

del age 删除age这个key

更多命令可以参考Redis中文网: https://www.redis.net.cn

3.4在java中操作Redis

3.4.1介绍

Redis的Java客户端很多,官方推荐的有三种:
●Jedis
●Lettuce
●Redisson
Spring对Redis客户端进行了整合,提供了Spring Data Redis,在Spring Boot项目中还提供了对应的Starter,即spring-boot-starter-data-redis

3.4.2Jedis

Jedis的maven坐标:

<dependency>
<groupld>redis.clients</groupld>
<artifactld>jedis</ artifactld>
<version>2.8.0</version>
</dependency>

使用Jedis操作Redis的步骤:
①获取连接
②执行操作
③关闭连接

连接本地的redis进行测试,需要先启动本地的redis服务

public class JedisTest {

    @Test
    public void redisTest(){
        //获取连接
        Jedis jedis=new Jedis("localhost",6379);
        //执行操作
        jedis.set("username","lisi");
        String username = jedis.get("username");
        System.out.println(username);

        jedis.hset("002","name","wangwu");
        String name = jedis.hget("002", "name");
        System.out.println(name);
        //关闭连接
        jedis.close();

    }

使用jedis作为redis的客户端,操作redis的数据,调用相关方法,相当执行cmd中的操作命令。

3.4.2Spring Data Redis

Spring Data Redis中提供了一个高度封装的类: RedisTemplate, 针对jedis客户 端中大量api进行了归类封装,将同一类型操作封装为operation接口,具体分类如下:
●ValueOperations: 简单K-V操作
●SetOperations: set类型数据操作
●ZSetOperations: zset类型数据操作
●HashOperations: 针对map类型的数据操作
●ListOperations:针对list类型的数据操作

步骤:

在Spring Boot项目中,可以使用Spring Data Redis来简化Redis操作, maven坐标:

 <!--测试-->
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
<!--springboot 整合redis-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
            <version>2.7.3</version>
        </dependency>

配置application.yml

spring:
  application:
    name: springboot_data_redis
  #redis相关配置
  redis:
    host: localhost
    port: 6379
    database: 0 #操作的是0号数据库
    jedis:
      #redis连接池配置
      pool:
        max-active: 8 #最大连接数
        max-wait: 1ms #连接池最大阻塞时间
        max-idle: 4 #连接池中最大空闲连接
        min-idle: 0 #连接池中最小空闲连接

redis客户端启动分配16个数据库,默认使用0号数据库,通过执行select 1命令,可以更改到1号数据库

测试

@SpringBootTest
@RunWith(SpringRunner.class)
class SpringbootDataRedisApplicationTests {
   @Autowired
   private RedisTemplate redisTemplate;

    /**
     * 操作String类型数据
     */
    @Test
    void testString() {
        ValueOperations valueOperations = redisTemplate.opsForValue();
        //添加数据
        valueOperations.set("city","beijing");
        //添加有效时间数据
        valueOperations.set("ssm","sasu",10, TimeUnit.SECONDS);
        //得到数据
        String city =(String) valueOperations.get("city");
        System.out.println(city);
        //添加已存在key,不能赋值成功 相当于setnx key value
        Boolean aBoolean = valueOperations.setIfAbsent("city","chengdu");
        System.out.println(aBoolean);
    }

    /**
     * 操作hash数据
     *
     */
    @Test
    public void testHash(){

        HashOperations hashOperations = redisTemplate.opsForHash();
        //存值
        hashOperations.put("user","name","cyc");
        hashOperations.put("user","age","20");
        //取值
        String o =(String) hashOperations.get("user", "name");
        //获得hash结构中的所有字段
        Set<String> user = hashOperations.keys("user");
        for (String u : user) {
            System.out.println(u);
        }
        //获取hash结构中所有值
        List<String> values = hashOperations.values("user");
        for (String value : values) {
            System.out.println(value);
        }
    }

    /**
     * 操作list数组类型的数据
     */
    @Test
    public void testList(){
        ListOperations listOperations = redisTemplate.opsForList();
        //存值
        listOperations.leftPush("tsetList","a");
        listOperations.leftPushAll("testList","b","c","d");
        //取值
        List<String> testList = listOperations.range("testList", 0, -1);
        for (String s : testList) {
            System.out.println(s);
        }
        //获得列表长度
        Long size = listOperations.size("testList");
        int lSize = size.intValue();
        for (int i = 0; i < lSize; i++) {
            //移除队列
            String list =(String) listOperations.rightPop("testList");
            System.out.println(list);
        }

    }

    /**
     * 操作无序集合set数据
     */
    @Test
    public void testSet(){
        SetOperations setOperations = redisTemplate.opsForSet();
        //存值
        setOperations.add("testSet","ssm","mvc","spring");
        //取值
        Set<String> testSet = setOperations.members("testSet");
        for (String s : testSet) {
            System.out.println(s);
        }
        //删除成员
        setOperations.remove("testSet","ssm");
    }

    /**
     * 操作Zset有序数据
     */
    @Test
    public void testZset(){
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();
        //存值
        zSetOperations.add("testZset","a",10.0);
        zSetOperations.add("testZset","b",12.0);
        zSetOperations.add("testZset","c",8.0);
        zSetOperations.add("testZset","d",18.0);

        //取值
        Set<String> testZset = zSetOperations.range("testZset", 0, -1);
        for (String s : testZset) {
            System.out.println(s);
        }
        //修改分数
        zSetOperations.incrementScore("testZset","c",3.0);
        testZset = zSetOperations.range("testZset", 0, -1);
        for (String s : testZset) {
            System.out.println(s);
        }
        //删除成员
        zSetOperations.remove("testZset","a","b");
    }
    /**
     * 通用操作
     */
    @Test
    public void testCommon(){
        //获取Redis中所有的key
        Set<String> keys = redisTemplate.keys("*");
        for (String key : keys) {
            System.out.println(key);
        }
        //判断某个key是否存在
        Boolean bool = redisTemplate.hasKey("cyc");
        System.out.println(bool);
        //删除指定key
        redisTemplate.delete("testZset");
        //获取指定key对应的value的数据类型
        DataType type = redisTemplate.type("testSet");
        System.out.println(type.name());
    }
}

8.0);

    //取值
    Set testZset = zSetOperations.range("testZset", 0, -1);
    for (String s : testZset) {
        System.out.println(s);
    }
    //修改分数
    zSetOperations.incrementScore("testZset","c",3.0);
    testZset = zSetOperations.range("testZset", 0, -1);
    for (String s : testZset) {
        System.out.println(s);
    }
    //删除成员
    zSetOperations.remove("testZset","a","b");
}
/**
 * 通用操作
 */
@Test
public void testCommon(){
    //获取Redis中所有的key
    Set keys = redisTemplate.keys("*");
    for (String key : keys) {
        System.out.println(key);
    }
    //判断某个key是否存在
    Boolean bool = redisTemplate.hasKey("cyc");
    System.out.println(bool);
    //删除指定key
    redisTemplate.delete("testZset");
    //获取指定key对应的value的数据类型
    DataType type = redisTemplate.type("testSet");
    System.out.println(type.name());
}

}

你可能感兴趣的:(java,git,linux,github)