• Redis入门笔记(一):Redis在Linux下安装和八大数据类型



    提示:以下是本篇文章正文内容,下面案例可供参考

    一、什么是Redis

     Salvatore Sanfilippo

    REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统,是跨平台的非关系型数据库。
    Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库
    单线程+多路IO复用,支持持久化,支持多种数据类型
    
    • 1
    • 2
    • 3

    二、Redis在Linux下的安装

    1.Redis 和 Redis Stack的关系

    当我们点击官网的Download我们会进入下载界面:出现Redis Stack,那么Redis 和 Redis Stack是什么关系呢
    在这里插入图片描述
    Redis Stack 是什么?

    Redis Stack 是一组软件套件,它主要由三部分组成。一个是 Redis Stack Server,一个是 RedisInsight,一个是 Redis Stack 客户端 SDK。
    其中 Redis Stack Server 由 Redis,RedisSearch,RedisJSON,RedisGraph,RedisTimeSeries 和 RedisBloom 组成。
    其目的:基于Redis的搜索、文档、图和时间序列功能整合到一个扩展Redis Stack中,以使开发人员能够轻松构建实时应用程序。
    
    • 1
    • 2
    • 3

    总结:Redis Stack 更强调它的目的是构建实时应用程序,它不是 redis 的替代品,它和 redis 将会一同发展。

    2.Redis 的安装

    2.1 下载Redis

    在官网下载的是Linux版的
    官网下载https://redis.io/download/
    下载后通过winscp上传到linux的 /opt目录下
    在这里插入图片描述

    2.2 安装和编译

    Redis是C语言编写的,所以需要gcc编译环境
    查看gcc的版本:
    在这里插入图片描述

    如果没有gcc编译器,需要进行安装通过 yum install gcc命令
    并且Redis 6需要gcc版本至少是gcc7以上
    在这里插入图片描述

    解压文件:
    在这里插入图片描述
    解压成功
    在这里插入图片描述
    通过make命令进行编译
    在这里插入图片描述
    通过make install命令进行安装
    在这里插入图片描述
    安装成功后,会自动默认安装到 /usr/local/bin路径下
    在这里插入图片描述

    • redis-benchmark 用于进行redis性能测试的工具
    • redis-check-dump 用于修复出问题的dump.rdb文件
    • redis-cli redis的客户端
    • redis-server redis的服务端
    • redis-check-aof 用于修复出问题的AOF文件
    • redis-sentinel 用于集群管理

    2.3 前台启动

    redis的启动分为两种方式:前台启动和后台启动。
    由于前台启动后,命令行界面不能再执行其他操作,且命令行界面关闭后,redis也会随即关闭,所以不推荐使用。

    redis前台启动,直接输入redis-server
    在这里插入图片描述
    按Ctrl +c退出

    2.4 后台启动

    配置文件redis.conf 文件
    在这里插入图片描述
    复制文件到etc/下
    在这里插入图片描述
    查看文件是否存在
    在这里插入图片描述
    修改配置文件(让服务可以在后台启动)
    在这里插入图片描述
    在这里插入图片描述

    2.5 redis的三种关闭方式

    单实例关闭
    在这里插入图片描述
    也可直接杀死进程
    在这里插入图片描述
    进入终端关闭
    在这里插入图片描述

    三、Redis的数据类型

    1.Redis的key操作

    默认端口号6379
    默认16个数据库,初始默认使用0号库(所有库同样密码)
    在这里插入图片描述
    安装成功后,默认配置此环境变量
    在这里插入图片描述
    常用的key操作命令:

     set key value 设置key,及对应的value
     keys * 查看库中所有的key
     exists key 查看库中是否存在该key
     type key 查看key所属的类型
     del key 删除指定的key
     unlink key 根据value选择非阻塞删除(仅在keys从keyspace元数据中删除,真正的删除在后续的异步操作)
     ttl 返回key的过期时间(-1表示永不过期,-2表示已过期)
     dbsize 查看库中有多少个key
     flushdb 清空当前库
     flushall 通杀全部库
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述

    2.Redis的五大数据类型

    2.1 String(字符串)

    String是redis最基本的数据类型,一个redis中的字符串value最多可以是512m
    String类型是二进制安全的,jpg图片,序列化对象
    
    • 1
    • 2

    set 和get命令
    在这里插入图片描述
    append追加
    在这里插入图片描述
    strlen 得到value的长度
    在这里插入图片描述
    setnx指定的 key 不存在时,为 key 设置指定的值(返回值为1被设置,0则未设置)
    在这里插入图片描述
    incr 和decr
    将 key 中储存的数字值增一(减一)

    incr 原子操作
    所谓的原子操作是指不会被线程调度机制打断的操作
    (1)在单线程中,能够在单条指令中完成的操作都可以认为是原子操作,因为中断只能发生于指令之间。
    (2)在多线程中,不能被其他进程(线程)打断的操作就叫做原子操作。
    redis单命令的原子性主要得益于redis的单线程

    在这里插入图片描述
    incrby 和 decrby
    将 key 中储存的数字加上(减上)指定的增量值
    在这里插入图片描述
    mget/mset/msetnx
    在这里插入图片描述
    字符串的截取、替换
    在这里插入图片描述
    setex将键 key 的值设置为 value , 并将键 key 的生存时间设置为 seconds 秒钟。
    在这里插入图片描述
    getset得到旧值,设置新值
    在这里插入图片描述
    String 的数据结构为简单动态字符串(SDS) 内部结构实现类似于Java的ArrayList,采用预分配冗余空间的方式来减少内存的频繁分配。
    在这里插入图片描述

    2.2 List(列表)

    list 单键多值
    redis列表是简单的字符串列表,按照插入顺序排序,它的底层实际上是个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能较差
    在这里插入图片描述
    在这里插入图片描述
    从列表右边吐出一个值,插到列表右边
    在这里插入图片描述
    lrem 从左边删除n个value
    lset 将key下标为index的值替换成value
    在这里插入图片描述
    list的数据结构为快速链表 quickList
    首先在列表元素较少的情况下会使用一块连续的内存存储,这个结构是ziplist压缩列表,它将所有的元素紧挨着一起存储,分配的是一块连续的内存
    当数据量比较多的时候才会改成quicklist
    因为普通的链表需要的附加指针空间太大,会比较浪费空间。(比如这个列表只存的是int类型的数据,结构上还需要两个额外的指针prev和next)
    在这里插入图片描述
    将多个ziplist使用双向指针串起来使用,既满足了快速的插入删除性能,又不会出现太大的空间冗余。

    2.3 Set(集合)

    set和list类似,只不过set是可以自动排重的,并且提供了判断某个成员是否在一个set集合内
    set是string类型的无序集合,它的底层其实是个value为null的hash表,添加等的复杂度都是o(1)
    一个算法,随着数据的增加,执行时间的长短,如果是o(1)s数据增加,查找数据的时间不变。
    在这里插入图片描述
    在这里插入图片描述
    set的数据结构是dict字典,字典是用哈希表实现的

    2.4 Hash(哈希)

    hash是一个键值对集合,是一个string类型的field和value的映射表,特别适合用于存储对象
    类似于Java里面的Map
    在这里插入图片描述

    在这里插入图片描述
    hash类型对应的数据结构是两种:ziplist(压缩列表) hashtable(哈希表)
    当field-value长度较短且个数较少时,使用ziplist,否则使用hashtable

    2.5 Redis有序集合 Zset(sorted set)

    Redis有序集合 Zset与普通集合set非常相似,是一个没有重复元素的字符串集合。
    不同之处是有序集合的每个成员都关联了一个评分(score),这个评分被用来按照从低分到最高分的方式排序集合中的成员。集合的成员是唯一的,但是评分可以是重复的。
    因为元素是有序的,所以你可以根据评分或者次序来获取一个范围的元素

    zadd <\key> <\sore1><\value1>将一个或者多个元素及其score值加入到集合中
    zrange <\key> <\start><\stop><\withscores><返回有序集合下标<\start><\stop>的元素
    zrangebyscore key min max返回集合中,score值介于min和max之间(包括自己)的成员,有序集合score从小到大递增
    zrevrangebyscore key max min同上改为从大到小排列
    zincrby key为元素的score加上增量
    zrem key value删除该集合下,指定的元素
    zcount key min max统计该集合,分数区间内的元素个数
    zrank key value返回该值在集合中的排名,从0开始

    实例:

    在这里插入图片描述

    zset 底层使用了两个数据结构

    • hash,作用就是关联元素value 和权重score,保障元素value的唯一性
    • 跳跃表(跳表),目的在于给元素value排序,根据score的范围获取元素列表
      在这里插入图片描述

    3.Redis的三大特殊数据类型

    3.1 Bitmaps:位存储

    可以看做成一个以位为单位的数组,数组的每一个单元只能存储0和1,数组的下标在Bitmaps中叫做偏移量
    在这里插入图片描述
    如果用户的id以一个指定的数字(例如1000)开头,直接将用户的id和Bitmaps的偏移量对应势必会造成一定的浪费,通常是每次做setbit操作时将用户id减去这个指定的数字
    在第一次初始化Bitmaps时,假如偏离量非常大,那么整个初始化过程执行会比较慢,可能会造成Redis的阻塞
    实例操作:
    在这里插入图片描述
    注意:redis的setbit设置或清除的是bit的位置,而bitcount计算的是byte位置
    在这里插入图片描述
    bitop operation destkey key [key…] 对一个或多个保存二进制位的字符串 key 进行位元操作,并将结果保存到 destkey 上。
    operation 可以是 AND 、 OR 、 NOT 、 XOR 这四种操作中的任意一种:

    • BITOP AND destkey key [key …] ,对一个或多个 key 求逻辑并,并将结果保存到 destkey
    • BITOP OR destkey key [key …] ,对一个或多个 key 求逻辑或,并将结果保存到 destkey
    • BITOP XOR destkey key [key …] ,对一个或多个 key 求逻辑异或,并将结果保存到 destkey
    • BITOP NOT destkey key ,对给定 key 求逻辑非,并将结果保存到 destkey

    在这里插入图片描述
    在这里插入图片描述

    3.2 HyperLogLog:基数统计

    HyperLogLog是用来做基数统计的算法,在输入元素的数量或者体积非常大时,计算基数所需的空间是固定的,并且是很小的。在redis中,每个HyperLogLog键只需要花费12kb内存就可以计算接近2^64个不同元素的基数。
    但是,HyperLogLog只会根据输入元素来计算基数,并不储存输入元素本身,所以HyperLogLog不能像集合那样,返回输入的各个元素
    在这里插入图片描述

    3.3 Geospatial:地理位置

    Redis在3.2中增加了对GEO(Geographic地理信息)类型的支持,就是元素的二维坐标,在地图中就是经纬度。
    有效的经度从-180度到180度,有效的纬度从-85.05002878度到85.05112878度,当坐标位置超出指定范围时,该命令将会返回一个错误。已经添加的数据是无法再次往里面添加的。两级无法直接添加。
    
    • 1
    • 2
    • m表示单位米【默认值】
    • km表示千米
    • mi表示英里
    • ft表示英尺
      在这里插入图片描述
  • 相关阅读:
    C++ STL汇总
    linux 安装clickhouse
    记Windows服务器Redis 6379被攻击 被设置主从模式同步项目数据
    4、MFC:菜单栏、工具栏与状态栏
    《优化接口设计的思路》系列:第九篇—用好缓存,让你的接口速度飞起来
    程序过程分析——从编译到执行
    机器学习笔记之卡尔曼滤波(二)滤波思想的推导过程
    微信超实用的小功能
    前端程序员应该往全栈方向发展吗?还是坚守前端?
    【Qt】消息机制和事件
  • 原文地址:https://blog.csdn.net/qq_45637894/article/details/126482043