202011-10 Redis 的 GeoHash详解 Redis在3.2版本以后增加了地理位置GEO模块,意味着我们可以使用Redis来实现摩拜单车「附近的Mobike」、美团和饿了么「附近的餐馆」这样的功能了。用数据库来算附近的人地图元素的位置数据使用二维的经纬度表示,经度范围(-180,180],纬度范围(-90,90],纬度正负以赤道为界,北正南负,经度正负以本初子午线(英国格林尼治天文台)为界,东正西负。比如掘金办公室在望京SOHO,它的经纬度坐标是(116.48105,39.996794)... 继续阅读 >
202011-10 通过kubesphere部署redis的方法 docker部署redis命令dockerrun--nameredis-p6379:6379-d--restart=alwaysa4d3716dbb72redis-server--appendonlyyes--requirepass"123456"创建配置,点击配置中心->配置->创建配置这里的配置信息就和上面redis-server后面的一样创建存储卷创建redis服务选择无状态服务,因为有状态服务不能对外暴露端口,只有无状态服务才可以;当然如果上线部署的话还是要选择有状态服务,这里我们只是测试,选择无状态服务即可。选择... 继续阅读 >
202011-03 为啥Redis使用pipelining会更快 为啥Redis使用pipelining会更快?这是一个很考究细节的问题,大部分人都会说:因为减少了网络开销,那么,看如下例子:importtimeimportredisclient=redis.Redis(decode_responses=True)count=10000defno_pipelining():foriinrange(count):client.set("test:nopp:{}".format(i),i,ex=100)defwith_pipelining():pp=client.pipeline()foriinrange(count):pp.set("test:withpp:{}".format(i),i,ex=... 继续阅读 >
202010-30 Redis常用数据类型命令实例汇总 存储sortedset:存储:zaddkeyscoremenber1scoremenber2...升序排列:zrangekeystartend[withscores]降序排列:zrevrangekeystartend[withscores]取得前三名:按照排名范围删除元素:zremrangebyrankkeystartstop例,删除3名到最后一名:返回成员在集合中的排名(从小到大):zrankkeymemberkeys的通用操作:删除指定的key:delkey1key2...获取所有与pattern匹配的key:keyspattern。*匹配一个或多个,... 继续阅读 >
202010-30 SpringBoot整合Redis的示例 redis是最常用的缓存数据库,常用于存储用户登录token、临时数据、定时相关数据等。redis是单线程的,所以redis的操作是原子性的,这样可以保证不会出现并发问题。redis基于内存,速度非常快,据测试,redis读的速度是110000次/s,写的速度是81000次/s本节介绍SpringBoot引入redis,以及使用RedisTemplate来操作redis数据。采用SpringBoot2.1.9.RELEASE,对应示例代码在:https://github.com/laolunsi/spring-boot-examples/tree/m... 继续阅读 >
202010-24 Redis持久化RDB和AOF区别详解 RDB是Redis内存到硬盘的快照,用于redis持久化,创建RDB二进制文件,将存储在内存中的数据,持久化的放到硬盘中,当我们需要这些数据的时候,启动载入RDB文件,数据将会被存入内存中,其实RDB就是一种快照的方式持久化存储数据,也可以作为一种复制媒介,这个我们后面在谈。RDB触发机制--主要三种方式save同步命令(会阻塞redis)bgsave异步命令(fork)自动Save同步命令save文件策略:生成一个临时文件,如果存在老的文件,... 继续阅读 >
202010-24 php redis setnx分布式锁简单原理解析 我就废话不多说了,大家还是直接看代码吧~<?php//高并发分布式锁header("Content-type:text/html;charset=utf-8");$redis=newRedis();$redis->connect('127.0.0.1',6379);echo"Connectiontoserversucessfully";//echo$redis->get("name");exit;$expire=1;$key='test1';$lock=false;$is_lock=$redis->setnx($key,time()+$expire);if(!$is_lock){$lock_time=$redis->get($key);//锁已过期,重置if($lock_time<tim... 继续阅读 >
202010-13 Python安装并操作redis实现流程详解 Redisredis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sortedset--有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据... 继续阅读 >
202010-10 redis中scan命令的基本实现方法 前言在一个天朗气清的日子,小灰登上了线上的redis打算查询数据。然而他只记得前缀而不知道整个键是多少,于是在命令行敲入了“keysxxx*”命令。瞬间服务卡死,报警邮件堆满了邮箱,而小灰,只能目瞪狗呆的等待着即将降临的casestudy。基本上,keys*命令都是在线上是被运维禁止的。redis的键在键值对大小大于hash-max-ziplist-value且个数小于hash-max-ziplist-entries的时候,是存放在散列表数据结构中的,在运行keys命令的时... 继续阅读 >
202010-10 高效异步redis客户端aredis优劣势原理解析 背景aredis是一款由同步的redis客户端redis-py改写而成的高效的异步redis客户端,在最新的1.0.7版本中完成了对于redis集群的支持。改动主要重写了底部建立连接和读取数据部分的代码,接口部分都向下兼容,便于使用者从redis-py的同步代码迁移到async和await的协程版本,详细文档请看aredis文档使用安装pipinstallaredis具体姿势可以参阅项目文档和例子,接口向下兼容redis-py,支持Python3.5及以上版本... 继续阅读 >
202010-10 如何利用Redis分布式锁实现控制并发操作 redis命令解释说道Redis的分布式锁都是通过setNx命令结合getset来实现的,在讲之前我们先了解下setNx和getset的意思,在redis官网是这样解释的注:redis的命令都是原子操作SETNXkeyvalue将key的值设为value,当且仅当key不存在。若给定的key已经存在,则SETNX不做任何动作。SETNX是『SETifNoteXists』(如果不存在,则SET)的简写。可用版本:1.0.0+时间复杂度:O(1)返回值:设置成功,返回1。设置失败,返回0... 继续阅读 >
202010-10 Java使用Redis实现秒杀功能 秒杀功能秒杀场景现在已经非常常见了,各种电商平台都有秒杀的产品,接下来我们模拟一个秒杀的项目,最终能够确保高并发下的线程安全。界面比较简单,但是功能基本实现。界面点击“秒杀点我”按钮后台就会输出秒杀结果。第一版使用Redis缓存数据库,使用一个key-value存储秒杀商品数量,使用set集合存储秒杀成功的用户。我们以商品0101为示例,设置商品的初始数量为200件。不考虑并发问题,实现功能。html、jsp、servlet文件不重要... 继续阅读 >
202010-10 springboot +redis 实现点赞、浏览、收藏、评论等数量的增减操作 springboot+redis实现点赞、浏览、收藏、评论等数量的增减操作前言第一次写博客,记录一下:最近做了一个帖子的收藏、点赞数量的功能,其实之前也做过类似的功能,因为之前一直使用的mysql总是感觉对于这种频繁需要改变的值,不应该给予Mysql过大的压力,本文章采用的是redis做了持久化。下面贴出关键代码:DataResponse是项目中使用的结果封装实体类;forumDTO是此功能的参数实体,如果有需要请留言。常量如下:privatestat... 继续阅读 >
202010-10 JSON序列化Redis读取出错问题解决方案 报错org.springframework.web.util.NestedServletException:Requestprocessingfailed;nestedexceptioniscom.alibaba.fastjson.JSONException:syntaxerror,expect{,actualstring,pos1,fastjson-version1.2.44问题分析在写入缓存的时候,hash结构,它的value值,在写入前使用JSON序列化了,JSON.toJSONString(value)在取缓存的时候把一个Collection作为对象序列化了,并不是把List序列化,所以在反序列化的时候... 继续阅读 >
202010-10 Redis打开rdb文件常用方法详解 阿里云的redis备份后为rdb文件,那么如何使用本地redis打开rdb文件呢?windows上操作方法整理方法一:windows安装的redis目录下,有个dump.rdb文件先把原来的备份,再把要打开的xxx.rdb文件命名成dump.rdb然后运行redis-server.exe就打开了再运行redis-cli.exe就可以命令访问了方法二:在redis.windows.conf文件中修改配置,搜索dbfilename,把dump.rdb改成指定的dbfilenamebak.rdb方法三:复制redis.windows.co... 继续阅读 >
202010-10 SpringBoot如何整合redis实现过期key监听事件 可以用于简单的过期订单取消支付、7天自动收货场景中1、SpringBoot整合redis参考https://www.jb51.net/article/170687.htm2、打开redis服务的配置文件添加notify-keyspace-eventsEx如果是注释了,就取消注释Linux安装redis:https://www.jb51.net/article/193265.htmWindows安装redis:https://www.jb51.net/article/176040.htm3、在redis配置类@Configuration添加如下内容@BeanRedisMessageListenerContainercontainer(R... 继续阅读 >