(NoSQL)02_Redis(上)

02_Redis(上)

一、Redis环境准备

1.1 安装c语言的编译环境

yum install gcc-c++

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

1.2. 安装redis

  1. 使用xftp将redis5.0.5.tar.gz 上传到linxu的/opt/soft目录下
    在这里插入图片描述
  2. 解压 将redis的压缩包解压到上传目录
[root@localhost soft]# tar -zxvf redis-5.0.5.t
  1. 将解压的 包移动到/usr/local
# mv redis-5.0.5 /usr/local 
  1. 对解压之后的文件进行重命名
[root@localhost local]# mv redis-5.0.5/ redis5
  1. 编译安装 将.c文件编译为.o文件
[root@localhost local]# cd redis5/
[root@localhost redis5]# make  install

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

  1. 进入/usr/local/bin目录在这里插入图片描述
    此时在bin目录中出现以上redis开头的可执行命令
    redis-cli --命令行客户端
    redis-server – redis服务器的启动命令

  2. 在/usr/local新建一个目录 redisconf 将/usr/local/redis5/redis.conf 拷贝一份到redisconf目录中
    在这里插入图片描述

[root@localhost local]# cp redis5/redis.conf  redisconf/
  1. 启动redis服务端-- 前端启动模式
[root@localhost local]# ./bin/redis-server 

在这里插入图片描述

  1. 复制一个当前会话窗口
    在这里插入图片描述
  2. 启动客户端
./bin/redis-cli -h ip地址 -p 端口   #-h可省略 省略表示连接的是本机

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

  1. 退出客户端
    在这里插入图片描述
  2. reids 服务端的关闭
    方式一:强制关闭(非法关闭)
客户端中输入:kill -9 PID

在这里插入图片描述
在这里插入图片描述
方式二: 正常关闭

客户端中舒服:shutdown

在这里插入图片描述

  1. redis服务的后端启动模式在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  2. 在当前窗口来连接redis服务
    在这里插入图片描述
  3. 查看redis服务进程
    在这里插入图片描述

二、redis的可视化客户端:redis-desktop-manager

2.1、下载 Redis Desktop Manager

官网下载: https://redisdesktop.com/download
github地址: https://github.com/uglide/RedisDesktopManager/releases

扫描二维码关注公众号,回复: 10419795 查看本文章

这个是安装在windowns操作系统上的
安装方式 一路next

2.2. redis服务端的配置

编辑redisconf/redis.conf
在这里插入图片描述
注意一点: 将虚拟机的防火墙关闭
服务端创建连接:
在这里插入图片描述
可视化客户端创建连接:
在这里插入图片描述

三、redis的基础知识

3.1. 查看数据库

在redis下 默认有16个库
在这里插入图片描述
在这里插入图片描述

3.2.切换数据库

在这里插入图片描述

3.3. 数据库相关命令

在这里插入图片描述

3.4. 所有库都是用统一的密码管理 16 库都是一样的密码

3.5. 在redis中 所有的索引都是从0 开始

四、redis的五大数据类型

在redis中的数据都是以键值对的形式存在 所有的值都是String key有五种类型

  1. String 字符串
  2. List 列表
    类似于java中的数组 List 在list 中所以的元素都是string类型 可重复 插入有序
  3. hash 哈希
    又称为散列 类似于java中的map
  4. set 集合
    类似于java中的set 不可重复 插入无序
  5. zset 有序集合
    类似于hash 只是在value中多了一个属性 score 排序是根据socre

五、String

5.1. 读写操作

:set key value 
读:get key

在这里插入图片描述

5.2. 查看所有key以及删除

127.0.0.1:6379> keys * # 查看所有的key
127.0.0.1:6379> del hello

在这里插入图片描述

5.3. 一次写入多个键值对

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

5.4. 自增自减命令

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
自增可以增加整数和浮点数 自减 只能自减整数

5.5. 字符串操作命令

5.5.1. 修改key的 value ——对已有的key 进行再次的set 就可以覆盖原来的value

在这里插入图片描述

5.5.2. 追加value

在这里插入图片描述

5.5.3. 获取子字符串

8.

5.5.4.替换字串

在这里插入图片描述

5.6. 二进制位相关命令

redis中数据存储都是以二进制存储 redis可以对其进行二进制位的操作
在钉钉中发送一条信息 信息的两种状态:已读和未读
消息的描述:u_id msg_id 消息的接收者(rec_id)
数据的形式:u_id:msg_id rec_id
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.7. getset(先查询,后赋值)

8.
在这里插入图片描述

redis中文网站:http://www.redis.cn/commands.html#string

六、列表(List)

6.1.推入弹出数据

推入
在这里插入图片描述
弹出
在这里插入图片描述

6.2. 获取列表中指定位置的元素

在这里插入图片描述

6.3. 保留给定范围的元素

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

七、hash 哈希

7.1. 写入

在这里插入图片描述

7.2. 获取hash类型的值

在这里插入图片描述

7.3. 获取hash的键值对的数量

在这里插入图片描述

7.4 获取hash中的所有的值

在这里插入图片描述

7.5. 返回hash里面field是否存在

在这里插入图片描述

7.6 删除一个或多个field

在这里插入图片描述

7.7. 获取所有hash的field

在这里插入图片描述

7.8 获取所有的value

在这里插入图片描述

7.9.增加 key 指定的哈希集中指定字段的数值

在这里插入图片描述
如果增长的字段不存在 则创建该字段 并赋值
在这里插入图片描述

如果key不存在 也会将该key创建 并赋值
在这里插入图片描述
在这里插入图片描述

八、set 集合

以无序的方式 存储不可重复的元素

8.1. 读写

在这里插入图片描述
重复的元素不能重复写入

8.2. 获取集合中的所有元素

在这里插入图片描述

8.3. 判断集合中是否包含某一个元素

在这里插入图片描述
如果存在 则返回1 否则返回0

8.4. 返回集合中的元素的数量

在这里插入图片描述

8.5. 从集合中随机返回一个元素

在这里插入图片描述

8.6 从集合中移除元素

在这里插入图片描述
依次移除多个元素 并且集合是允许为空的
在这里插入图片描述
在这里插入图片描述

九、有序集合(zset)

9.1 读写

在这里插入图片描述

9.2. 获取集合的数量

在这里插入图片描述

9.3. 返回元素在集合中的顺序

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

9.4. 返回成员在集合中的score

在这里插入图片描述

9.5. 返回一定返回的成员

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

9.6. 分数范围的元素个数。

9.7 为特定的成员增加分数值

在这里插入图片描述

9.8. 删除指定的成员

在这里插入图片描述

9.9. 返回并删除最大和最小的成员

在这里插入图片描述
在所有的命令中 凡是带pop的 都是返回并删除
在这里插入图片描述

十、redis的事务

可以依次执行多条命令 本质 一组命令的集合。
MULTI 、 EXEC 、 DISCARDWATCH 是 Redis 事务相关的命令。事务可以一次执行多个命令, 并且带有以下两个重要的保证:

  1. 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
  2. 事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。

10.1.执行事务

在这里插入图片描述

10.2. 取消事务

在这里插入图片描述

10.3. 错误对事务的影响

当事务中的命令出现命令行错误时
在这里插入图片描述
此时当事务执行时 所有的命令都不会被执行。事务具有原子性 要么都执行 要么都不执行。
连坐制度
当事务中的命令在执行时出错
在这里插入图片描述
在这里插入图片描述

10.4 使用watch监视

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

十一、事务的总结:

11.1. 三个阶段:

  1. 开启事务
  2. 入队:将多个命令入队到事务中
  3. 执行事务 使用exec 命令来触发事务的执行
    在这里插入图片描述

11.2. redis的事务的特性

  1. 如果在执行exec之前 事务中断了 那么此时所有的命令都不会执行
  2. 如果某个命令语法错误 不仅会导致命令入队失败 整个事务都是无法执行的
  3. 如果执行exec命令之后 那么队列中的所有命令都会按顺序执行
  4. 当redis在执行命令时,如果出现了错误,那么redis不会终止 其他命令的执行,而是错误命令不会执行,其他命令依然可以正常执行。这是与关系型数据库最大的一点区别 不会因为某个命令的执行失败 而回滚整个事务。

11.3 redis的事务的缺陷

  1. 不满足原子性
    当事务在执行过程中,可以允许其他的客户端修改处于事务中的key
  2. 后执行的命令无法依赖于先执行命令的结果
    redis中所有的命令都是相互独立的 在使用exec之前 那么所有的命令都不会执行
  3. 事务中的命令都会于redis数据库进行交互
    每一条命令 在入队或执行时 都会产生客户端于服务端的交互。

11.4 redis事务缺陷的解决方案

  1. Lua 是一个小巧的脚本语言,有标准 C 编写,几乎在所有操作系统和平台上都可以编译运行
  2. 一个完整的Lua解释器不过200k,在目前所有脚本引擎中,Lua的速度是最快的,这一切都决定了Lua是作为嵌入式脚本的最佳选择
  3. redis 2.6版本之后也内嵌了一个 Lua 解释器,可以用于一些简单的事务与逻辑运算

11.4.1.Redis 内嵌 Lua 的优势

在服务端实现业务逻辑

  1. 按照我们上面介绍的,redis 事务执行中,每一条指令之间是相互独立的,我们无法让后面的操作依赖前面命名的结果,这就让整个事务仅仅成为了一个命令集合,在命令之间我们完全无法做任何事
  2. 但是,Lua 作为一个脚本语言,可以拥有分支、循环等语法结构,可以进行业务逻辑的编写
    原子性
  3. 由于 Lua 脚本是提交到 Redis server 进行一次性执行的,整个执行过程,其它任何脚本或者命令都无法执行,也就不会引起竞争条件,从而本身就实现了事务的原子性
  4. 但是,这同样会引起一个问题,正如官方文档所说的,正是由于 script 执行的原子性,所以我们不要在 script 中执行过长开销的程序,否则会验证影响其它请求的执行
    可复用
    所有 Lua 脚本都是可重用的,这样就减少了网络开销

11.4.2.基本用法

立即执行的lua脚本
在这里插入图片描述

redis.call()
redis.pcall()

redis.call() 与 redis.pcall()很类似, 他们唯一的区别是当redis命令执行结果返回错误时, redis.call()将返回给调用者一个错误,而redis.pcall()会将捕获的错误以Lua表的形式返回
在这里插入图片描述
在这里插入图片描述

11.4.3.预加载的lua脚本

将脚本 script 添加到脚本缓存中,但并不立即执行该脚本。在脚本被加入到缓存之后,通过 EVALSHA 命令,可以使用脚本的 SHA1 校验和来调用这个脚本。 EVAL 命令也会将脚本添加到脚本缓存中,但是它会立即对输入的脚本进行求值。
脚本可以在缓存中保留无限长的时间(直到执行 SCRIPT FLUSH 为止) 如果给定的脚本已经在缓存里面了,那么不做动作。

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

11.4.4.实际应用:

可以将lua脚本 保存在脚本文件中
将来执行的时 直接运行该脚本文件就可以了 这样可以方便于对脚本的编辑
案例: 活跃用户的判断:判断一个用户是否时活跃用户,如果符合标准 则活跃用户人数+1
在这里插入图片描述
将脚本本存在/usr/local目录下
需要在客户端手动创建一个key
在这里插入图片描述
在这里插入图片描述

发布了67 篇原创文章 · 获赞 6 · 访问量 1912

猜你喜欢

转载自blog.csdn.net/weixin_45801537/article/details/104926274
今日推荐