
Redis
云原生AI百宝箱
行万里路,此处相逢,共话云原生A之道。偶逗趣事,明月清风,与君同坐。已出版《Kubernetes:云原生与容器编排实战》,将出版《A大模型原理与场景应用》
展开
-
Redis不同数据类型命令使用及应用场景
1.1Redis数据类型Redis数据类型:Redis使用key/value格式存储数据,其中key的类型永远是string,而value的类型非常丰富;常用的数据类型:string:存储字符串(最基础的数据类型,二进制的文件(图片、视频)512M)list:是一个集合,可以在头部或者尾部操作数据hash(Map):采用键值对存储set:无序不可重复的集合Sort...原创 2017-11-09 20:24:53 · 15138 阅读 · 0 评论 -
为什么我们做分布式选择使用Redis?
绝大部分写业务的程序员,在实际开发中使用 Redis 的时候,只会 Set Value 和 Get Value 两个操作,对 Redis 整体缺乏一个认知。这里对Redis 常见问题做一个总结,解决大家的知识盲点。1、为什么使用 Redis在项目中使用 Redis,主要考虑两个角度:性能和并发。如果只是为了分布式锁这些其他功能,还有其他中间件 Zookpeer 等代替,并非一定要使用 R...转载 2018-10-09 17:28:34 · 5952 阅读 · 0 评论 -
分布式Session:基于Spring-Session 和 Redis实现
分布式Session-前言在Web项目开发中,会话管理是一个很重要的部分,用于存储与用户相关的数据。通常是由符合session规范的容器来负责存储管理,也就是一旦容器关闭,重启会导致会话失效。因此打造一个高可用性的系统,必须将session管理从容器中独立出来。共享Session问题 HttpSession是通过Servlet容器创建和管理的,像Tomca...原创 2017-11-07 12:40:06 · 14604 阅读 · 0 评论 -
Redis集群:Redis3.X集群环境搭建、查询集群信息
redis集群机制(1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。(2)节点的fail是通过集群中超过半数的节点检测失效时才生效。(3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。(4)redis-cluster把所有的物理节点映射到[0-16383]s...原创 2018-12-13 08:22:23 · 6696 阅读 · 0 评论 -
Redis集群:主从节点添加和删除
添加主节点集群创建成功后可以向集群中添加节点,下面是添加一个master主节点 添加7007结点,参考集群结点规划章节添加一个“7007”目录作为新节点。执行下边命令:./redis-trib.rb add-node 192.168.101.3:7007 192.168.101.3:7001 查看集群结点发现7007已添加到集群中: hash槽重新分配...原创 2018-12-13 08:24:19 · 8807 阅读 · 0 评论 -
Redis集群:使用Spring和jedisCluster操作Redis集群
jedisCluster 非Spring和jedisCluster操作Redis集群jar包 <!-- 指定版本号 --><properties> <!-- JEDIS --> <jedis.version>2.7.1</jedis.version></properties><...原创 2018-12-13 08:28:01 · 6484 阅读 · 0 评论 -
redis.conf:配置详细说明
redis.confRedis 支持很多的参数,但都有默认值。daemonize:默认情况下,redis 不是在后台运行的,如果需要在后台运行,把该项的值更改为yespidfile当Redis 在后台运行的时候,Redis 默认会把pid 文件放在/var/run/redis.pid,你可以配置到其他地址。当运行多个redis 服务时,需要指定不同的p...原创 2018-12-13 10:39:04 · 6011 阅读 · 0 评论 -
Redis集群:/usr/bin/env: ruby: No such file or directory
问题现象执行创建集群命令:./redis-trib.rb create --replicas 1 192.168.101.3:7001 192.168.101.3:7002 192.168.101.3:7003 192.168.101.3:7004 192.168.101.3:7005 192.168.101.3:7006报错:/usr/bin/env: ruby: No su...原创 2018-12-27 11:14:02 · 16220 阅读 · 0 评论 -
Redis集群:./redis-trib.rb:24:in `require': no such file to load -- rubygems
问题现象执行创建集群命令:./redis-trib.rb create --replicas 1 192.168.101.3:7001 192.168.101.3:7002 192.168.101.3:7003 192.168.101.3:7004 192.168.101.3:7005 192.168.101.3:7006报错:./redis-trib.rb:24:in `re...原创 2018-12-28 09:03:21 · 2617 阅读 · 0 评论 -
Redis集群:gem_original_require: no such file to load -- redis
问题现象执行创建集群命令:./redis-trib.rb create --replicas 1 192.168.101.3:7001 192.168.101.3:7002 192.168.101.3:7003 192.168.101.3:7004 192.168.101.3:7005 192.168.101.3:7006报错:/usr/lib/ruby/site_ruby/1...原创 2018-12-28 09:13:31 · 2456 阅读 · 0 评论 -
缓存穿透,缓存击穿,缓存雪崩解决方案分析
缓存处理流程前台请求,后台先从缓存中取数据,取到直接返回结果,取不到时从数据库中取,数据库取到更新缓存,并返回结果,数据库也没取到,那直接返回空结果。设计一个缓存系统,不得不要考虑的问题就是:缓存穿透、缓存击穿与失效时的雪崩效应。缓存穿透缓存穿透是指查询一个一定不存在的数据(缓存和数据库中都没有的数据),由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到...转载 2019-01-20 20:20:50 · 10219 阅读 · 0 评论 -
Redis: 分布式锁的正确实现方式( Java 版 )
前言分布式锁一般有三种实现方式:1. 数据库乐观锁;2. 基于Redis的分布式锁;3. 基于ZooKeeper的分布式锁。本篇博客将介绍第二种方式,基于Redis实现分布式锁。虽然网上已经有各种介绍Redis分布式锁实现的博客,然而他们的实现却有着各种各样的问题,为了避免误人子弟,本篇博客将详细介绍如何正确地实现Redis分布式锁。可靠性首先,为了确保分布式锁可用,我们至少要确保锁的...转载 2019-02-14 16:43:02 · 9061 阅读 · 0 评论 -
Redis:Bitmaps使用场景-用户签到、统计活跃用户、用户在线状态
BitMap是什么就是通过一个bit位来表示某个元素对应的值或者状态,其中的key就是对应元素本身。我们知道8个bit可以组成一个Byte,所以bitmap本身会极大的节省储存空间。Redis中的BitMapRedis从2.2.0版本开始新增了setbit,getbit,bitcount等几个bitmap相关命令。虽然是新命令,但是并没有新增新的数据类型,因为setbit等命令只不过是...转载 2018-09-11 18:03:16 · 13087 阅读 · 0 评论 -
JedisDataException: Please close pipeline or multi block before calling this method
错误原因transaction错误使用pipeline错误使用具体分析transaction错误使用Redis事务的执行结果是在exec之后才统一返回,所以Jedis会用一个Response对象最为事务对象transaction的执行放回值。如果我们在transaction执行exec方法之前调用response对象的get方法会出现异常:Exception in thread "main" re...原创 2018-04-09 07:34:28 · 22693 阅读 · 0 评论 -
Redis发布订阅和应用场景
发布订阅-应用场景Pub/Sub 从字面上理解就是发布(Publish)与订阅(Subscribe),在Redis中,你可以设定对某一个key值进行消息发布及消息订阅,当一个key值上进行了消息发布后,所有订阅它的客户端都会收到相应的消息。这一功能最明显的用法就是构建实时消息系统,比如普通的即时聊天,群聊等功能。订阅某个channel的信息发布信息到某个channel上简...原创 2017-11-10 08:46:39 · 39783 阅读 · 12 评论 -
redis-GEO地理位置
Redis 3.2版本一个重大的更新是新增了GEO地理位置相关的命令。目前Redis对地理位置支持提供了一下6个命令:1. geoadd: 增加地理位置的坐标。2. geodist: 获取两个地理位置的距离。3. geohash: 获取地理位置的GeoHash值。4. geopos: 获取地理位置的坐标。5. georadius: 根据给定经纬度坐标获取指定范围内的地理位置集合原创 2017-11-29 19:38:45 · 14307 阅读 · 1 评论 -
Redis持久化:RDB和AOF配置和对比
1. 前言Redis的高性能是由于其将所有数据都存储在了内存中,为了使Redis在重启之后仍能保证数据不丢失,需要将数据从内存中同步到硬盘中,这一过程就是持久化。Redis支持两种方式的持久化,一种是RDB方式,一种是AOF方式。可以单独使用其中一种或将二者结合使用。2.RDB持久化持久化机制:指定的时间间隔内将内存中的数据集以快照写入磁盘RDB方式的持久化是通过快...原创 2017-11-28 09:52:12 · 15945 阅读 · 0 评论 -
Redis命令:scan实现模糊查询
1.scan前言从Redis v2.8开始,SCAN命令已经可用,它允许使用游标从keyspace中检索键。对比KEYS命令,虽然SCAN无法一次性返回所有匹配结果,但是却规避了阻塞系统这个高风险,从而也让一些操作可以放在主节点上执行。2.SCAN相关命令SCAN相关命令包括SSCAN 命令、HSCAN 命令和 ZSCAN 命令,分别用于集合、哈希键及有续集等SCAN 命令用...原创 2017-12-31 16:54:33 · 88474 阅读 · 4 评论 -
Redis:EVAL执行Lua脚本
EVAL 脚本 numkeys 键[键...] arg [arg ...]自Redis2.6.0版本起可用。 时间复杂度:取决于执行的脚本。 EVAL介绍 EVAL和EVALSHA用于从Redis2.6.0版本,开始使用内置在Redis中的Lua解释器来评估脚本。 EVAL的第一个参数是一个Lua 5.1脚本。脚本不需要定义一个Lua函数(不应该)。这只是一个将在Red...翻译 2018-01-02 20:14:18 · 29933 阅读 · 0 评论 -
Redis: pipeline加速Redis请求,实现批处理
Redis是基于TCP连接进行通信Redis是使用客户端 - 服务器模型的TCP服务器,称为请求/响应协议。这意味着通常一个请求是通过以下步骤完成的:客户端向服务器发送查询,并通常以阻塞的方式从套接字读取服务器响应。 服务器处理命令并将响应发送回客户端。知道redis是基于TCP连接进行通信的,每一个request/response都需要经历一个RTT(Round-Trip ...原创 2018-01-04 14:10:23 · 17506 阅读 · 0 评论 -
Redis事务:用法,常见错误和API
MULTI,EXEC,DISCARD和WATCH是Redis事务的基础。它们允许在一个步骤中执行一组命令,并有两个重要的保证:事务中的所有命令都被序列化并按顺序执行。在执行Redis事务的过程中,不会发生由另一个客户端发出的请求。这保证了命令作为一个单独的操作被执行。要么所有的命令都没有被处理、要么没有命令被执行,所以Redis事务也是原子的。EXEC命令,触发事务中的所有翻译 2018-01-05 14:34:20 · 15271 阅读 · 0 评论 -
Redis:Bitmaps使用场景和常用命令
Bitmaps介绍Redis提供的Bitmaps这个“数据结构”可以实现对位的操作。Bitmaps本身不是一种数据结构,实际上就是字符串,但是它可以对字符串的位进行操作。 可以把Bitmaps想象成一个以位为单位数组,数组中的每个单元只能存0或者1,数组的下标在bitmaps中叫做偏移量。 单个bitmaps的最大长度是512MB,即2^32个比特位。 bitmaps的最大优势是节省存储...原创 2018-01-26 18:30:04 · 16915 阅读 · 0 评论 -
阿里云Redis开发规范
本文介绍了在使用阿里云Redis的开发规范,从键值设计、命令使用、客户端使用、相关工具等方面进行说明,通过本文的介绍可以减少使用Redis过程带来的问题。一、键值设计1. key名设计【建议】: 可读性和可管理性以业务名(或数据库名)为前缀(防止key冲突),用冒号分隔,比如业务名:表名:idugc:video:1【建议】:简洁性保证语义的前提下,控制key的长度,当key较多时,内存占用也不容忽...转载 2018-03-15 20:17:34 · 14172 阅读 · 0 评论 -
Jedis常见异常汇总
Jedis虽然使用起来比较简单,但是如果不能根据使用场景设置合理的参数(例如连接池参数),不合理的使用一些功能(例如Lua和事务)也会产生很多问题,本文对这些问题逐个说明:详细目录:一、redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool二、redis.clie...转载 2018-03-19 20:00:01 · 28295 阅读 · 0 评论 -
JedisPool资源池优化
背景合理的JedisPool资源池参数设置能为业务使用Redis保驾护航,本文将对JedisPool的使用、资源池的参数进行详细说明,最后给出“最合理”配置。一、使用方法以官方的2.9.0为例子(Jedis Release),Maven依赖如下:<dependency> <groupId>redis.clients</groupId> <a...转载 2018-03-19 20:23:43 · 13824 阅读 · 0 评论 -
Redis对象底层数据结构实现概述
本文是一篇redis读书笔记,主要内容整理自 Redis设计与实现。如果你想快速了解redis底层数据结构,相信这篇文章会有所帮助。 文章主要分为两大部分,第一部分介绍了Redis对象的各种底层数据结构,第二部分总结了redis对象与各种底层数据结构的关系。1 Redis对象底层数据结构1.1 SDS(简单动态字符串)Redis没有直接使用C语言传统的字符串表示(以空字符结尾的...转载 2019-03-26 11:44:16 · 709 阅读 · 0 评论