1 配置文件

Utis单位部分

redis支持字节但不支持其他类型

Includes部分

设置包含的其他文件的目录

netword网络部分

bind:默认情况bind=127.0.0.1只接受本机的访问请求,不写的话,无限制接收任何ip的访问。

生产环境下肯定要写应用服务器的地址;服务器需要远程访问的,肯定要将其注释掉。

如果开启了protected-mode(保护模式,默认为yes),那么在没有设定bind ip 的情况下,Redis只允许响应本机的请求。

port:6379 端口号。

tcp-backlog:

timeout:超过时间无操作则需要重新连接redis,默认为0表示永不超时

tcp-keepalive:设置检测无操作的频率,单位为秒,检测到两次则释放连接

pidfile:将进程号保存到指定路径的文件中

loglevel:redis中日志的级别

  • debugger:

  • verbose:有用的信息

  • notice(默认):

  • warning:

logfile:输出日志的设置路径

database:redis数据库个数,默认为16

Security 部分

可以在这一部分设置密码

云服务器一定要设置密码,否则遭受攻击内存满载命令都执行不了

Limits部分

limit:最大连接的客户端数量

maxmemory:redis能使用的最大内存

当内存达到要求时,按照下面算法移出相应的键值对

maxmemory-samples:设置抽样样本数量,用于上面的调度算法

2 发布与订阅

Redis发布订阅(sub/pub)是一种消息通信模式,发送者(sub)在任意频道发布消息,频道订阅者(sub)接收消息。

redis可以订阅任意数量的频道

subscribe 订阅消息

127.0.0.1:6379> subscribe channel1
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "channel1"
3) (integer) 1
1) "message"
2) "channel1"
3) "hello"

publish 发布消息

127.0.0.1:6379> publish channel1 hello
(integer) 1
127.0.0.1:6379>

3 数据类型

3.1 BitMaps

BitMaps本身不是一种数据类型,实际上它就是一个字符串(key-value),只不过它可以对字符串的位进行操作。

Redis为BitMaps单独提供了一套命令,所以和字符串的操作还是不太相同,可以把bitMaps看做一个以位(bit)为单位的数组,数组的每个单元只存储0和1,数组的下标被称作BitMaps的偏移量。

基本命令
setbit 设置BitMaps中指定偏移量的值(0或者1)

偏移量从0开始

127.0.0.1:6379> setbit users:20221102 1 1
(integer) 0
127.0.0.1:6379> setbit users:20221102 6 1
(integer) 0
127.0.0.1:6379> setbit users:20221102 11 1
(integer) 0
127.0.0.1:6379> setbit users:20221102 15 1
(integer) 0
127.0.0.1:6379> setbit users:20221102 19 1
(integer) 0
127.0.0.1:6379>

如上实例,记录2022年11月2日用户访问的情况,偏移量为1 6 11 15 19的用户访问了网站

很多用户的id以指定的数字开头,直接将其作为BitMaps的偏移量会造成很大的浪费,通常的做法是将这些id减去指定的数字

在第一次初始化bitmaps时,如果偏移量特别大,那么整个初始化过程执行会比较慢,可能会造成redis的阻塞

getbit 获取bitmaps中偏移量为offset的值
127.0.0.1:6379> getbit users:20221102 19
(integer) 1
127.0.0.1:6379> getbit users:20221102 18
(integer) 0
bitcount 获取开始和结束 字节 内位为1的个数
127.0.0.1:6379> setbit users:20221102 1 1
(integer) 0
127.0.0.1:6379> setbit users:20221102 6 1
(integer) 0
127.0.0.1:6379> setbit users:20221102 11 1
(integer) 0
127.0.0.1:6379> setbit users:20221102 15 1
(integer) 0
127.0.0.1:6379> setbit users:20221102 19 1
(integer) 0
127.0.0.1:6379> getbit users:20221102 19
(integer) 1
127.0.0.1:6379> getbit users:20221102 18
(integer) 0
127.0.0.1:6379> bitcount users:20221102 0 -1
(integer) 5
127.0.0.1:6379> bitcount users:20221102 0 1
(integer) 4

比如上面0~-1表示第一个字节到最后一个字节,肯定是全部的为5

0 ~ 1 则表示前两个字节,位数则对应0 ~ 15,结果就是四个了

bitop and(or/not/xor) [key...] 对多个key进行逻辑运算并保存结果到destkey中

3.2 HyperLogLog

简介

使用场景:在工作中经常用到统计的功能需求,如统计网站PV(PageView页面访问量),可以使用redis的incrby、incr轻松实现。

但是像(UniqueVisitor 独立访客)、独立IP数、搜索记录数等需要去重和计数的问题,统称为基数问题,就需要使用下面的解决方案:

  • 数据存储在Mysql表中,使用distinct count来计算不重复的个数

  • 使用redis提供的hash set bitmaps等数据结构来处理

以上方案结果精确,但是随着数据的不断增加占用的空间会越来越大,对于非常大的数据集是非常不合适的.

RedisHyperLogLog是专门用来做基数统计的算法,优点在于计算基数所需要的空间总是固定的,并且是很少的,每个HyperLoglog键只需要花费12kb内存,就可以存储2^64个不同元素的基数.

HyberLogLog只会存储输入元素的基数,不会存储输入的元素本身,所以不能像集合一样返回输入的各个元素.

基本命令
pdadd ... 向键值为key的HyperLogLog中添加value
pdcount ... 获取多个键值为key的HyperLogLog的基数
127.0.0.1:6379> pfadd program "java"
(integer) 1
127.0.0.1:6379> pfadd program "java"
(integer) 0
127.0.0.1:6379> pfadd program "C++"
(integer) 1
127.0.0.1:6379> pfcount program
(integer) 2
127.0.0.1:6379>
127.0.0.1:6379>
127.0.0.1:6379> pfadd char "a"
(integer) 1
127.0.0.1:6379>
127.0.0.1:6379>
127.0.0.1:6379> pfcount program char
(integer) 3
pfmerge merge
127.0.0.1:6379> pfmerge merge program char
OK
127.0.0.1:6379> pfcount merge
(integer)

3.3 Geographic

简介

Redis3.2增加了对GEO类型的支持.GEO 全称Geographic,地理信息的缩写,该类型就是元素的二维坐标,也就是经纬度.redis基于该类型,提供了经纬度设置 查询 范围查询 以及 距离测量 经纬度哈希等一系列的操作.

基本命令
geoadd 给键值为key的Geographic添加经纬度信息(经度 纬度 名称)
127.0.0.1:6379> geoadd china:city 121.47 31.23 shanghai
(integer) 1
127.0.0.1:6379> geoadd china:city 106.50 29.53 chongqing 114.05 22.52 shenzhen 116.38 39.90 beijing
(integer) 3
127.0.0.1:6379> geoadd china:city 121.47 31.23 shanghai
(integer) 0

已经添加了的数据是没有办法再添加的

两级无法添加,一般会下载城市数据,然后由java程序一次性导入

geopos ... 获取键为key的Geographic的value的经纬度信息
127.0.0.1:6379> geopos china:city shanghai
1) 1) "121.47000163793563843"
2) "31.22999903975783553"
127.0.0.1:6379> geopos china:city shanghai beijing
1) 1) "121.47000163793563843"
2) "31.22999903975783553"
2) 1) "116.38000041246414185"
2) "39.90000009167092543"
geodist [m|km|ft|mi] 获取两个位置之间的直线距离
127.0.0.1:6379> geodist china:city shanghai beijing
"1068153.5181"
127.0.0.1:6379> geodist china:city shanghai beijing km
"1068.1535"
127.0.0.1:6379>

单位默认为米

ft:英尺

mi:英米

georadius [m|km|ft|mi] 获取以给定经纬度为中心radius为半径的元素
127.0.0.1:6379> georadius china:city 110 30 1000 km
1) "chongqing"
2) "shenzhen"

Redis(二)redis发布与订阅以及三种新数据类型的更多相关文章

  1. Redis中的发布与订阅

    redis中实现发布与订阅相对于zookeeper非常简单.直接使用publish和subscribe就行. subscrible news; 订阅news这个channel publish news ...

  2. Redis的消息发布和订阅

    Redis的消息发布和订阅 Author:SimpleWu GitHub-redis 什么是消息发布和订阅? Redis 发布订阅(pub/sub)是一种进程间的消息通信模式: 发送者(pub)发送消 ...

  3. tomcat发布web项目的三种方式

    tomcat发布web项目的三种方式 方式一: 配置tomcat 安装目录下的conf/server.xml <Host name="loaclhost">标签里面添加 ...

  4. redis 笔记06 发布与订阅、事务、慢查询日志、监视器

    发布与订阅 1. 服务器状态在pubsub_channels字典保存了所有频道的订阅关系:SUBSCRIBE命令负责将客户端和被订阅的频道关联到这个字典里面,而UNSUBSCRIBE命令则负责 解除客 ...

  5. Redis消息之发布与订阅

    "发布/订阅"可以实现进程间的消息传递 发布的消息不会持久化,只能收到订阅后的消息,执行subscribe命令后客户端会进入"订阅"状态,处于此状态下的客户端不 ...

  6. redis 事务 及发布于订阅功能

    事务: Redis事务可以一次执行多个命令,事务具有以下特征: 1.隔离操作:事务中的所有命令都会序列化.按顺序地执行,不会被其他命令打扰. 2.原子操作:事务中的命令要么全部被执行,要么全部都不执行 ...

  7. .NetCore使用Redis,StackExchange.Redis队列,发布与订阅,分布式锁的简单使用

    环境:之前一直是使用serverStack.Redis的客服端,今天来使用一下StackExchange.Redis(个人感觉更加的人性化一些,也是免费的,性能也不会差太多),版本为StackExch ...

  8. redis(二)redis+TCMALLOC高性能的缓存服务器的安装配置

    安装  1准备编译环境    yum -y install gcc gcc+ gcc-c++ openssl openssl-devel pcre pcre-devel  2 下载源码包(由于goog ...

  9. redis(二)-----redis基本数据类型之字符串

    Redis的全称是REmote Dictionary Server,它主要提供了5种数据结构:字符串.哈希.列表.集合.有序集合,同时在字符串的基础之上演变 出了位图(Bitmaps)和HyperLo ...

  10. [redis] redis 存取键值对常用的三种使用方式 - Jedis、JedisPool、Jedis分布式

    |-Jedis 普通方式 |-JedisPool 连接池方式(需要引入pool相关jar) |-Jedis 分布式 (需要引入pool相关jar) 引入jedis2.7.0和commons.pool2 ...

随机推荐

  1. Hex格式和Mot格式简介

    Hex格式和Mot格式简介 一.Hex格式介绍    1.1 什么是 Intel HEX 文件格式?  Intel HEX文件 是由一行行符合 Intel HEX文件格式的文本所构成的ASCII文本文 ...

  2. SQL SERVER 内存优化表踩坑记

    背景 因为生产应用需要刷新大量的状态数据到数据库中用于客户端的显示,于是新建了一张状态表,表内行数固定,状态更新到列内.刚开始运行时还行,更新都很及时,查询速度也不慢.于是就这样使用了有一个月的时间. ...

  3. 服务器安装docker

    安装命令: curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun 使用国内 daocloud 一键安装: curl -s ...

  4. loadrunner获取当前年月日时分秒 时间

    loadrunner获取当前年月日时分秒 时间 lr_save_datetime ("%Y-%m-%d %H:%M:%S",DATE_NOW+TIME_NOW,"crea ...

  5. 修改百分浏览器(centbrowser)、谷歌和火狐浏览器默认字体的方法

    1,百分浏览器(centbrowser) 在浏览器的安装位置D:\Program Files\Cent Browser\User Data编辑文件custome.css,如果没有此文件可新建一个,内容 ...

  6. enobj.cn站有更新

    1:整体样式 2:可以折叠app列表 3:手机端样式 4: Blog链接到博客园

  7. vue 缓存后台获取的token

    代码 localStorage.setItem("token",res.data.data);// 用localStorage缓存token值

  8. java并发编程实践-线程安全性

    线程是CPU资源调度的基本单位,如果一个程序中只有一个线程,则最多只能在一个处理器上运行,如果电脑/服务器是双处理器系统,则单线程的程序只能使用一半的CPU资源,所以,多线程是提高处理器资源利用率的重 ...

  9. WinForm分辨率适应-高DPI自动缩放

    https://www.cnblogs.com/alittlecooing/p/WinForm-HighDPI.html 新建app.manifest文件后,去掉注释就可

  10. 利用MRT批量处理MOD13Q1原始数据拼接的方法

    一.在存放原始数据的文件夹里,新建立一个result文件夹.新拼接的文件夹处理过后会在这个文件夹里出现 二.利用MRT点点点保存一个prm文件在存放原始数据的文件夹里 具体操作步骤参考 青灯常伴古佛 ...