Redis入门

一、Redis的安装

Redis的官方文档介绍了多种安装方式(包括Linux、Windows、MacOs平台上的安装和从源码包安装):Redis安装。这里只介绍源码安装方式。

  • 下载源码包

    $ wget https://download.redis.io/redis-stable.tar.gz
    
  • 编译Redis

    $ tar -xzvf redis-stable.tar.gz
    $ cd redis-stable
    $ ./configure prefix=/usr/local/bin/redis   # 指定安装目录为/usr/local/bin/redis
    $ make distclean && make
    $ make test
    

    如果编译成功,将会在src目录下生成两个二进制文件

    • redis-server: Redis Server启动程序
    • redis-cli:Redis 客户端连接工具
  • 安装Redis到**/usr/local/bin/redis**(默认安装到/usr/local)

    $ make install
    

    安装成功后将会在**/usr/local/bin/redis**下有一个bin文件夹:

在这里插入图片描述

  • 修改Redis启动方式为后台启动

    将源码包中的redis.conf复制到安装路径/usr/local/bin/redis/

    $ cp /usr/local/src/redis-stable/redis.conf /usr/local/bin/redis/
    

    修改daemonize为yes

    在这里插入图片描述

  • 启动redis

    $ ./bin/redis-server ./redis.conf
    
  • 配置Redis其他机器可以连接本机Redis服务

    $ vim ./redis.conf
    
    protected-mode no
    bind 0.0.0.0
    
  • 停止Redis服务

    $ redis-cli shutdown
    

二、Redis支持的数据类型

  • 字符串(String)
  • 列表(list)
  • 有序列表(sorted set)
  • 哈希(hash)
  • 集合(set)
1. 字符串(String)

默认设置下String的值最大不能超过512M。

基础使用

> set bike:1 Deimos
> get bike:1

同时设置和获取多个值

> mset bike:1 "Deimos" bike:2 "Ares" bike:3 "Vanth"
> mget bike:1 bike:2 bike:3

字符串计数

> set total_crashes 0
> incr total_crashes
(integer) 1
> incrby total_crashes 10
(integer) 11
2.哈希(hash)
> hset bike:1 model Deimos brand Ergonom type 'Enduro bikes' price 4972
(integer) 4
> hget bike:1 model
"Deimos"
> hget bike:1 price
"4972"
> hgetall bike:1
1) "model"
2) "Deimos"
3) "brand"
4) "Ergonom"
5) "type"
6) "Enduro bikes"
7) "price"
8) "4972"

hmget

> hmget bike:1 model price no-such-field
1) "Deimos"
2) "4972"
3) (nil)

hincryby

> hincrby bike:1 price 100
(integer) 5072
> hincrby bike:1 price -100
(integer) 4972
3.列表(list)

Redis list是一个链表结构

LPUSH从链表头部添加元素,RPUSH从链表尾部添加元素

LPOP从链表头部弹出元素,RPOP从链表尾部弹出元素

先进先出

> LPUSH work:queue:ids 101
(integer) 1
> LPUSH work:queue:ids 237
(integer) 2
> RPOP work:queue:ids
"101"
> RPOP work:queue:ids
"237"

后进先出

> LPUSH work:queue:ids 101
(integer) 1
> LPUSH work:queue:ids 237
(integer) 2
> LPOP work:queue:ids
"237"
> LPOP work:queue:ids
"101"

LLEN检查链表长度

> LLEN work:queue:ids
(integer) 0

LTRIM只保留指定区间的元素,其他的元素将会被删除

> LPUSH notifications:user:1 "You've got mail!"
(integer) 1
> LTRIM notifications:user:1 0 99
OK
> LPUSH notifications:user:1 "Your package will be delivered at 12:01 today."
(integer) 2
> LTRIM notifications:user:1 0 99
OK

LMOVE将一个链表的头部(尾部)元素删除并添加到另外一个链表的头部(或尾部)

LMOVE source destination LEFT|RIGHT LEFT|RIGHT中第一个LEFT|RIGHT指定从头部还是尾部删除,第二个LEFT|RIGHT指定从尾部还是头部添加。

> LPUSH board:todo:ids 101
(integer) 1
> LPUSH board:todo:ids 273
(integer) 2
> LMOVE board:todo:ids board:in-progress:ids LEFT LEFT
"273"
> LRANGE board:todo:ids 0 -1
1) "101"
> LRANGE board:in-progress:ids 0 -1
1) "273"
4.集合(Set)

Set中不允许出现重复的元素

SADD添加元素

> SADD user:123:favorites 347
(integer) 1
> SADD user:123:favorites 561
(integer) 1
> SADD user:123:favorites 742
(integer) 1
> SADD user:456:favorites 561
(integer) 1

SISMEMBER判断Set是否有指定元素

> SISMEMBER user:123:favorites 742
(integer) 1
> SISMEMBER user:123:favorites 299
(integer) 0

SINTER返回两个或多个Set中共同存在的元素(交集)

> SINTER user:123:favorites user:456:favorites
1) "561"

SCARD返回Set的元素个数

> SCARD user:123:favorites
(integer) 3

SMEMBERS查看Set的成员列表

> sadd myset 1 2 3
(integer) 3
> smembers myset
1. 3
2. 1
3. 2

SREM从Set中删除指定元素

> srem myset 1

SUNIONSTORE计算两个集合的并集并存储到另外一个集合中,如果另外一个集合存在则覆盖

> sunionstore game:1:deck deck
5. 有序集合(Sorted Set)

ZADD添加元素

> zadd mysort 70 a 80 b 90 c
(integer) 3

ZSCORE获取指定成员的分数

> zscore mysort a
"70"

ZCARD成员列表个数

> zcard mysort
(integer) 3

ZRANGE指定范围的成员列表(按分数从小到大排序)

> zrange mysort 0 -1
1) "a"
2) "b"
3) "c"

ZREVRANGE指定范围的成员列表(按分数从大到小排序)

> zrevrange mysort 0 -1
1) "c"
2) "b"
3) "a"

ZINCRBY增加指定成员的分数

> zincrby mysort 10 10
"80"

三、key通用操作

1.keys

查找所有符合给定模式 pattern的 key,若 key 存在返回 1 ,否则返回 0 。

> keys *
2.exsists

检查给定 key 是否存在

> exists mykey
(integer) 0
3.get

获取指定 key 的值。如果 key 不存在,返回 nil 。如果key 储存的值不是字符串类型,返回一个错误。

> get mykey
4. rename

修改 key 的名字为 newkey 。若key 不存在返回错误。

> RENAME mykey 1
"OK"
5. expire

设置 key 的过期时间,key 过期后将不再可用。单位以秒计。

> expire mykey 60
6. del

删除已存在的键。不存在的 key 会被忽略。

> DEL mykey

四、事务

Redis事务中的所有命令将会串行化执行,并且执行事务中的命令是Redis不会再执行其他的任何命令。

multi开启事务,multi后面执行的命令将会在一个事务中执行,直到执行exec或者discard(exec提交事务,discard回滚事务)。

> multi
> ... # 执行多个命令
> exec

五、Redis持久化

1. RDB持久化

默认支持的持久化方式,是把当前内存中的数据集快照写入磁盘,也就是 Snapshot 快照(数据库中所有键值对数据)。恢复时是将快照文件直接读到内存里。

备份时间配置

# Save the DB to disk.
#
# save <seconds> <changes> [<seconds> <changes> ...]

# Snapshotting can be completely disabled with a single empty string argument
# as in following example:
# 禁用rdb持久化
# save ""
#
#
# Unless specified otherwise, by default Redis will save the DB:
#   * After 3600 seconds (an hour) if at least 1 change was performed
#   * After 300 seconds (5 minutes) if at least 100 changes were performed
#   * After 60 seconds if at least 10000 changes were performed
# 启用rdb持久化  3600秒后,如果至少有一个命令执行,则备份;300秒后,如果至少有100个命令执行则备份;60秒后,如果至少有10000个命令执行则备份
save 3600 1 300 100 60 10000

备份文件配置

# The filename where to dump the DB  备份文件名
dbfilename dump.rdb

# Remove RDB files used by replication in instances without persistence
# enabled. By default this option is disabled, however there are environments
# where for regulations or other security concerns, RDB files persisted on
# disk by masters in order to feed replicas, or stored on disk by replicas
# in order to load them for the initial synchronization, should be deleted
# ASAP. Note that this option ONLY WORKS in instances that have both AOF
# and RDB persistence disabled, otherwise is completely ignored.
#
# An alternative (and sometimes better) way to obtain the same effect is
# to use diskless replication on both master and replicas instances. However
# in the case of replicas, diskless is not always an option.
rdb-del-sync-files no

# The working directory.
#
# The DB will be written inside this directory, with the filename specified
# above using the 'dbfilename' configuration directive.
#
# The Append Only File will also be created inside this directory.
#
# Note that you must specify a directory here, not a file name.  备份文件dump.rdb存储位置
dir ./
2. AOF持久化

默认不启用,需要手动开启,通过保存Redis服务器所执行的写命令来记录数据库状态。

开启aof持久化

appendonly yes 
appendfilename "appendonly.aof"
appenddirname "appendonlydir"
# appendfsync always 每次修改都记录
# 每秒记录
appendfsync everysec  
# appendfsync no 不记录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/50803.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux下进程特性总结:工作目录,环境变量,标准输出转命令行参数,O_CLOEXEC标志作用,读写锁控制进程互斥

进程是运行中的程序&#xff0c;是资源分配的最小单位&#xff0c;其有一些特性对于实际开发很有帮助&#xff0c;本篇博客将进程的相关特性进行梳理总结&#xff0c;包含工作目录&#xff0c;环境变量&#xff0c;标准输出转命令行参数&#xff0c;读写锁控制进程互斥。 目录…

MyBatis学习笔记之缓存

文章目录 一级缓存一级缓存失效 二级缓存二级缓存失效二级缓存相关配置 MyBatis集成EhCache 缓存&#xff1a;cache 缓存的作用&#xff1a;通过减少IO的方式&#xff0c;来提高程序的执行效率 mybatis的缓存&#xff1a;将select语句的查询结果放到缓存&#xff08;内存&…

Pytorch深度学习-----神经网络的卷积操作

系列文章目录 PyTorch深度学习——Anaconda和PyTorch安装 Pytorch深度学习-----数据模块Dataset类 Pytorch深度学习------TensorBoard的使用 Pytorch深度学习------Torchvision中Transforms的使用&#xff08;ToTensor&#xff0c;Normalize&#xff0c;Resize &#xff0c;Co…

IDEA将本地项目上传到码云

一、创建本地仓库并关联 用IDEA打开项目&#xff0c;在菜单栏点击vcs->create git repository创建本地仓库&#xff0c; 选择当前项目所在的文件夹当作仓库目录。 二、将项目提交本地仓库 项目名右键就会出现“GIT”这个选项->Add->Commit Directory, 先将项目add…

【嵌入式学习笔记】嵌入式基础11——STM32常用轮子(SYSTEM)

1.deley文件夹介绍 1.1.delay文件夹介绍 函数名函数功能OSdelay_osschedlockus级延时时,关闭任务调度(防止打断us级延迟)OSdelay_osschedunlockus级延时时,恢复任务调度OSdelay_ostimedlyus级延时时,恢复任务调度OSSysTick_Handlersystick中断服务函数OSdelay_init初始化延迟…

【学习笔记】关于图像YUV格式分类和排布方式的全学习

这里是尼德兰的喵学习笔记相关文章&#xff0c;欢迎您的访问&#xff01; 如果文章对您有所帮助&#xff0c;期待您的点赞收藏 让我们一起为芯片前端全栈工程师而努力 目录 前言 YUV格式导图 YUV444 packed planar I444 YV24 semi-planar NV24 NV42 YUV422 packed …

c++静态代码扫描工具clang-tidy详细介绍

clang-tidy 文章目录 clang-tidy1. 什么是clang-tidy2. clang-tidy可以解决什么问题3. 工作原理4. 如何使用clang-tidy4. 总结5. 举例说明&#xff1a; 1. 什么是clang-tidy Clang-Tidy是一个由LLVM项目提供的开源工具&#xff0c;是一个静态分析工具&#xff0c;用于进行静态…

【雕爷学编程】MicroPython动手做(15)——掌控板之AB按键3

知识点&#xff1a;什么是掌控板&#xff1f; 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片&#xff0c;支持WiFi和蓝牙双模通信&#xff0c;可作为物联网节点&#xff0c;实现物联网应用。同时掌控板上集成了OLED…

win10日程怎么同步到安卓手机?电脑日程同步到手机方法

在如今快节奏的生活中&#xff0c;高效地管理时间变得至关重要。而对于那些经常在电脑上安排日程的人来说&#xff0c;将这些重要的事务同步到手机上成为了一个迫切的需求。因为目前国内使用win10系统电脑、安卓手机的用户较多&#xff0c;所以越来越多的职场人士想要知道&…

macos下安装john the ripper并配置zip2john+破解加密zip文件

为了破解加密的zip文件&#xff0c;需要用到john进行爆破密码。 1、首先使用homebrew安装john&#xff0c;可以安装它的增强版john-jumbo: brew install john-jumbo 2、安装后可以使用 john 命令验证&#xff1a; john 3、配置zip2john的环境——.zshrc下&#xff0c;&#x…

HashMap查找

文章目录 1 哈希表的基本概念1.1 两个例子1.2 如何查找1.3 若干术语 2 哈希函数的构造方法2.1 直接定址法2.2 除留余数法 3 处理冲突的方法3.1 开放地址法3.1.1 线性探测法3.1.2 二次探测法3.1.3 伪随机探测法 3.2 链地址法&#xff08;拉链法&#xff09;3.2.1 创建步骤3.2.2 …

C#..上位机软件的未来是什么?

C#是一种流行的编程语言&#xff0c;广泛应用于桌面应用程序和上位机软件开发。未来&#xff0c;C#上位机软件将继续不断发展和创新&#xff0c;以满足用户日益增长的需求。以下是我认为C#上位机软件未来可能会涉及的一些方向&#xff1a; 更加智能化&#xff1a;随着人工智能…

idea连接远程服务器上传war包文件

idea连接远程服务器&上传war包 文章目录 idea连接远程服务器&上传war包1. 连接服务器2.上传war包 1. 连接服务器 选择Tools -> Start SSH Session 添加配置 连接成功 2.上传war包 Tools -> Deployment -> Browse Remote Host 点击右侧标签&#xff0c;点击&…

Manjaro KDE 22.1.3vmware无法复制文件

Wayland 是 X11 的现代替代品&#xff0c;几十年来 X11 一直是 Linux 上的默认窗口系统。 Wayland 是一种通信协议&#xff0c;定义 X Window 显示服务器和客户端应用程序之间的消息传递。 软件还不兼容 使用X11即可

linux查看服务器系统版本命令

有时我们需要在linux服务器上安装DB、Middleware等&#xff0c;为了保证兼容性&#xff0c;我们需要知晓被提供的linux服务器版本是否满足需求&#xff0c;下面就说一说linux查看服务器系统版本命令。 1.cat /etc/redhat-release 适用于&#xff1a;rhel/centos等 2.cat /etc…

java static修饰的静态成员

静态成员 特点&#xff1a; 1.静态成员可以被本类所有对象共享2.静态成员可以通过类名调用也可以推荐对象调用&#xff0c;但是推荐使用类名调用&#xff01;3.静态成员随着类的加载而加载&#xff0c;优先于对象存在的静态方法的注意事项&#xff1a; 1.非静态方法可以访问任…

大数据Flink(四十九):框架版本介绍和编程语言选择

文章目录 框架版本介绍和编程语言选择 一、框架版本介绍 二、编程语言选择 框架版本介绍和编程语言选择

1-Linux的目录结构

Linux的目录结构是规定好的&#xff0c;不可以随意进行更改&#xff01; Linux的文件系统是采用级层式的树状目录结构&#xff0c;最上层是根目录–/&#xff0c;然后再在根目录下创建其它的目录。 各个目录中主要负责的功能和作用如下&#xff1a;&#xff08;主体的结构一定…

Cisco 路由器配置管理

大多数网络中断的最常见原因是错误的配置更改。对网络设备配置的每一次更改都伴随着造成网络中断、安全问题甚至性能下降的风险。计划外更改使网络容易受到意外中断的影响。 Network Configuration Manager 网络更改和配置管理 &#xff08;NCCM&#xff09;解决方案&#xff…

springboot编写mp4视频播放接口

简单粗暴方式 直接读取指定文件&#xff0c;用文件流读取视频文件&#xff0c;输出到响应中 GetMapping("/display1/{fileName}")public void displayMp41(HttpServletRequest request, HttpServletResponse response,PathVariable("fileName") String fi…