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加入浮点值
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章