• 初识Redis与桌面客户端


     


    正文

    Redis介绍

    什么是Redis

    • Redis(Remote Dictionary Server) 是一个使用 C 语言编写的,开源的(BSD许可)高性能非关系型(NoSQL)的键值对数据库。

    • Redis 可以存储键和五种不同类型的值之间的映射。键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合。

    • 与传统数据库不同的是 Redis 的数据是存在内存中的,所以读写速度非常快,因此 redis 被广泛应用于缓存方向,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB。另外,Redis 也经常用来做分布式锁。除此之外,Redis 支持事务 、持久化、LUA脚本、LRU驱动事件、多种集群方案。


    Redis是一种键值型的NoSql数据库,这里有两个关键字:
    • 键值型

    • NoSql

    其中键值型,是指Redis中存储的数据都是以key、value对的形式存储,而value的形式多种多样,可以是字符串、数值、甚至json:

    image

    而NoSql则是相对于传统关系型数据库而言,有很大差异的一种数据库。

    认识NoSQL

    NoSql可以翻译做Not Only Sql(不仅仅是SQL),或者是No Sql(非Sql的)数据库。是相对于传统关系型数据库而言,有很大差异的一种特殊的数据库,因此也称之为非关系型数据库

    结构化与非结构化

    传统关系型数据库是结构化数据,每一张表都有严格的约束信息:字段名、字段数据类型、字段约束等等信息,插入的数据必须遵守这些约束:

    image

    而NoSql则对数据库格式没有严格约束,往往形式松散,自由。

    可以是键值型:

    image

    也可以是文档型:

    image

    甚至可以是图格式:

    image

    关联和非关联

    传统数据库的表与表之间往往存在关联,例如外键:

    image

    而非关系型数据库不存在关联关系,要维护关系要么靠代码中的业务逻辑,要么靠数据之间的耦合:

    {
    id: 1,
    name: "张三",
    orders: [
    {
    id: 1,
    item: {
    id: 10, title: "荣耀6", price: 4999
    }
    },
    {
    id: 2,
    item: {
    id: 20, title: "小米11", price: 3999
    }
    }
    ]
    }

    此处要维护“张三”的订单与商品“荣耀”和“小米11”的关系,不得不冗余的将这两个商品保存在张三的订单文档中,不够优雅。还是建议用业务来维护关联关系。

    查询方式

    传统关系型数据库会基于Sql语句做查询,语法有统一标准;

    而不同的非关系数据库查询语法差异极大,五花八门各种各样。

    事务

    传统关系型数据库能满足事务ACID的原则。

    而非关系型数据库往往不支持事务,或者不能严格保证ACID的特性,只能实现基本的一致性。

    总结

    除了上述四点以外,在存储方式、扩展性、查询性能上关系型与非关系型也都有着显著差异,总结如下:

    • 存储方式
      • 关系型数据库基于磁盘进行存储,会有大量的磁盘IO,对性能有一定影响
      • 非关系型数据库,他们的操作更多的是依赖于内存来操作,内存的读写速度会非常快,性能自然会好一些
    • 扩展性
      • 关系型数据库集群模式一般是主从,主从数据一致,起到数据备份的作用,称为垂直扩展。
      • 非关系型数据库可以将数据拆分,存储在不同机器上,可以保存海量数据,解决内存大小有限的问题。称为水平扩展。
      • 关系型数据库因为表之间存在关联关系,如果做水平扩展会给数据查询带来很多麻烦

    认识Redis

    Redis诞生于2009年全称是Remote Dictionary Server 远程词典服务器,是一个基于内存的键值型NoSQL数据库。

    特征

    • 键值(key-value)型,value支持多种不同数据结构,功能丰富
    • 单线程,每个命令具备原子性
    • 低延迟,速度快(基于内存、IO多路复用、良好的编码)。
    • 支持数据持久化
    • 支持主从集群、分片集群
    • 支持多语言客户端

    Redis优缺点

    优点

    • 读写性能优异, Redis能读的速度是110000次/s,写的速度是81000次/s。
    • 支持数据持久化,支持AOF和RDB两种持久化方式。
    • 支持事务,Redis的所有操作都是原子性的,同时Redis还支持对几个操作合并后的原子性执行。
    • 数据结构丰富,除了支持string类型的value外还支持hash、set、zset、list等数据结构。
    • 支持主从复制,主机会自动将数据同步到从机,可以进行读写分离。

    缺点

    • 数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。
    • Redis 不具备自动容错和恢复功能,主机从机的宕机都会导致前端部分读写请求失败,需要等待机器重启或者手动切换前端的IP才能恢复。
    • 主机宕机,宕机前有部分数据未能及时同步到从机,切换IP后还会引入数据不一致的问题,降低了系统的可用性。
    • Redis 较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂。为避免这一问题,运维人员在系统上线时必须确保有足够的空间,这对资源造成了很大的浪费。

    Redis的官方网站地址:https://redis.io/

    安装Redis

    大多数企业都是基于Linux服务器来部署项目,而且Redis官方也没有提供Windows版本的安装包。因此会基于Linux系统来安装Redis.

    此处选择的Linux版本为CentOS 7.

    依赖库

    Redis是基于C语言编写的,因此首先需要安装Redis所需要的gcc依赖:

    yum install -y gcc tcl

    上传安装包并解压

    然后将课前资料提供的Redis安装包上传到虚拟机的任意目录:

    例如,我放到了/usr/local/src 目录:

    解压缩:

    tar -xzf redis-6.2.6.tar.gz

    解压后:

    进入redis目录:

    cd redis-6.2.6

    运行编译命令:

    make && make install

    如果没有出错,应该就安装成功了。

    默认的安装路径是在 /usr/local/bin目录下:

    该目录已经默认配置到环境变量,因此可以在任意目录下运行这些命令。其中:

    • redis-cli:是redis提供的命令行客户端
    • redis-server:是redis的服务端启动脚本
    • redis-sentinel:是redis的哨兵启动脚本

    启动

    redis的启动方式有很多种,例如:

    • 默认启动
    • 指定配置启动
    • 开机自启

    默认启动

    安装完成后,在任意目录输入redis-server命令即可启动Redis:

    redis-server

    如图:

    这种启动属于前台启动,会阻塞整个会话窗口,窗口关闭或者按下CTRL + C则Redis停止。不推荐使用。

    指定配置启动

    如果要让Redis以后台方式启动,则必须修改Redis配置文件,就在我们之前解压的redis安装包下(/usr/local/src/redis-6.2.6),名字叫redis.conf:

    我们先将这个配置文件备份一份:

    cp redis.conf redis.conf.bck

    然后修改redis.conf文件中的一些配置:

    # 允许访问的地址,默认是127.0.0.1,会导致只能在本地访问。修改为0.0.0.0则可以在任意IP访问,生产环境不要设置为0.0.0.0
    bind 0.0.0.0
    # 守护进程,修改为yes后即可后台运行
    daemonize yes
    # 密码,设置后访问Redis必须输入密码
    requirepass 123321

    Redis的其它常见配置:

    # 监听的端口
    port 6379
    # 工作目录,默认是当前目录,也就是运行redis-server时的命令,日志、持久化等文件会保存在这个目录
    dir .
    # 数据库数量,设置为1,代表只使用1个库,默认有16个库,编号0~15
    databases 1
    # 设置redis能够使用的最大内存
    maxmemory 512mb
    # 日志文件,默认为空,不记录日志,可以指定日志文件名
    logfile "redis.log"

    启动Redis:

    # 进入redis安装目录
    cd /usr/local/src/redis-6.2.6
    # 启动
    redis-server redis.conf

    停止服务:

    # 利用redis-cli来执行 shutdown 命令,即可停止 Redis 服务,
    # 因为之前配置了密码,因此需要通过 -u 来指定密码
    redis-cli -u 123321 shutdown

    开机自启

    我们也可以通过配置来实现开机自启。

    首先,新建一个系统服务文件:

    vi /etc/systemd/system/redis.service

    内容如下:

    [Unit]
    Description=redis-server
    After=network.target
    [Service]
    Type=forking
    ExecStart=/usr/local/bin/redis-server /usr/local/src/redis-6.2.6/redis.conf
    PrivateTmp=true
    [Install]
    WantedBy=multi-user.target

    然后重载系统服务:

    systemctl daemon-reload

    现在,我们可以用下面这组命令来操作redis了:

    # 启动
    systemctl start redis
    # 停止
    systemctl stop redis
    # 重启
    systemctl restart redis
    # 查看状态
    systemctl status redis

    执行下面的命令,可以让redis开机自启:

    systemctl enable redis

    Redis桌面客户端

    安装完成Redis,我们就可以操作Redis,实现数据的CRUD了。这需要用到Redis客户端,包括:

    • 命令行客户端
    • 图形化桌面客户端
    • 编程客户端

    Redis命令行客户端

    Redis安装完成后就自带了命令行客户端:redis-cli,使用方式如下:

    redis-cli [options] [commonds]

    其中常见的options有:

    • -h 127.0.0.1:指定要连接的redis节点的IP地址,默认是127.0.0.1
    • -p 6379:指定要连接的redis节点的端口,默认是6379
    • -a 123321:指定redis的访问密码

    其中的commonds就是Redis的操作命令,例如:

    • ping:与redis服务端做心跳测试,服务端正常会返回pong

    不指定commond时,会进入redis-cli的交互控制台:

    图形化桌面客户端

    GitHub上的大神编写了Redis的图形化桌面客户端,地址:https://github.com/uglide/RedisDesktopManager

    不过该仓库提供的是RedisDesktopManager的源码,并未提供windows安装包。

    在下面这个仓库可以找到安装包:https://github.com/lework/RedisDesktopManager-Windows/releases

    安装

    在下载中可以找到Redis的图形化桌面客户端:

    解压缩后,运行安装程序即可安装:

    安装完成后,在安装目录下找到rdm.exe文件:

    双击即可运行:

    建立连接

    点击左上角的连接到Redis服务器按钮:

    在弹出的窗口中填写Redis服务信息:

    点击确定后,在左侧菜单会出现这个链接:

    点击即可建立连接了。

    Redis默认有16个仓库,编号从0至15. 通过配置文件可以设置仓库数量,但是不超过16,并且不能自定义仓库名称。

    如果是基于redis-cli连接Redis服务,可以通过select命令来选择数据库:

    # 选择 0号库
    select 0
  • 相关阅读:
    智能安防系统-视频监控系统
    SpringBoot发送邮件
    STC15单片机-数码管显示PCB板温度(TM1620驱动芯片使用介绍)
    c++征途 --- 类和对象 --- 友元
    【信息安全技术】RSA算法的研究及不同优化策略的比较
    MySQL自传
    NGINX_二十 nginx 监控
    pygame绘制梯形 使用polygon函数
    ASP.NET大型外卖订餐系统源码 (PC版+手机版+商户版)
    详解 Flink Table API 和 Flink SQL 之时间特性
  • 原文地址:https://www.cnblogs.com/zhangwencheng/p/17664271.html