redis-cli

Redis学习笔记(一)--编译安装

前提是你 提交于 2020-08-09 06:43:47
Redis学习笔记(一)--编译安装 操作系统:Ubuntu 18.04.4 Redis版本:Redis最新稳定版本 1、获取最新Redis稳定版本 # cd /opt/software # wget http://download.redis.io/releases/redis-stable.tar.gz 2、解压文件 # tar -zxvf redis-stable.tar.gz 3、编译安装,通过"PREFIX"参数可指定安装目录,具体安装说明可查看源程序文件夹下“README.md”文件 注意:Redis环境需要安装gcc+等其他依赖包,此处编译报错的话,可手动安装 # cd redis-stable # make PREFIX=/usr/local/redis install 4、通过"redis-server"脚本启动Redis服务(可不指定配置文件,采用默认配置),拷贝源程序文件夹下的配置文件“redis.conf”至安装目录,并修改参数“daemonize yes”,代表Redis以守护进程方式启动,默认端口是“6379“,可修改配置文件“port 6379”进行修改 # cp redis.conf /usr/local/redis # cd /usr/local/redis # vim redis.conf # cd bin # ./redis-server ..

LBS-查找附近的人-redis命令实现

自古美人都是妖i 提交于 2020-08-09 05:49:08
https://www.jianshu.com/p/a7977f2d8e6f https://www.jianshu.com/p/81bf3baa64e5 在redis的3.2版本开始支持geo的功能,这个功能可以将用户给定的地理位置信息储存起来, 并对这些信息进行操作。 本文环境 MACOS10.13.4+8G内存+2.6GHz+redis4.0.2 命令 redis的geo命令一共是6个,redis-geo在没有被集成到redis中只是一个附属模块的时候有更多的命令,在集成到redis中后被精简到了6个。我们先通过redis的命令熟悉这六条命令,然后再通过spring-data-redis集成到项目中,实现我们要做的查找附近的人。 注意:上一篇讲的mysql版本的Point(纬度,经度),纬度再前,经度在后。而在redis中是经度在前,维度在后。 中文显示乱码解决方案: ./redis-cli -a redis-pass --raw ,就是在命令后加 --raw , 加了 --raw 之后放回结果就没有格式化了,看起来比较不友好。项目中最好不要使用中文, 避免出现一些莫名其妙的问题。 GEOADD GEOADD key longitude latitude member [longitude latitude member ...] 添加一个或多个地理空间位置到sorted

Redis 集群演进探讨和总结

丶灬走出姿态 提交于 2020-08-08 21:49:31
Redis 集群演进探讨和总结 Redis为什么需要集群? 首先Redis单实例主要有单点,容量有限,流量压力上限的问题。 Redis单点故障,可以通过主从复制replication,和自动故障转移sentinel哨兵机制。 但Redis单Master实例提供读写服务,仍然有容量和压力问题,因此需要数据分区,构建多个Master实例同时提供读写服务(不仅限于从replica节点提供读服务)。 那么就需要一定的机制保证数据分区。这样能充分把容量分摊到多台计算机,或能充分利用多核计算机的性能。 并且数据在各个主Master节点间不能混乱,当然最好还能支持在线数据热迁移的特性。 探讨数据分区方案 针对数据分区,一般来说,分为两个大类: 逻辑拆分: 逻辑上能拆分,比如 Redis 中的 M1 节点 存储 A服务需要的业务数据,而 Redis 中的 M2 节点存储 B服务需要的业务数据。 数据分区: 当逻辑上不能拆分,那么只能按数据来拆分,需要保证客户端读和写数据一致。 因此需要一个高效快速的数据结构来路由对应的Master节点。 最容易想到的就是类比 Java 中的 HashMap, 采用 哈希算法,快速找到,快速设置。 这里有四种方式,分别是固定取模,随机,哈希一致性,哈希槽。 固定取模 假设有三个 Master,配置IP 和权重如下: Real Server IP weight 10

centos7搭建redis集群

陌路散爱 提交于 2020-08-08 09:39:26
搭建环境 系统: centos 7.4 服务器金山云 安装ruby环境 [root@jsy-bj-test00 ~]# yum install -y ruby rubygems 复制6份redis服务 [work@jsy-bj-test00 ~]$ cp -rp redis redis1 [work@jsy-bj-test00 ~]$ cp -rp redis redis2 [work@jsy-bj-test00 ~]$ cp -rp redis redis3 redis配置文件修改 #六个节点需做如下更改 [work@jsy-bj-test00 ~]$ vim redis1/etc/redis.conf [work@jsy-bj-test00 ~]$ sed -i 's/port 6379/port 6380/g' redis5/etc/redis.conf #修改端口 port 6380 #打开注释,开启集群模式 cluster-enabled yes #集群的配置文件 cluster-config-file nodes-6380.conf [work@jsy-bj-test00 ~]$ sed -i 's/cluster-config-file nodes-6379.conf/cluster-config-file nodes-6380.conf/g' redis5/etc

redis主从全分布集群(单机模拟)

痞子三分冷 提交于 2020-08-08 05:17:10
全分布式redis集群搭建:单节点多实例 1. 准备:redis-3.0.4.tar.gz redis-3.3.0.gem 2 redis-cluster目录下解压redis 3.0 : # tar xf redis.....gz 3 redis目录下make命令编译拷贝bin至 /opt/sxt/redis/下 # make && make PREFIX=/opt/sxt/redis install 成功后会有哨兵显示 4 测试 是否成功 # re+table 5 安装rubby编译环境 # yum -y install ruby rubygems 6 redis-cluster 目录下安装 redis gem 模块: # gem install --local redis-3.3.0.gem 8 创建文件目录、主从节点并匹配端口(已完成): redis集群 3.x版本 物理节点1个 指定3个主节点端口为7000、7001、7002 对应的3个从节点端口为7003、7004、7005 mkdir cluster-test cd cluster-test mkdir 7000 7001 7002 7003 7004 7005 9 创建配置文件redis.conf(启集群模式: 3.0 支持单机集群,但必须在配置文件中说明) (已完成) 指定不冲突的端口 及 <对应端口号> 文件内容

今天,你遇到redis线上连接超时了吗?

|▌冷眼眸甩不掉的悲伤 提交于 2020-08-07 07:01:55
一封报警邮件,大量服务节点 redis 响应超时。 又来,好烦。 redis 响应变慢,查看日志,发现大量 TimeoutException。 大量TimeoutException,说明当前redis服务节点上已经堆积了大量的连接查询,超出redis服务能力,再次尝试连接的客户端,redis 服务节点直接拒绝,抛出错误。 那到底是什么导致了这种情况的发生呢? 总结起来,我们可以从以下几方面进行关注: 一、redis 服务节点受到外部关联影响 redis服务所在服务器,物理机的资源竞争及网络状况等。同一台服务器上的服务必然面对着服务资源的竞争,CPU,内存,固存等。 1、CPU资源竞争 redis属于CPU密集型服务,对CPU资源依赖尤为紧密,当所在服务器存在其它CPU密集型应用时,必然会影响redis的服务能力,尤其是在其它服务对CPU资源消耗不稳定的情况下。 因此,在实际规划redis这种基础性数据服务时应该注意一下几点: 1)一般不要和其它类型的服务进行混部。 2)同类型的redis服务,也应该针对所服务的不同上层应用进行资源隔离。 说到CPU关联性,可能有人会问是否应该对redis服务进行CPU绑定,以降低由CPU上下文切换带来的性能消耗及关联影响? 简单来说,是可以的,这种优化可以针对任何CPU亲和性要求比较高的服务,但是在此处,有一点我们也应该特别注意:我们在

5000+字硬核干货!Redis 分布式集群部署实战

点点圈 提交于 2020-08-07 04:32:25
原理: Redis集群采用一致性哈希槽的方式将集群中每个主节点都分配一定的哈希槽,对写入的数据进行哈希后分配到某个主节点进行存储。 集群使用公式(CRC16 key)& 16384计算键key数据那个槽。 16384个slot均匀分布在各个节点上。 集群中每个主节点将承担一部分槽点的维护,而槽点中存储着数据,每个主节点都有至少一个从节点用于高可用。 节点通信方式: 开启一个端口 设置的端口号+10000,用于集群之间节点通信交换信息。 每个节点默认每秒10次选择随机5个节点发送ping消息,将自身信息和知道的集群信息传递,收到ping消息后返回pong消息做回复,最后通过这种随机的消息交换,最终每个节点将获得所有信息。 当某个主节点挂掉,所有节点将会发现主节点挂掉了,作为主节点的从节点,就会接替主节点的工作,然后告诉所有其它节点,他成为了主。这样其它存活节点,就将它们维护的信息表更新从节点将接任做主,如果都挂掉集群将报错。当从一个节点操作,根据一致性哈希计算后将存储在其中一个主节点中,从节点将同步主的数据。 redis cluster是去中心化的,集群中的每个节点都是平等的关系,每个节点都保存各自的数据和整个集群的状态。每个节点都和其他所有节点连接,而且这些连接保持活跃。 搭建集群时,会为每一个分片的主节点,对应一个从节点。实现slaveof功能,同时当主节点down

【redis命令集合】

穿精又带淫゛_ 提交于 2020-08-06 08:34:25
查询redis客户端 locate redis-cli 【注:locate命令找不到,请参考 https://my.oschina.net/u/3668859/blog/4308479 】 进入redis客户端 客户端目录 -h 客户端ip -p 端口号 EX: /opt/redis/redis-5.0.7/test/redis-cli -h 10.10.10.10 -p 6379 客户端目录 -c -h 客户端ip -p 端口号 EX: /opt/redis_cluster/redis/redis-5.0.7/test/redis-cli -c -h 10.10.10.10 -p 6379 注:redis默认端口号为6379,默认可省,【-c】参数是表示集群的意思,查询时会查询所有的redis,而不仅仅只是你指定的客户端ip。 在查询后输入 get 1 ,可以知道所查询的key是存储在哪台redis。 根据key模糊查询, keyword为需要查询的关键字 keys keyword* 获取某个key的value, key需要替换成需要查询的关键字,若不存在,则返回nil get key 修改key的名称,oldName为原本key的名称,newName为key的新名称 rename oldName newName 设置value值/替换value值 set key value

高可用Redis:Redis Cluster

↘锁芯ラ 提交于 2020-08-06 04:44:27
1.为什么要实现Redis Cluster 1.主从复制不能实现高可用 2.随着公司发展,用户数量增多,并发越来越多,业务需要更高的QPS,而主从复制中单机的QPS可能无法满足业务需求 3.数据量的考虑,现有服务器内存不能满足业务数据的需要时,单纯向服务器添加内存不能达到要求,此时需要考虑分布式需求,把数据分布到不同服务器上 4.网络流量需求:业务的流量已经超过服务器的网卡的上限值,可以考虑使用分布式来进行分流 5.离线计算,需要中间环节缓冲等别的需求 2.数据分布 2.1 为什么要做数据分布 全量数据,单机Redis节点无法满足要求,按照分区规则把数据分到若干个子集当中 2.2 常用数据分布方式之顺序分布 比如:1到100个数字,要保存在3个节点上,按照顺序分区,把数据平均分配三个节点上 1号到33号数据保存到节点1上,34号到66号数据保存到节点2上,67号到100号数据保存到节点3上 顺序分区常用在关系型数据库的设计 2.3 常用数据分布方式之哈希分布 例如1到100个数字,对每个数字进行哈希运算,然后对每个数的哈希结果除以节点数进行取余,余数为1则保存在第1个节点上,余数为2则保存在第2个节点上,余数为0则保存在第3个节点,这样可以保证数据被打散,同时保证数据分布的比较均匀 哈希分布方式分为三个分区方式: 2.3.1 节点取余分区 比如有100个数据

批量删除redis中无用的key

荒凉一梦 提交于 2020-08-05 22:08:02
Linux: redis-cli -a " password " -n 0 -p 6379 EVAL " local keys = redis.call('keys', ARGV[1]) for i=1,#keys,5000 do redis.call('del', unpack(keys, i, math.min(i+4999, #keys))) end return #keys " 0 " pattern " 注: 1)"password"表示密码。例如:test123 2)-n 0 表示0号库,如果要删除的数据不在0号库,请自行修改。例如 :-n 10 3)-p 6379 表示 redis 的服务端口,同样根据自己的服务器情况自行修改。例如:-p 33679 4)"pattern" 表示模糊查询的正则。例如:Model_Goods:* 完整例子: redis-cli -a test123 -n 15 -p 6379 EVAL " local keys = redis.call('keys', ARGV[1]) for i=1,#keys,5000 do redis.call('del', unpack(keys, i, math.min(i+4999, #keys))) end return #keys " 0 Model_Goods:* 其他: redis-cli 一般在