• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

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

武飞扬头像
贫僧洗发爱飘柔
帮助5


一、什么是Redis

学新通

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

二、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中,以使开发人员能够轻松构建实时应用程序。

总结: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 通杀全部库

学新通

2.Redis的五大数据类型

2.1 String(字符串)

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

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<String,Object>
学新通

学新通
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度,当坐标位置超出指定范围时,该命令将会返回一个错误。已经添加的数据是无法再次往里面添加的。两级无法直接添加。
  • m表示单位米【默认值】
  • km表示千米
  • mi表示英里
  • ft表示英尺
    学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfhjafg
系列文章
更多 icon
同类精品
更多 icon
继续加载