Redis入门

  • NoSQL 引言
    • 为什么使用 NoSQL?
    • NoSQL 的四大分类(键值、列存储、文档、图形)
    • NoSQL 应用场景
  • Redis 介绍
  • Redis 安装 与 配置
    • Redis 启动服务的细节(加载配置启动)
    • 开启 Redis 远程连接
    • Redis 端口占用(kill redis-server 进程)
  • Redis 常用指令
    • 数据库相关指令
    • Key 相关指令
    • String 类型
    • List 类型
    • Set 类型
    • ZSet 类型
    • Hash 类型

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 加入浮点值

Redis入门之Redis安装、配置及常用指令相关推荐

  1. 超详细Redis入门教程——Redis 的安装与配置

    前言 本文小新为大家带来 超详细Redis入门教程--Redis 的安装与配置 相关知识,具体内容包括Redis 的安装,连接前的配置,Redis 客户端分类(包括:命令行客户端,图形界面客户端,Ja ...

  2. Redis入门篇(安装与启动)

    Redis入门篇(安装与启动) 一.Redis介绍 Redis是NoSql的一种,在弄清楚Redis是个什么玩意之前,先了解下NoSql是什么. 1.什么是NoSql NoSql,全名:Not Onl ...

  3. redis cluster 集群 安装 配置 详解

    redis cluster 集群 安装 配置 详解 张映 发表于 2015-05-01 分类目录: nosql 标签:cluster, redis, 安装, 配置, 集群 Redis 集群是一个提供在 ...

  4. Linux搭建waf防火墙,Linux入门教程:nginx安装配置naxsi waf防火墙,nginxwaf Naxsi 不依赖...

    Linux入门教程:nginx安装配置naxsi waf防火墙,nginxwaf Naxsi 不依赖 Naxsi 是第三方 nginx 模块 ,它和 Modsecurity 都是开源 WAF ,但是它 ...

  5. 超详细Redis入门教程——Redis命令(下)

    前言 本文小新为大家带来 超详细Redis入门教程--Redis命令 相关知识,具体内容包括简单动态字符串 SDS,集合的底层实现原理,BitMap 操作命令,HyperLogLog 操作命令,Geo ...

  6. 超详细Redis入门教程——Redis命令(上)

    前言 本文小新为大家带来 超详细Redis入门教程--Redis命令(上) 相关知识,具体内容包括Redis 基本命令,Key 操作命令,String 型 Value 操作命令,Hash 型 Valu ...

  7. 超详细Redis入门教程——Redis概述

    前言 本文小新为大家带来 超详细Redis入门教程--Redis概述 相关知识,具体内容包括Redis简介,Redis的用途,Redis的特性,Redis的IO模型(包括:单线程模型,混合线程模型,多 ...

  8. mysql 开源入门_入门教程:安装配置新版MySQL 8开源数据库

    原标题:入门教程:安装配置新版MySQL 8开源数据库 [ 来自IT168] [IT168 技术]MySQL是现代应用程序编程堆栈中常见的数据库管理系统.如果您想要一个适用于您应用程序的,便于利用丰富 ...

  9. Redis入门篇(安装与启动)(一)

    一.Redis介绍 Redis是NoSql的一种,在弄清楚Redis是个什么玩意之前,先了解下NoSql是什么. 1.什么是NoSql NoSql,全名:Not Only Sql,是一种非关系型数据库 ...

最新文章

  1. 非平衡数据处理方式与评估
  2. ssh登录一段时间后断开的解决方案
  3. Rulo扫地机器人app_要买这样的扫地机器人 浦桑尼克扫地机器人评测
  4. LeetCode 873. 最长的斐波那契子序列的长度 题目详解
  5. 3.Boost之function
  6. android 字符串 转公式,java – 在android中将字符串转换为bigdecimal
  7. AnnotationConfigBeanDefinitionParser are only available on JDK 1.5 and higher
  8. 复习Javascript专题(三):面向对象(对象的创建与继承,原型及原型链)
  9. WinRAR去广告实现
  10. verilog 按键消抖
  11. 【基于pyAudioKits的Python音频信号处理项目(一)】实现音频频谱分析仪并进行交互式滤波器设计
  12. 2022山东省安全员C证考试试题及答案
  13. 数据搜索的新战场,我们为什么需要向量数据库?
  14. 从 Secure Element 到 Android KeyStore
  15. 关于TreeView的简单使用(Qt6.4.1)
  16. SAP中物料质检过程中检验批/物料凭证/过账变更通知之间的业务关联图
  17. 神经网络系统技术是什么,神经网络系统技术应用
  18. 吐槽支付宝红包:逼公鸡下蛋的后果
  19. STM32 gcc编译环境搭建
  20. 第八周读书笔记(人月神话X月亮与六便士)——到底什么才是一个程序员的自我修养?...

热门文章

  1. 结合我的创业经历,有一下3点感受
  2. 创业者在创业时经常会问到的一个问题
  3. 程序控制的对象生命周期
  4. 安装Windows10 64位提示“只能安装到GPT分区”,怎么办?
  5. 十年后,若中国基建基本完成了,还有什么能大规模拉动经济?
  6. 提高sql性能的方法_三种提高T-SQL性能的方法
  7. SQL FILESTREAM和SQL Server全文搜索
  8. aws rds监控慢sql_使用AWS CLI部署AWS RDS SQL Server
  9. 许可证编译器 (Lc.exe)
  10. 2019 7.14学习笔记