RedisClient

基于Swoole和Redis实现的并发队列处理系统

耗尽温柔 提交于 2021-02-01 20:18:33
背景 由于 PHP 不支持多线程,但是作为一个完善的系统,有很多操作都是需要异步完成的。为了完成这些异步操作,我们做了一个基于Redis队列任务系统。 大家知道,一个消息队列处理系统主要分为两大部分:消费者和生产者。 在我们的系统中,主系统作为生产者,任务系统作为消费者。 具体的工作流程如下: 1、主系统将需要需要处理的任务名称+任务参数push到队列中。 2、任务系统实时的对任务队列进行pop,pop出来一个任务就fork一个子进程,由子进程完成具体的任务逻辑。 具体代码如下: /** * 启动守护进程 */ public function runAction() { Tools::log_message( 'ERROR' , 'daemon/run' . ' | action: restart' , 'daemon-' ); while (true) { $this ->fork_process(); } exit ; } /** * 创建子进程 */ private function fork_process() { $ppid = getmypid(); $pid = pcntl_fork(); if ( $pid == 0 ) { // 子进程 $pid = posix_getpid(); // echo "* Process {$pid} was created nn"

windows 系统,PHP安装扩展redis缓存步骤

喜欢而已 提交于 2021-01-05 17:37:42
先安装redis到windows上 下载redis 根据自己系统下载对应版本 下载redis https://github.com/microsoftarchive/redis/releases 安装redis比较简单,直接解压到C盘,重命名为redis,打开cmd 切换到redis目录下输入redis-server.exe redis.windows.conf,看到以下界面说明安装成功,注意这个窗口不能关闭 2配资PHP扩展 1、查看自己PHP的版本 echo phpinfo() 查看自己的版本: VC是 14,系统是 64位的,所以一定要选对版本,因为这个版本我折腾了好久。 2、根据自己的PHP版本、编译器的版本以及cpu 我的是php是 7.0 、VC14、X64。附上我的下载链接redis、igbinary的链接: Redis: http: //windows.php.net/downloads/pecl/releases/redis/ igbinary : http:/ /windows.php.net/downloads /pecl/releases /igbinary/ 可以根据以上两个链接选择自己的版本号,我下载的是这 php_redis- 3.0. 0- 7.0-ts-vc14-x64 和 php_igbinary- 2.0. 6rc1- 7.0-ts-vc14

使用可视化工具redisclient连接redis

一笑奈何 提交于 2020-12-29 03:10:37
可视化工具推荐:http://database.51cto.com/art/201505/477692.htm 1.连接redis服务端    1.1 设置连接密码 :在redis根目录下,双击redis-cli.exe, 输入命令:redis-cli.exe -h 127.0.0.1 -p 6379 -n 1 1就是密码 1.2 使用redisClient连接redis 连接后如图: 2.使用RedisClient 2.1 2.2:使用控制台 在控制台输入redis命令 来源: oschina 链接: https://my.oschina.net/u/4262399/blog/3969451

windows下redis可视化客户端redisClient与命令redis_cli的安装

寵の児 提交于 2020-12-29 02:33:54
一、 Window 下安装 下载地址: https://github.com/MSOpenTech/redis/releases 。 Redis 支持 32 位和 64 位。这个需要根据你系统平台的实际情况选择,这里我们下载 Redis-x64-xxx.zip压缩包到 C 盘,解压后,将文件夹重新命名为 redis。 运行服务端 这时候另启一个cmd窗口,原来的不要关闭,不然就无法访问服务端了。 切换到redis目录下运行 redis-cli.exe 。 C:\redis>redis-cli.exe 127.0.0.1:6379> ping PONG 以上说明我们已经成功安装了redis。 二、重启 考虑到redis有可能正在将内存中的数据同步到硬盘中,强行终止redis进程有可能导致数据丢失,正确停止redis的方式应该是向redis发送shutdown命令,通过客户端来关闭redis服务端。方法为: C:\redis>redis-cli.exe 127.0.0.1:6379> shutdown Not connected 当redis收到shutdown命令后,会断开所有的客户端连接,然后根据配置执行持久化,最后退出。 [17796] 15 May 14:53:18.771 # User requested shutdown... [17796] 15 May 14:53:18

redis在springcloud中的使用

我与影子孤独终老i 提交于 2020-12-17 06:11:31
1.redis的使用场景 做中央缓存,通过空间换时间 特点:快、安全、持久、可用jedis java客户端 启动服务命令:redis-server.exe redis.conf 2.优化的好处 每次请求都要从数据库中查询数据,对数据库服务器压力很大; 3.常用的缓存实现 jpa/mybits的二级缓存,但是不能支持集群;所以用到了redis 4.怎么实现交互 前台请求-》先从redis中查询数据,有就之久返回数据;没有查询到数据就从数据库中查询,并同步到redis中,再返回前台; 5.保证redis中数据与数据库中的数据一致 修改时,先修改数据库中的数据再同步到redis中 6.redis怎么储存对象 序列化和 json字符串(采纳),,,一般使用json字符串的方式 --1:存: 就是把数据库的数据存到 redis(json字符串) --2:取: 就是把 redis(json字符串)的数据转换成对象 --3对象与json字符串的转换 我们使用到了 Alibaba:fastjson---功能很强大 7.redis的项目实战 --导包 <!--redis的依赖--> <!-- https://mvnrepository.com/artifact/redis.clients/jedis --> < dependency > < groupId >redis.clients </

如何在 .NET 中使用 Redis缓存

旧城冷巷雨未停 提交于 2020-12-01 15:41:49
译文链接:https://www.infoworld.com/article/3187905/how-to-work-with-redis-cache-in-net.html 缓存是一种状态管理机制,通常用于提升你的应用程序性能,它很大程度上能够减少一个请求对你系统资源的消耗。 Redis是一个开源的,高性能的,NoSql数据库,它的速度非常快,而且所有的数据都是灌入到内存中,从内存中读写数据的性能开销真的是微乎其微,值得一提的是 Redis 采用的是BSD license,说明你可以将它用于商业和非商业的用途。 Redis是什么,我为什么要用它? Redis 是最流行的开源,NoSQL,基于内存的数据存储,而且非常????的是:它的数据存储支持多个数据结构,eg:strings,hashes,sets,lists 等等,Redis内部也提供了对 复制分发 和 事务 的支持,同时在数据持久化方面也做的非常好。 如果你的应用程序需要读取大量的数据,并且你的机器有很多的空闲内存,在这样的场景下如果你有提升性能的需求,采用 Redis 是一个非常好的选择,将Redis应用到你的程序中操作步骤也是非常简单的,接下来我们会一起讨论下如何去安装,配置和使用。 安装Redis 本篇讨论下如何在 Windows 平台上安装 Redis,安装包可以到 GitHub:https://github

Redis 管道(Pipelining)、PUB/SUB

安稳与你 提交于 2020-08-19 22:59:04
http://redis.cn/topics/pipelining.html 是否可以这样理解: 如果是组织大量的、无依赖关系的命令,可以选择管道,当然也可以选择脚本。 如果命令之间有依赖关系,比如后续的命令需要处理先前命令的返回值,只能选择脚本。 Redis 提供了 PUB/SUB 订阅功能,实际我们在使用时,一定要注意,它提供的 不是一个可靠的 订阅系统 Redis 是不持久化 Publish 的消息的 当然,不能说 Redis Pub/Sub 毫无使用的场景,以下艿艿来列举几个: 在使用 Redis Sentinel 做高可用时,Jedis 通过 Redis Pub/Sub 功能,实现对 Redis 主节点的故障切换,刷新 Jedis 客户端的主节点的缓存。 如果出现 Redis Connection 订阅的异常断开,会重新 主动 去 Redis Sentinel 的最新主节点信息, 从而解决 Redis Pub/Sub 可能因为网络问题,丢失消息 Redis Sentinel 节点之间的部分信息同步,通过 Redis Pub/Sub 订阅发布。 在我们实现 Redis 分布式锁时,如果获取不到锁,可以通过 Redis 的 Pub/Sub 订阅锁释放消息,从而实现其它获得不到锁的线程,快速抢占锁。 当然,Redis Client 释放锁时,需要 PUBLISH

C# Redis五种数据类型的操作--简易易懂

我是研究僧i 提交于 2020-08-16 00:27:39
    前段时间学习了Redis,一直在忙着工作和一些其他的事情,这两天有空了,就把这学习到的技术分享出来给大家,谢谢 Redis是什么? Redis的特点 Redis使用场景 Redis数据类型    一、.Redis是什么? Redis是一个完全免费开源的,基于 内存的高性能的key-value存储系统 ,可以用作数据库、缓存和消息中间件。支持多种类型的数据结构. Redis内置数据持久化、LRU驱动事件、事物、主从复制、哨兵机制、集群、自动分区、lua脚本提供高可用性.. Redis全称为:Remote Dictionary Server (远程数据服务) Redis是一种非关系型数据库    二、Redis的特点 Redis以内存作为数据存储介质,读写数据的效率极高。速度快:使用标准c语言编写,所有数据在内存存储,读速度:110000次/s 写速度:81000次/s Redis跟memcache不同的是,储存在Redis中的数据是持久化的,断电或重启,数据也不会丢失。 Redis的存储分为内存存储、磁盘存储和log文件。 Redis可以从磁盘重新将数据加载到内存中,也可以通过配置文件对其进行配置,因此,redis才能实现持久化。 Redis支持主从模式,可以配置集群,更利于支撑大型的项目。 Redis是 单线程 :一次只能执行一条命令,拒绝长命令(因为Redis基于内存

C# Redis实战(六)

孤街醉人 提交于 2020-08-14 08:25:39
六、查询数据 在 C# Redis实战(五) 中介绍了如何删除Redis中数据,本篇将继续介绍Redis中查询的写法。 1、使用Linq匹配关键字查询 using (var redisClient = RedisManager.GetClient()) { var user = redisClient.GetTypedClient<User>(); var userList = user.GetAll().Where(x => x.Job.Position.Contains(txtScreenPosition.Text)).ToList(); if (userList.Count > 0) { var htmlStr = string.Empty; foreach (var u in userList) { htmlStr += "<li>ID=" + u.Id + " 姓名:" + u.Name + " 所在部门:" + u.Job.Position + "</li>"; } lblPeople.Text = htmlStr; } lblShow.Text = "筛选后共有:" + userList.Count.ToString() + "人!"; } 以上 代码实现了匹配所在部门来查询数据的功能,输入.NET,过滤掉Java部门的一人。查询结果如下: 2 、通过key来查询数据

【原创】强撸基于 .NET 的 Redis Cluster 集群访问组件

|▌冷眼眸甩不掉的悲伤 提交于 2020-08-14 01:56:12
  Hello 大家好,我是TANZAME,我们又见面了。今天我们来聊聊怎么手撸一个 Redis Cluster 集群客户端,纯手工有干货,您细品。   随着业务增长,线上环境的QPS暴增,自然而然将当前的单机 Redis 切换到群集模式。燃鹅,我们悲剧地发现,ServiceStack.Redis这个官方推荐的 .NET 客户端并没有支持集群模式。一通度娘翻墙无果后,决定自己强撸一个基于ServiceStack.Redis的Redis集群访问组件。   话不多说,先上运行效果图:   Redis-Cluster集群使用 hash slot 算法对每个key计算CRC16值,然后对16383取模,可以获取key对应的 hash slot。Redis-Cluster中每个master都会持有部分 slot,在访问key时根据计算出来的hash slot去找到具体的master节点,再由当前找到的节点去执行具体的 Redis 命令(具体可查阅 官方说明文档 )。   由于 ServiceStack.Redis已经实现了单个实例的Redis命令,因此我们可以将即将要实现的 Redis 集群客户端当做一个代理,它只负责计算 key 落在哪一个具体节点(寻址)然后将Redis命令转发给对应的节点执行即可。   ServiceStack.Redis的RedisClient是非线程安全的