Redis基础知识(一):学习笔记

2023-11-11

一、nosql和redis

nosql(no only sql)是非关系型数据库,或者叫不只是sql。

redis是用key-value存储的非关系型数据库,默认有16个数据库。用来作为缓存数据库,辅助业务数据库。

redis的key使用”:“,可以识别为文件夹层级
在这里插入图片描述

二、在Centos 7 中用Docker安装并运行Redis

(一)安装并运行

1、在docker hub 中查找redis 镜像

docker search redis

2、从docker hub 中拉取redis 镜像

docker pull redis:6.2.1

3、查看拉取的Redis镜像

docker  images

4、运行 redis服务端

docker run -p 6379:6379  -d  redis:6.2.1  redis-server
参数解释:
docker run:启动命令
--name :给容器起名字
-p :★映射端口号,主机端口:容器端口
-v $PWD/data:/data : 将主机中当前目录下的data挂载到容器的/data
-i : 以交互模式运行。
-t : 进入终端。
-d : 以守护模式后台运行。
--requirepass :设置密码
-e XXX_XXX="xxxxxxxxxxx" : 指定环境变量

5、查看正在运行的容器

docker ps 

6、打开redis 客户端★

docker exec -it  <容器id>  redis-cli

7、输入ping进行测试
打印出pong 表示运行成功。

(二)其他操作:

1、重新启动redis容器

docker   restart   <容器id>

2、结束正在运行的容器

docker  stop  <容器id>    容器优雅退出
docker  kill  <容器id>    容器直接退出

3、删除docker中的容器 (容器在删除前要先结束)

docker  rm   <容器id>  [ <容器id> ...] 

4、删除docker 中的镜像

docker  rmi  <镜像id>  [ <镜像id> ...] 

5、查看正在运行的redis进程

 ps -ef | grep redis

6、进入容器内部

docker exec -it  <容器id>  bash

可以看出Redis镜像是搭建在 简化版ubantu系统之上
在系统中执行:

apt-get   
ls
cd  / 
uname -a  查看系统内核
cd /data   该目录是redis持久化时存储数据的位置

7、查看容器内网ip地址
docker inspect <容器id>

在这里插入代码片

8、查看docker 镜像的版本

docker image inspect <镜像名称>:latest|grep -i version

(三)redis数据库常见操作

select  <number>   切换到指定数据库

keys *  查看数据库中全部的key
set  <key> <value>	设置键值对,若键存在,则替换值,若不存在,则新建键值对
setnx  <key> <value>   设置键值对,若键存在,设置失败,若不存在,则新建键值对
get  <key>   根据键取值
type  <key>	查看指定键的类型
ttl <key>  查看指定键的剩余存储时间
flushdb   清空数据库
flushall   清空数据库

三、基本数据类型

String字符串、list列表、set集合、hash哈希、zset集合

(一)String字符串

set  <key> <value>	设置键值对,若键存在,则替换值,若不存在,则新添键值对
setnx  <key> <value>   设置键值对
get  <key>   根据键取值
append <key>  <add> 将内容添加到原值的末尾
strlen  <key>   查看指定键的值的长度
incr <key>   对指定的键的值加1
decr  <key>  对指定的键的值减1
incrby  <key>   <step> 	对指定的键的值加上指定的步长(step)
decrby <key>  <step>	对指定的键的值减去指定的步长(step)

注:incr /decr/incrby/decrby 操作是原子性的他,因为redis是 单线程多io复用的。
java中的i++是多线程操作,不是原子操作。

setex <key>  <seconds> <value> 添加键值对,设置指定的有效时间
mset <key> <value>  [ <key> <value>   ...]  设置多个键值对
mget  <key>  [  <key> ...]    查看多个键的值
getrange  <key>   <start>   <end>
setrange  <key>   <offset>  <value>

(二)list列表

list集合有序、可重复。

lpush  <key>  <value> [  <value> ... ]   从左开始推入值
rpush   <key>  <value> [  <value> ... ]    从右开始推入值
lpop   <key>  <count>  从左消去count个元素
rpop   <key>  <count>  从右消去count个元素
rpoplpush   <key1>   <count>   <key1>  将key1的右侧元素 删除,放置到key2 的左侧

---------------以上的操作中:l为左(left),r为右(right)--------------------
---------------以下的操作中:l为list--------------------

lrange   <key>  <start>  <end>    根据范围查看列表元素
例:lrange  kk1  0   -1   查看列表全部元素
lindex <key>  <index>     根据索引查看列表元素

llen <key> 查看列表的长度
linsert  <key>  <before/after>   <value>  <newvalue>  在value前面或后面插入newvalue
lrem <key>  <count>  <value>  删除指定个数的相同元素
lset <key>  <index>  <value>  替换列表指定位置的元素

(三)set集合

set 是无序、不可重复的集合。

sadd  <key>  member [member ...]    添加set集合
spop  <key>  [<count>]   随机排出指定个数的元素
smembers   <key>  查看set集合全部元素
sismember  <key>   <value>   	判断指定键的值中元素是否有value,有则返回1,没有则返回0
srandmember <key> <count>    查看随机count个的元素
srem    <key>   <value1> <value2> ...   删除指定key的set值中的某个元素
smove   <source>  <defin>   <value>

sinter  <key1>    <key2> 		查看两个集合元素的交集
sunion   <key1>    <key2>	查看两个集合元素的并集
sdiff  <key1>    <key2>		查看两个集合元素的差集

(四)hash哈希

hset    <key>  <field>  <value>  设置键-字段-值
hget    <key>  <field>  获取键-字段的值
hsetnx	 <key>  <field>  <value>	 当且仅当字段不存在,设置键-字段-值;若字段存在,则设置失败
hincrby	 <key>  <field>  <step>    给指定键-字段 增加指定步长
hexists	 <key>  <field>   判断指定键-字段的值是否存在 
hmset	 <key>  <field>  <value>	[ <field>  <value>	...]	批量设置键-字段-值

hkeys <key>  获取hash集合所有的字段
hvals  <key>	 获取hash集合所有的值

(五)zset集合

zset(sortedSet)是有序、不可重复的集合.
zadd  <key>  <score>  <value> [ <score>  <value> ...]    在zset集合中添加键值对
zrange  <key>  <start>  <end>  [withscores]查看集合中元素
例:zrange  k1 0  -1   查看集合中全部元素
zrange  k1 0  -1   withscores 查看集合中全部元素和评分(从低到高)
zrangebyscores  <key>  <min>  <max>  [withscores]根据评分范围查看集合中元素
zrevrange  <key>  <start>  <end>   [withscores] 按评分从高到低查看集合中元素
zverrangebyscores  <key>  <min>  <max>  [withscores] 根据评分范围从高到低查看集合中元素
zrem  <key>  <value>   删除指定键值对
zrank   <key>  <value>	查看指定键值对的排名
zcount <key> <min>  <max>  查看分数范围内的元素个数

四、发布和订阅

redis发布和订阅是一种消息通信模式,发布者(publish)发布消息,订阅者(subscribe)接受消息。
启动两个Redis客户端
订阅者: subscribe
发布者: publish

五、事务

(一)简介

redis事务与mysql事务不同,redis的事务是队列,没有ACID特性。

  • multi 开启事务
  • 组队阶段:设置队列
  • discard 放弃组队
  • exec 执行事务
  • 执行阶段:执行队列
    在这里插入图片描述

例:

multi
set  k1  v1
set  k2  v2
ket   k3 v3
exec

提示:ok;ok;ok;

失败例1:

multi
set  k1  v1
set  k2  v2
set  k3
exec

提示:(error) EXECABORT Transaction discarded because of previous errors.
在组队中就有语法错误,所有命令都不执行

失败例2:

multi
set k1  v1
incr  k1
set  k2  v2
exec

提示:ok ; error; ok;
在组队中没有语法错误,执行中有错误,只有错误的命令不执行

(二)悲观锁和乐观锁

悲观锁:假定获取数据会修改。在执行前上锁,其他线程不能调用,在执行后解锁,其他线程才可以调用。适用于多写操作。
乐观锁:假定获取数据不会修改。拿取数据时不会上锁,更新数据时会校验 版本号 是否一致。适用于多读操作。

watch key [ key … ] 监听一个或多个key
unwatch key [ key … ] 取消监听一个或多个key

(三)redis事务三特性

(1)单独的隔离操作。事务中的命令都会序列化、按顺序执行。事务执行不会 被其他客户端的命令打断。
(2)没有隔离等级的概念。事务执行之前,命令没有实际执行。
(3)不能保证原子性。事务中命令没有错误,执行中遇到错误,其他命令正常执行。没有回滚。

六、redis的主从复制

(一)简介

redis构成一主(master)多从(slave)的结构,主数据库中的数据复制到从数据库中,客户端对主数据库进行写操作,对从数据库进行读操作。不能多个主同时存在(一山不容二主)。

(二)搭建一主多从

运行三个redis数据库

docker run -p 6379:6379  -d redis:6.2.1 redis-server
45acac3e5251
docker run -p 6380:6379  -d redis:6.2.1 redis-server
22ea8de0ec4b
docker run -p 6381:6379  -d redis:6.2.1 redis-server
163c84c30f0a

查看容器内网ip地址

master
docker inspect 45acac3e5251 
172.17.0.2

slave
docker inspect 22ea8de0ec4b
172.17.0.3
docker inspect 163c84c30f0a
172.17.0.4

三个redis数据库进入客户端

docker exec -it  45acac3e5251  redis-cli
docker exec -it  22ea8de0ec4b  redis-cli
docker exec -it  163c84c30f0a  redis-cli

在从服务器中输入

slaveof    172.17.0.2   6379    连接主服务器

在主-从服务器中分别输入

info  replication  查看主从复制配置

主服务器显示

# Replication
role:master
connected_slaves:2
slave0:ip=172.17.0.4,port=6379,state=online,offset=1918,lag=0
slave1:ip=172.17.0.3,port=6379,state=online,offset=1918,lag=0
master_failover_state:no-failover
master_replid:3a62db6f4c83f53a7a3e59e90a2c618b5056b587
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1918
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:1918

从服务器显示

# Replication
role:slave
master_host:172.17.0.2
master_port:6379
master_link_status:up
master_last_io_seconds_ago:8
master_sync_in_progress:0
slave_repl_offset:1904
slave_priority:100
slave_read_only:1
connected_slaves:0
master_failover_state:no-failover
master_replid:3a62db6f4c83f53a7a3e59e90a2c618b5056b587
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1904
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:1904

连接成功后,从服务器会复制主服务器的数据。

(三)3种模式

①一主二仆:详细操作见(二)

②薪火相传(一脉相承/单线联系):
0号从服务器(172.17.0.3) 连接主服务器(172.17.0.2)

slaveof    172.17.0.2   6379    

1号从服务器(172.17.0.4) 连接0号从服务器(172.17.0.3)

slaveof    172.17.0.3   6379    

③反客为主(脱离从属关系):
在从服务器中输入:

slaveof   no    one    不是任何人的从属
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Redis基础知识(一):学习笔记 的相关文章

随机推荐

  • 如何显示远程桌面_库卡机器人之远程桌面RDP

    前面已经介绍过使用VNC和RSV来实现库卡机器人的远程连接 其实还有一些方法 比如Teamviewer或Virture Remote Pendant 简称VRP 这里就不再介绍如何来实现 今天主要介绍通过windows自带的RDP来实现这种
  • Verilog 学习笔记(4)——语句块,多路分支语句、循环语句、连续赋值语句

    本章主要讲解Verilog语言中的语句部分 Verilog 语句块主要包括顺序块和并行块 语句类型有多路分支语句 case语句 casex casez 语句 循环语句 while 循环 for 循环 repeat 循环 forever 循环
  • 前端18K面试题总览,往这方面准备就对了

    Vue面试题 生命周期函数面试题 1 什么是 vue 生命周期 2 vue生命周期的作用是什么 3 第一次页面加载会触发哪几个钩子 4 简述每个周期具体适合哪些场景 5 created和mounted的区别 6 vue获取数据在哪个周期函数
  • AI数字人应该怎么制作?详细教程

    现在市面上有很多可以制作AI数字人的平台工具 本文主要针对使用腾讯智影来制作数字人 附免费教程 1 腾讯智影介绍 腾讯推出的在线智能视频创作平台 智影是一款云端智能视频创作工具 无需下载即可通过PC浏览器访问 支持视频剪辑 素材库 文本配音
  • C语言之 printf() 和 scanf() 函数详解

    文章目录 前言 一 printf 函数详解 1 函数原型 2 参数说明符详解 3 代码示例及易错点示例 二 scanf 函数详解 1 函数原型 2 参数说明符详解 3 代码示例及易错点示例 前言 printf scanf 两个函数相信大家并
  • 产品经理需要向上思考

    上一篇文章说了产品经理如何锻炼自己看透事物本质的能力 王诗沐老师在其 幕后产品 一书中还提到向上思考能力 读完后对我有一定的启发 我加一些自己的思考 和大家聊聊这个话题 很多人在产品经理面试的时候 可能会被问到这样一个题目 就是你如何看待X
  • 数据库第五周实验——单表查询——例题实现

    文章目录 一 选择表中的若干列 1 查询指定列 2 查询全部列 3 查询经过计算的值 二 选择表中的若干元组 1 消除取值重复的行 DISTINCT 2 查询满足条件的元组 WHERE 1 比较大小 2 确定范围 3 确定集合 4 字符匹配
  • typescript第三天—接口和类

    接口 作一个简历的自动筛选程序 很简单 年龄小于 25 岁 胸围大于 90 公分的 可以进入面试环节 我们最开始的写法是这样的 新建一个文件 Demo8 ts 然后编写如下代码 const screenResume name string
  • 1.Docker学习之基础知识

    0x00 Docker 快速入门 1 基础介绍 2 Docker 架构 3 Docker 资源隔离 4 Docker 容器文件系统 0x01 Docker 安装 1 Linux 2 Windows 3 MAC 4 加速器配置 0x02 Do
  • win10 .yml .yaml 格式默认使用notepad++打开

    起因 发现win10 双击打开 yml yaml文件不能默认选择notepad 每次都得右击文件使用notepad 编辑 而且在设置 gt 应用 gt 默认应用 gt 按文件类型指定默认应用也没有 yml yaml 发现可以在notepad
  • 汇编语法

    1 通用寄存器 EAX EBX ECX EDX ESI EDI ESP EBP 它 们 的低 16 位就是 8086 的 AX BX CX DX SI DI SP BP 它们的含义如下 EAX 累加器 EBX 基址寄存器 Base ECX
  • 解决msvcp120d.dll和msvcr120d.dll缺失

    VS2015配置OpenCV2 4 xx之后 会出现如下问题 原因 微软的Visual Studio最终用户许可协议是禁止发布调试版 名字后面有D 的DLL的 msvcp120d dll和msvcr120d dll是VS2013版本中的调试
  • 文本检测(Text Detection)简要综述

    文章目录 检测 Detection 在计算机视觉中的位置 检测任务 经典数据集 评价指标 发展历史 什么叫Anchor 检测架构 RPN FPN 特征金字塔网络 几个文本检测的较新方法 FOTS 2018CVPR Fast Oriented
  • httpclient请求接口超时问题

    最近线上出现一个问题 外部请求过来后一直没有响应给调用方 看日志没有报错 可以复现 想到的就可能是五个原因 日志文件过大导致磁盘空间满了 导致正常的业务日志无法写入 但是重启后发现日志能正常写入 排除这个问题 系统对接很多外部数据源 可能哪
  • MySQL类型定义 - ENUM 和SET类型

    1 ENUM类型 ENUM类型又称为枚举类型 在创建表时 ENUM类型的取值范围以列表的形式指定 其基本形式如下 属性名 ENUM 值1 值2 值n 其中 属性名 参数指字段的名称 值n 参数表示列表中的第n个值 ENUM类型的值只能取列表
  • paddleLabe标注文件转labelImg

    代码 import os import xml etree ElementTree as ET 增加换行符 def indent elem level 0 i n level t if len elem if not elem text o
  • presto集群安装

    presto集群安装 整合hive 张映 发表于 2019 11 07 分类目录 hadoop spark scala 标签 hive presto Presto是一个运行在多台服务器上的分布式系统 完整安装包括一个coordinator
  • 微信小程序中使用ECharts--折线图、柱状图、饼图等

    微信小程序开发者的反馈 表示他们强烈需要像 ECharts 这样的可视化工具 但是微信小程序是不支持 DOM 操作的 Canvas 接口也和浏览器不尽相同 因此 ECharts 团队和微信小程序官方团队合作 提供了 ECharts 的微信小
  • EF codeFirst Database.SetInitializer的四种选项

    public MyDbContext base name Default 不会创建数据库 生产环境建议用这个设置 表通过sql来创建或修改 Database SetInitializer
  • Redis基础知识(一):学习笔记

    文章目录 一 nosql和redis 二 在Centos 7 中用Docker安装并运行Redis 一 安装并运行 二 其他操作 三 redis数据库常见操作 三 基本数据类型 一 String字符串 二 list列表 三 set集合 四