Redis基础篇(含redis在linux环境下的安装教程,以及用docker安装redis的教程)

embedded/2024/10/20 4:06:33/

Redis

Redis是什么

redis是一个高性能的,键值对的,将数据存储在内存中的非关系型数据库(nosql数据库 not only sql)

高性能的:数据存储在内存中,直接访问内存

键值对:新闻的id(建) : 点赞数量(值) 、商品id : {id:1000,name:“华为手机”,price:3000}

非关系型数据库:数据存储是键值对的,没有二维表关系 不使用sql操作

Redis的特征

键值(key-value)型,value支持多种不同数据结构,功能丰富

单线程,每个命令具备原子性

低延迟,速度快(基于内存*、IO多路复用、良好的编码)

支持数据持久化

支持主从集群、分片集群

支持多语言客户端

为什么要使用Redis

使用redis作为缓存,将一些访问量大,或者修改较少的数据使用redis存储起来,对mysql形成保护

什么是NoSQL数据库

SQL是关系形数据库;NoSQL非关系形数据库

sql和nosql的差异

在这里插入图片描述

sql中的数据都是结构化的数据并且可以互相关联,按照表的结构去存储数据,采用sql查询,满足ACID(事务)

nosql中的数据是非结构化的,数据之间无关联(程序员可以之间去构建联系),查询时类似java中的map,BASE(无法全部满足事务)

nosql比sql给适合扩展

在这里插入图片描述

(Document 为文档型 Graph 为图型)

Linux直接安装Redis

为什么用Linux服务器来安装Redis(Redis官方没用提供Windows版本的安装包,并且大多数企业都是基于Linux服务器来部署项目)

1.1安装Redis依赖

yum install -y gcc tcl

1.2上传安装包并解压

usr/local/src

进入redis目录

cd redis-版本号

运行编译命令

make && make install

默认的安装路径是在 /usr/local/bin 目录下

redis-cli:是redis提供的命令行客户端

redis-server:是redis的服务器端起动脚本

redis-sentinel:是redis的哨兵启动脚本

1.3默认启动

安装完后,任意目录输入redis-server命令即可启动Redis(一般不使用)

1.3.2指定配置启动

要让Redis以后台方式启动,必须修改Redis配置文件,就在redis安装包下(/usr/local/src/redis-6.2.6),名字叫redis.conf
在这里插入图片描述

1.3.3开机自启动

在这里插入图片描述
在这里插入图片描述

2.Redis安装(Linux下使用Docker安装)

1.创建 redis 配置文件和数据映射挂载卷

mkdir -p /opt/redis/conf
mkdir -p /opt/redis/data

2.复制 redis.conf 文件到/opt/redis/conf 目录下(注意,此文件已设置密码为 123)

3.拉取镜像

docker pull redis:6.0

4.安装命令

docker run -d -p 6379:6379 \ 
--name redis \ 
--restart=always \ 
--privileged=true \ 
-v /opt/redis/conf/redis.conf:/etc/redis/redis.conf \ 
-v /opt/redis/data:/data \
redis:6.0

docker进入reids的指令

docker exec -it redis redis-cli

Redis通用命令

HELP: 查看所有指令

help string(查询string类型的指令)
help keys(查询keys指令的用法)

KEYS: 查看所有符合模板的key,不建议在生产环境设备上使用(redis是单线程的执行命令的在执行完这个命令前其他命令会阻塞)

keys 模板(*表示全部,c*就表示开头为c的全部)

DEL: 删除一个key

del key(可以批量删除)

EXISTS: 判断key是否存在

exists key

EXPIRE: 给key设置一个有效期,到时间自动删除

expire key 20(默认为秒)

TTL: 查看一个key的剩余时间

ttl key

Redis 数据结构

redis中数据存储是键值对的,建是字符串类型,值有5种数据类型

string(字符串)

最常用的

场景:单值存储 存储一个字符的值 name age json字符串 验证码 计算器

set key value
//创建一个键值对
get key
//获取该key的值
del key
//删除这个键值对
keys *
//查看所有键值对
incr key
//让这个键对应的值自增1
decr k
//让这个建对应的值自减1
incrby key 2
//让这个键对应的值自增2
incrbyfloat key 0.5
//让这个键对应的值自增0.5
setnx key value
//不存在新增key 存在就不执行
setex key 有效期
//新增key并设置有效期

在这里插入图片描述

hash(哈希)

hash适合一个键存储多个属性值的场景

例如用户信息 新闻点赞,收藏信息

hset key field value
//e.g. hset news 1:dz 20
//存储一个哈希表key的键值
hmset key field1 value1 field2 value2
//一次存储多条
hget key field
//获取值
hgetall
//获取hash类型的key中的所有field和value
hdel key field
//删除
hlen key
//返回属性值的数量
hincrby key field 1
//让指定属性增加1
hsetnx key field value
//当key不存在是新增key,存在时不执行
list(列表)

与java中的linkedlist类似,可以看做一个双向结构的链表

在这里插入图片描述

lpush key value
//从左边存
rpush key value
//从右边存
lpop key
//从头取出
rpop key
//从末尾取出
lrang key start stop 
//查看指定范围的值
blpop key 100 (如果没用这个key等待100s,如果有或者100s内这个key存在了则从左侧出)
brpop key 100
set

在这里插入图片描述

无序不重复

sadd key value1 value2
//添加元素的值可以一次性增加一个或多个
srem key value
//删除元素的值
smembers key 
//查看集合中所有元素
scard key
//查看集合中元素个数
sismember key member
//判断一个元素是否存在于set中
sinter key1 key2
//求key1和key2的交集
sdiff key1 key2
//求key1和key2的差集(key1和key2的差集就是key1有key2没有的元素)
sunion key1 key2 
//求key1和key2的并集(所有两个集合的元素)
zset(有序set)

在这里插入图片描述

可以排序的 不重复元素集合

在这里插入图片描述

zadd key 分数 值
//添加元素的值
zrem key 值
//删除元素的值
zscore key 值
//返回值的分数
zcard key
//查看集合中的元素

http://www.ppmy.cn/embedded/128895.html

相关文章

oracle数据库---基本查询(单表查询、多表查询、子查询、分页查询、oracle内置函数、行列转换、集合运算)

思维导图 单表查询 数据准备 -- 练习的表如果存在 请先删除 -- 如果不存在直接创建 drop table t_owners;--业主表 create table t_owners (id number primary key,name varchar2(30),addressid number,housenumber varchar2(30),watermeter varchar2(30),adddate date,owner…

深度解析 Redis 存储结构及其高效性背后的机制

目录 1. Redis 存储结构存储结构存储转换 2. 字典实现数据结构冲突处理负载因子 3. 扩容扩容步骤影响与优化 4. 缩容缩容步骤优化策略 5. 渐进式 Rehash**渐进式 Rehash 的工作原理**Rehash 规则优势 6. SCAN 命令SCAN 的实现原理遍历顺序避免重复和遗漏使用场景 7. 过期&#…

Java进阶——数据结构与算法之栈与递归小结(三)

文章大纲 引言一、栈的概述二、栈的实现1、栈的顺序实现与基本算法1.1、入栈(push)1.2、出栈 (pop) 2、栈的链式实现与基本算法1.1、入栈(push)和 出栈 (pop) 四、栈的应用1、逆波兰…

jmeter 对 dubbo 接口测试是怎么实现的?有哪几个步骤

目录 前言 一.先了解下 dubbo 的原理,最好自己搭建一个案例可参考以下方式搭建 http://09792bb8.wiz03.com/share/s/09uiKU3j2kR120MIpT2AdLm70pfBmE1zFApv2jiDZ01GhE8j 二.编写 dubbo 测试脚本 前言 最近使用工作中使用jmeter调用dubbo接口进行接口测试&#xf…

【windows】win10提示‘adb‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。

问题日志 adb devices adb 不是内部或外部命令,也不是可运行的程序或批处理文件 解决方案 下载adb,将adb放到如下目录 将 adb.exe AdbWinApi.dll AdbWinUsbApi.dll 文件放到以下目录 C:\Windows\SysWOW64 C:\Windows\System32 测试验证 adb An…

【Unity新闻】Unity 6 正式版发布

Unity CEO Matt Bromberg 在今天自豪地宣布,Unity 6 正式发布!作为迄今为止最强大和稳定的版本,Unity 6 为游戏和应用开发者提供了大量的新功能和工具,帮助他们加速开发并提升性能。 本次正式版是6.0000.0.23f1(LTS&a…

Python画笔案例-083 绘制 3D世界坐标轴

1、绘制 3D世界坐标轴 通过 python 的turtle 库绘制 3D世界坐标轴,如下图: 2、实现代码 绘制 3D世界坐标轴,以下为实现代码: """3D世界坐标轴.py3D世界的每一个点,最终都是在屏幕显示出来,而屏幕是2D的。所以这个3D点就需要转换成2D坐标点。 ""…

从0开始学Python-day8

Python函数 1. 定义一个函数 可以重复执行、可以重复调用的语句块 用于封装语句块, 提高代码的重用性。 函数是面向过程编程的最小单位 1.1 定义函数:def 语句 语法 def 函数名(形式参数列表):语句块 说明 函数名是一个变量,不要轻易对其赋值 函数有…