## 1.Redis相关配置信息

服务器端设定

  • 设置服务器以守护进程的方式运行

    daemonize yes|no
  • 绑定主机地址 (只能此ip访问)

    bind 127.0.0.1
  • 设置服务器端口号

    port 6379
  • 设置数据库数量

    databases 16

日志配置

  • 设置服务器以指定日志记录级别

    loglevel debug|verbose|notice|warning
  • 日志记录文件名

    logfile 端口号.log

注意:日志级别开发期设置为verbose即可,生产环境中配置为notice,简化日志输出量,降低写日志IO的频度

客户端限制配置 :

  • 设置同一时间最大客户端连接数,默认无限制。当客户端连接到达上限,Redis会关闭新的连接

    maxclients 0
  • 客户端闲置等待最大时长,达到最大值后关闭连接。如需关闭该功能,设置为 0

    timeout 300(s)

多服务器快捷配置 :

  • 导入并加载指定配置文件信息,用于快速创建redis公共配置较多的redis实例配置文件,便于维护

    include /path/server-端口号.conf

2. Bitmaps 类型

现有一个业务场景, 有八个人,编号分别为 1-8,,此时需要在程序中存储他们的性别,分别使用0(女),1(男),表示,

如果按照正常逻辑,我们使用最节省空间的方式,使用一个byte 存储一个人的性别,那么执行8byte 的空间即可表达清楚.

那么有没有更加节省空间的方式呢, 有,我们知道 一个byte ,表示8位, 例如11111111, 使用二进制的方式,我们可以发现, 在此场景中, 一个byte 就可以表达完整此八人的性别表示, 例如11110000,表示前四个人是男性,后四人是女性

如果使用Redis,则可以使用String 类型操作,把一组数据作为一个字符串操作,但是操作起来非常麻烦, 修改字符串的指定位置, 为了方便操作, Redis 为我们提供了专门的数据类型 Bitmaps

Bitmaps类型的基础操作

  • 获取指定key对应偏移量上的bit值

    getbit key offset //取数据中第 offset位的 数据
  • 设置指定key对应偏移量上的bit值,value只能是1或0

    setbit key offset value // 设置 第 offset 位的数据为 0或1

注意: 若直接设置 offset 值为很大的值, 例如 setbit k 1000 0 ,即设置第1000位的数字位 0,那么前面 999位的数字则全部补0

扩展操作:

业务场景, 电影网站每天对电影有没有被点播的统计

  • 统计每天某一部电影是否被点播
  • 统计每天有多少部电影被点播
  • 统计每周/月/年有多少部电影被点播
  • 统计年度哪部电影没有被点播

对于每天每部电影有没有被点播,可以使用 电影的id作为offset, 如果被点播记录1,没有被点播,则记为0,

并使用 时间作为key, 例如 20210119:0101011 ,20210119:1101101

对于 每月的统计,则可以将该月30 天的所有数据位,进行 或 操作(全为0则为0,只要有1则为1),统计出的即是该电影本月有没有被点播

相关操作:

  • 对指定key按位进行交、并、非、异或操作,并将结果保存到destKey中

    bitop op destKey key1 [key2...] // 将 key1 ,key2 数据的所有位 进行 op操作, 并将结果存到 destKey中
    • and:交
    • or:并
    • not:非
    • xor:异或
  • 统计指定key中1的数量

    bitcount key [start end] //统计一个值中,数据为1的有多少为, 指定 start开始 end结束的 偏移量范围,不指定则全部

redis 应用于信息状态统计,打卡考勤都可以使用此类型

3.HyperLogLog 类型

在说此类型时,先来看看什么是基数

  • 比如数据集 {1, 3, 5, 7, 5, 7, 8}, 那么这个数据集的基数集为 {1, 3, 5 ,7, 8}, 基数(不重复元素)为5。 基数估计就是在误差可接受的范围内,快速计算基数

那么此时如果有一个网站,需要统计一年的访问客户端电脑ip个数, 如果使用Set 集合的方式,每有一个新的ip,则往里面存,会自动去重,但是如果数据量太过庞大,则占据的存储量也十分大,

对于这种需求,Redis 提供了 HyperLogLog 类型, 它是专门干这个事的

LogLog 算法的底层实现

示意图:

由于实现太过于简单,我懒得解释了,想要深入了解的....算你厉害

基本操作

  • 添加数据

    pfadd key element [element ...]  // 将需要统计的数据加入到此中,例如一个ip
  • 统计数据

    pfcount key [key ...] // 统计此key 已经存放的元素基数
  • 合并数据

    pfmerge destkey sourcekey [sourcekey...] //合并多个key 到 destkey中

示例:

pfadd k  127.0.0.1
pfadd k 127.0.0.1
pfadd k 127.0.0.1
pfadd k 192.168.0.1
pfadd k 192.168.0.2
pfcount k //得出结果 : 3

相关说明:

  • 用于进行基数统计,不是集合,不保存数据,只记录数量而不是具体数据
  • 核心是基数估算算法,最终数值存在一定误差
  • 误差范围:基数估计的结果是一个带有 0.81% 标准错误的近似值
  • 耗空间极小,每个hyperloglog key占用了12K的内存用于标记基数
  • pfadd命令不是一次性分配12K内存使用,会随着基数的增加内存逐渐增大
  • Pfmerge命令合并后占用的存储空间为12K,无论合并之前数据量多少

4. GEO 类型

对于现今软件中用到位置信息的计算,例如附近的人,Redis提供了非常方便的操作方式

相关命令:

  • geoadd : 用于存储指定的地理空间位置,可以将一个或多个经度(longitude)、纬度(latitude)、位置名称(member)添加到指定的 key 中。 (如果要计算多个位置的关系,需要将这几个位置信息存到同一个key中)

    geoadd key longitude latitude member [longitude latitude member ...]
  • 获取坐标点 根据名称,得出的结果比较专一,不用深究

    geopos key member [member ...]
  • 计算坐标点距离 单位 unit

    geodist key member1 member2 [unit]
  • 计算自定义某个点在指定坐标集中附近的点

    georadius key longitude latitude radius m|km|ft|mi // 例如 georadius geos 1.5 1.5 90 km
    // 在geos集合中的点在 坐标 1.5 1.5 90km范围内的
  • 计算指定坐标集里面某个坐标 附近的点

    georadiusbymember key member radius m|km|ft|mi //例如 georadiusbymember geos hz 180 km
    //含义为 在geos坐标集中,点名为hz的 附近180km的坐标点
  • 计算经纬度hash值

    geohash key member [member ...]

Redis高级数据类型的更多相关文章

  1. redis入门到精通系列(七):redis高级数据类型详解(BitMaps,HyperLogLog,GEO)

    高级数据类型和五种基本数据类型不同,并非新的数据结构.高级数据类型往往是用来解决一些业务场景. (一)BitMaps (1.1) BitMaps概述 在应用场景中,有一些数据只有两个属性,比如是否是学 ...

  2. 分布式缓存技术redis学习系列(三)——redis高级应用(主从、事务与锁、持久化)

    上文<详细讲解redis数据结构(内存模型)以及常用命令>介绍了redis的数据类型以及常用命令,本文我们来学习下redis的一些高级特性. 安全性设置 设置客户端操作秘密 redis安装 ...

  3. 分布式缓存技术redis学习(三)——redis高级应用(主从、事务与锁、持久化)

    上文<详细讲解redis数据结构(内存模型)以及常用命令>介绍了redis的数据类型以及常用命令,本文我们来学习下redis的一些高级特性.目录如下: 安全性设置 设置客户端操作秘密 客户 ...

  4. 分布式缓存技术redis系列(三)——redis高级应用(主从、事务与锁、持久化)

    上文<详细讲解redis数据结构(内存模型)以及常用命令>介绍了redis的数据类型以及常用命令,本文我们来学习下redis的一些高级特性. 安全性设置 设置客户端操作秘密 redis安装 ...

  5. redis 高级特性 不要太好用

    Redis高级特性及应用场景 redis中键的生存时间(expire) redis中可以使用expire命令设置一个键的生存时间,到时间后redis会自动删除它. 过期时间可以设置为秒或者毫秒精度. ...

  6. 【Redis】二、Redis高级特性

    (三) Redis高级特性   前面我们介绍了Redis的五种基本的数据类型,灵活运用这五种数据类型是使用Redis的基础,除此之外,Redis还有一些特性,掌握这些特性能对Redis有进一步的了解, ...

  7. Redis高级特性及应用场景

    Redis高级特性及应用场景 redis中键的生存时间(expire) redis中可以使用expire命令设置一个键的生存时间,到时间后redis会自动删除它. 过期时间可以设置为秒或者毫秒精度. ...

  8. Redis高级用法

    第一章 redis初识 1.1 Redis是什么 介绍 开源:早起版本2w3千行 基于键值对的存储系统:字典形式 多种数据结构:字符串,hash,列表,集合,有序集合 高性能,功能丰富 那些公司在用 ...

  9. Redis 基础数据类型重温

    有一天你突然收到一条线上告警:Redis 内存使用率 85%.你吓坏了赶紧先进行扩容然后再去分析 big key.等你进行完这一系列操作之后老板叫你去复盘,期间你们聊到了业务的数据存储在 Redis ...

  10. 分布式缓存技术redis学习系列(四)——redis高级应用(集群搭建、集群分区原理、集群操作)

    本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用( ...

随机推荐

  1. 【解决了一个小问题】terraform创建service后,如何获取VIP的值?

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 创建一个pod后,再为这个pod创建一个对应的servic ...

  2. ABP-VNext 用户权限管理系统实战03---动态api调用并传递token

    一.使用动态api的目的 ABP可以自动创建C# API 客户端代理来调用远程HTTP服务(REST APIS).通过这种方式,你不需要通过 HttpClient 或者其他低级的HTTP功能调用远程服 ...

  3. MongoDB 选型介绍

    什么是 MongoDB 前言 MongoDB 的主要特性 MongoDB 对比关系型数据库 MySQL 什么时候考虑 MongoDB 参考 什么是 MongoDB 前言 MongoDB 是一个开源.高 ...

  4. C/C++ 通用ShellCode的编写与调用

    首先,我们的ShellCode代码需要自定位,因为我们的代码并不是一个完整的EXE可执行程序,他没有导入表无法定位到当前系统中每个函数的虚拟地址,所以我们直接获取到Kernel32.dll的基地址,里 ...

  5. 在Golang中实现多态

    目录 1.说明 2.多态 3.代码示例 4.总结 1.说明 和流行的面向对象语言不同,go 中没有面向对象的说法,也没有对应的封装.继承和多态,也许 go 的设计就不是和OOP对齐,想使用OOP,那就 ...

  6. PHP中GD库

    PHP中GD库 一.GD库的介绍 1.GD库是什么? Graphic Device,图像工具库,gd库是php处理图形的扩展库,GD库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成 ...

  7. electron 开发 ,如何使用 第三方 库 进行typescript 开发,举例:jquery 其它的 应该也是一致。

    首先要弄明白一点,electron 开发 与 nodejs开发 基本一致. 要引入 jquery 实际上就是 nodejs 引入 jquery 第一步是 去 nmp中央仓库,查看,里面有详细的说明使用 ...

  8. 基于C#的屏幕鼠标跟随圈圈应用 - 开源研究系列文章

    去年8月的时候无聊,想起博客网页中的鼠标跟随圈圈效果,于是就想用C#在Windows操作系统级别的基础上去开发一个类似的应用,于是有了此文.上次在博问里也发帖咨询了一下( https://q.cnbl ...

  9. 思维分析逻辑 6 DAY

    数据仓库研究 大数据体系 日志采集和传输 数据建模 数据管理 数据应用 数据建模 日志传输(原始数据) ODS(原始数据) 用户基础属性表:imei,prov,city,machine 用户文章下发表 ...

  10. NC19782 Tree

    题目链接 题目 题目描述 修修去年种下了一棵树,现在它已经有n个结点了. 修修非常擅长数数,他很快就数出了包含每个点的连通点集的数量. 澜澜也想知道答案,但他不会数数,于是他把问题交给了你. 输入描述 ...