Redis入门之Redis安装、配置及常用指令

NoSQL 引言

NoSQL(Not Only SQL),意思是 不仅仅是SQL,泛指 非关系型数据库。NoSQL 这个技术门类,早期就有人提出,发展至2009年趋势越发高涨。

NoSQL 数据库没有标准的查询语言(SQL),因此进行数据库查询需要制定数据模型,许多 NoSQL数据库都有 REST式的数据接口或者查询API。

为什么使用 NoSQL?

随着互联网网站的兴起,传统的关系数据库在应付动态网站,特别是超大规模和高并发的纯动态网站已经显得力不从心,暴露了很多难以克服的问题。如:商城网站中对商品数据频繁查询、对热搜商品的排行统计、订单超时问题、以及微信朋友圈(音频,视频)存储等相关需求 使用传统的关系型数据库实现就显得非常复杂,虽然能实现相应功能但是在性能上却不是那么乐观。NoSQL 这个技术门类的出现,更好的解决了这些问题,它告诉了世界不仅仅是SQL。

NoSQL 的四大分类(键值、列存储、文档、图形)

1、键值(Key-Value)存储数据库
这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。

  • Key-Value 模型对于IT系统来说的优势在于简单、易部署。
  • 但是如果 DBA 只对部分值进行查询或更新的时候,Key-Value就显得效率低下。

相关产品

  • Tokyo Cabinet/Tyrant,
  • Redis
  • SSDB
  • Voldemort
  • Oracle BDB

2、列存储数据库
这部分数据库通常是用来应对分布式存储的海量数据

特点:键仍然存在,但是它们的特点是指向了多个列。这些列是由列家族来安排的。

相关产品:Cassandra、HBase、Riak.

3、文档型数据库
文档型数据库的灵感是来自于 Lotus Notes 办公软件,而且它同第一种键值存储相类似,该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如JSON。文档型数据库可以看作是键值数据库的升级版,允许之间嵌套键值。而且文档型数据库比键值数据库的查询效率更高

特点:以文档形式存储;

相关产品:MongoDB、CouchDB、 MongoDb(4.x)、SequoiaDB(国产,已经开源)。

4、图形(Graph)数据库
图形结构的数据库同其他行列以及刚性结构的SQL数据库不同,它使用灵活的图形模型,并且能够扩展到多个服务器上。

相关产品:Neo4J、InfoGrid、 Infinite Graph

NoSQL 应用场景

  • 数据模型比较简单;
  • 需要灵活性更强的 IT 系统;
  • 对数据库性能要求较高
  • 不需要高度的数据一致性(事务的支持),性能要求高则说明允许数据有略微的偏差。

Redis 介绍

在这里插入图片描述

Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker.

Redis 开源、遵循BSD协议、基于内存数据存储,被用于作为 数据库、缓存、消息中间件
重点:Redis 是一个内存型的数据库


Redis 特点

  • Redis 是一个 高性能 key/value内存型数据库
  • Redis 拥有丰富的数据类型
  • Redis 支持持久化
  • Redis 单线程,单进程

Redis 安装 与 配置

环境准备:

  • vmware15.x+
  • centos7.x+

Redis 官网下载源码包:https://redis.io/

下载后上传到 Linux 中,解压缩文件:

tar -zxvf redis-4.0.10.tar.gz # 解压Redis源码包
ll # 查看当前文件目录

在这里插入图片描述
centos7 安装 gcc:

yum install -y gcc

进入解压缩目录执行如下命令:

make MALLOC=libc

编译完成后执行如下命令:

make install PREFIX=/usr/redis

进入 /usr/redis 目录启动 Redis 服务:

./redis-server

在这里插入图片描述
Redis服务端口默认:6379

再打开一个命令行,进入 bin 目录执行客户端连接操作:

./redis-cli –p 6379

Redis 启动服务的细节(加载配置启动)

注:直接使用 ./redis-server 方式启动使用的是 redis-server 这个 shell 脚本中默认配置;

如何在启动 Redis 时指定配置文件启动?
默认在redis安装完成之后再安装目录没有任何配置文件,需要在源码目录中复制 redis.conf 配置文件到安装目录;

cp redis.conf /usr/ redis

加载配置启动 Redis:

./redis-server ../redis.conf

修改 redis 默认端口号:

vi redis.conf # 修改里面 port 7000, 保存退出

开启 Redis 远程连接

默认 Redis 服务器没有开启远程连接,也就是默认拒绝所有远程客户端连接;

1、修改配置文件开启远程连接:

vim redis.conf # 修改配置文件

修改 bind 127.0.0.1bind 0.0.0.0,表示 允许一切客户端连接
在这里插入图片描述
2、修改配置后重启 Redis 服务:一定要加载配置文件启动!

./redis-server ../redis.conf

我使用的是 Redis Desktop Manager 连接 Linux 下的 Redis:

如果连接失败,关闭防火墙 后重新连接:

systemctl stop firewalld.service

Redis 端口占用(kill redis-server 进程)

启用 Redis 出现:

Creating Server TCP listening socket *:6379: bind: Address already in use

6379 地址已经在使用(6379是 Redis 默认的端口)

解决方法:找到 redis-server 的进程 kill 掉

ps -ef | grep -i redis

在这里插入图片描述

kill -9 2700

Redis 常用指令

数据库相关指令

Redis 库
库是 database 用来存放数据的一个基本单元,每个库都可以存放独立的 key-value 键值对,Redis 中每一个库都有一个唯一名称/编号,从 0 开始。

  • 默认库的个数:16 个(可以在配置文件中修改),库的编号:0 - 15,默认使用 0号库;
  • 切换库的命令:select dbid(库编号)

Redis 操作库的指令

  • 清空当前的库:FLUSHDB
  • 清空全部的库:FLUSHALL

Redis 客户端显示中文
启动 Redis 时后面添加:--raw

./redis-cli  -p 7000 --raw

Key 相关指令

DEL 指令

  • 语法 : DEL key [key ...]
  • 作用 : 删除给定的一个或多个 key,不存在的 key 会被忽略。
  • 可用版本: >= 1.0.0
  • 返回值: 被删除 key 的数量。

EXISTS 指令

  • 语法: EXISTS key
  • 作用: 检查给定 key 是否存在。
  • 可用版本: >= 1.0.0
  • 返回值: 若 key 存在,返回1 ,否则返回0。

EXPIRE 指令

  • 语法: EXPIRE key seconds
  • 作用: 为给定 key 设置生存时间(秒),当 key 过期时(生存时间为 0),它会被自动删除。
  • 可用版本: >= 1.0.0
  • 时间复杂度: O(1)
  • 返回值:设置成功返回 1 。

KEYS 指令

  • 语法 : KEYS pattern
  • 作用 : 查找所有符合给定模式 pattern 的 key 。
  • 语法:
    KEYS *:匹配数据库中所有 key 。
    KEYS h?llo:匹配 hello ,hallo 和 hxllo 等。
    KEYS h*llo:匹配 hllo 和 heeeeello 等。
    KEYS h[ae]llo: 匹配 hello 和 hallo ,但不匹配 hillo 。特殊符号用 \ 隔开
  • 可用版本: >= 1.0.0
  • 返回值: 符合给定模式的 key 列表。

MOVE 指令

  • 语法 : MOVE key db
  • 作用 : 将当前数据库的 key 移动到给定的数据库 db 当中。
  • 可用版本: >= 1.0.0
  • 返回值: 移动成功返回 1 ,失败则返回 0 。

PEXPIRE 指令

  • 语法 : PEXPIRE key milliseconds
  • 作用 : 这个命令和 EXPIRE 命令的作用类似,但是它以 毫秒 为单位设置 key 的生存时间
    EXPIRE 以秒为单位)
  • 可用版本: >= 2.6.0
  • 时间复杂度: O(1)
  • 返回值:设置成功,返回1。key 不存在或设置失败,返回0

PEXPIREAT 指令

  • 语法 : PEXPIREAT key milliseconds-timestamp
  • 作用 : 这个命令和 EXPIREAT 命令类似,但它以 毫秒 为单位设置 key 的过期 unix 时间戳(EXPIREAT 以秒为单位)
  • 可用版本: >= 2.6.0
  • 返回值:如果生存时间设置成功,返回 1 。当 key 不存在或没办法设置生存时间时,返回 0 。
    (查看EXPIRE 命令获取更多信息)

TTL 指令

  • 语法 : TTL key
  • 作用 : 以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。
  • 可用版本: >= 1.0.0
  • 返回值:
    当 key 不存在时,返回 -2 。
    当 key 存在但没有设置剩余生存时间时,返回 -1 。
    否则,以秒为单位,返回 key 的剩余生存时间。
  • Note : Redis 2.8 以前,当 key 不存在,或者 key 没有设置剩余生存时间时,命令都返回 -1 。

PTTL 指令

  • 语法 : PTTL key
  • 作用 : 这个命令类似于 TTL 命令,但它以毫秒为单位返回 key 的剩余生存时间
    (TTL 以秒为单位)
  • 可用版本: >= 2.6.0
  • 返回值: 当 key 不存在时,返回 -2 。当 key 存在但没有设置剩余生存时间时,返回 -1 。
  • 否则,以毫秒为单位,返回 key 的剩余生存时间。
  • 注意 : Redis 2.8 以前,当 key 不存在,或者 key 没有设置剩余生存时间时,命令都返回 -1 。

RANDOMKEY 指令

  • 语法 : RANDOMKEY
  • 作用 : 从当前数据库中随机返回(不删除) 一个 key 。
  • 可用版本: >= 1.0.0
  • 返回值:当数据库不为空时,返回一个 key 。当数据库为空时,返回 nil

RENAME 指令

  • 语法 : RENAME key newkey
  • 作用 : 将 key 改名为 newkey 。
    当 key 和 newkey 相同,或者 key 不存在时,返回一个错误。
    当 newkey 已经存在时,RENAME 命令将覆盖旧值。
  • 可用版本: >= 1.0.0
  • 返回值: 改名成功时提示OK ,失败时候返回一个错误。

TYPE 指令

  • 语法 : TYPE key
  • 作用 : 返回 key 所储存的值的类型。
  • 可用版本: >= 1.0.0
  • 返回值:
    none:key 不存在
    string:字符串
    list:列表
    set:集合
    zset:有序集
    hash:哈希表

String 类型

内存存储模型:
在这里插入图片描述

命令说明
set设置一个 key/value
get根据 key 获得对应的 value
mset一次设置多个 key value
mget一次获得多个 key 的 value
getset获得原始 key 的值,同时设置新值
strlen获得对应 key 存储 value 的长度
append为对应 key 的 value 追加内容
getrange 索引0开始截取 value 的内容
setex设置一个 key 存活的有效期(秒)
psetex设置一个 key 存活的有效期(毫秒)
setnx存在不做任何操作,不存在添加
msetnx 原子操作(只要有一个存在不做任何操作)可以同时设置多个 key,只要有一个存在都不保存
decr进行数值类型的 -1 操作
decrby根据提供的数据进行减法操作
incr进行数值类型的 +1 操作
incrby根据提供的数据进行加法操作
incrbyfloat根据提供的数据加入浮点数

List 类型

List 列表 相当于 Java 中的 List 集合,特点:元素有序 且 可以重复
在这里插入图片描述

命令说明
lpush将某个值加入到一个key列表头部
lpushx同lpush,但是必须要保证这个key存在
rpush将某个值加入到一个key列表末尾
rpushx同rpush,但是必须要保证这个key存在
lpop返回和移除列表左边的第一个元素
rpop返回和移除列表右边的第一个元素
lrange获取某一个下标区间内的元素
llen获取列表元素个数
lset设置某一个指定索引的值(索引必须存在)
lindex获取某一个指定索引位置的元素
lrem删除重复元素
ltrim保留列表中特定区间内的元素
linsert在某一个元素之前,之后插入新元素

Set 类型

特点:Set 类型 相当于Java 中的 Set 集合;特点:元素无序、不可以重复;
在这里插入图片描述

命令说明
sadd为集合添加元素
smembers显示集合中所有元素 无序
scard返回集合中元素的个数
spop随机返回一个元素 并将元素在集合中删除
smove从一个集合中向另一个集合移动元素 必须是同一种类型
srem从集合中删除一个元素
sismember判断一个集合中是否含有这个元素
srandmember随机返回元素
sdiff去掉第一个集合中其它集合含有的相同元素
sinter求交集
sunion求和集

ZSet 类型

特点:可排序的 Set 集合,不可重复;
在这里插入图片描述

命令说明
zadd添加一个有序集合元素
zcard返回集合的元素个数
zrange 升序 zrevrange 降序返回一个范围内的元素
zrangebyscore按照分数查找一个范围内的元素
zrank返回排名
zrevrank倒序排名
zscore显示某一个元素的分数
zrem移除某一个元素
zincrby给某个特定元素加分

Hash 类型

特点:value 是一个 map 结构,存在 key、value,key 是无序的;
在这里插入图片描述

命令说明
hset设置一个 key/value 对
hget获得一个 key 对应的 value
hgetall获得所有的 key/value 对
hdel删除某一个 key/value 对
hexists判断一个 key 是否存在
hkeys获得所有的 key
hvals获得所有的 value
hmset设置多个 key/value
hmget获得多个 key 的 value
hsetnx设置一个不存在的 key 的值
hincrby为 value 进行加法运算
hincrbyfloat为 value 加入浮点值
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萌宅鹿同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值