Fork me on GitHub

分类 redis 中的文章

长轮询

长轮询 实现原理: 与传统的轮询方式不同的是,当服务端接收到客户端的请求的时候,如果没有最新消息时不是立刻返回请求,而是等待一个最大超时时间。如果等待期间有最新消息则立刻返回。 相对于暴力的轮询,长轮询能够很大程度的减少客户端与服务端的连接进而缓解服务端的压力。 利用长轮询模拟推送服务,……

阅读全文

联想搜索

Redis 联想搜索实现 基于redis ZSET 例子: 当输入n时显示所有n开头的数据,当输入nb时显示所有nb开头的数据。 # 数据录入 127.0.0.1:6379> ZADD ss 0 'n' (integer) 1 127.0.0.1:6379> ZADD ss 0 'nb' (integer) 1 127.0.0.1:6379> ZADD ss 0 'nba' (integer) 1 # 搜索n 127.0.0.1:6379> ZRANK ss 'n' (integer) 0 127.0.0.1:6379> ZRANGE ss 0 -1 1) "n" 2) "nb" 3) "nba" # 搜索nb 127.0.0.1:6379> ZRANK ss 'nb' (integer) 1 127.0.0.1:6379> ZRANGE ss 1 -1 1) "nb" 2) "nba"……

阅读全文

发布订阅

发布订阅 消息多播,一个发布消息可以同时被多个订阅者收听 常用命令 发布 PUBLISH channel message 订阅 SUBSCRIBE channel [channel ...] PSUBSCRIBE pattern [pattern ...] python demo #!/usr/bin/env python import redis import time redis_pool = redis.ConnectionPool(host="192.168.6.14",port="6379") redis_client = redis.Redis(connection_pool=redis_pool) #生产者 def publishMessages(): while True: redis_client.publish("channel.shenyang","hello news "+time.asctime(time.localtime(time.time()))) time.sleep(2) #消费者 def subscibeMessages(): p = redis_client.pubsub() p.subscribe("channel.shenyang") while True: message = p.get_message() if message: print(message) else: time.sleep(1) ##加入超时时间堵塞读 def subscibeMessages(): p = redis_client.pubsub() p.subscribe("channel.shenyang") while True: message = p.get_message(timeout=10) # 10秒等待 if message: print(message) #阻塞消费者 def subscibeBlockMessages(): p = redis_client.pubsub() p.subscribe("channel.shenyang") for item in p.listen(): print(item['type'])……

阅读全文

基于Redis 的分布式锁实现

分布式锁场景 秒杀抢购茅台,车票 提前预约抢订车位,共享单车 特点,多个用户同一时间对同一个资源进行申请,并且只能允许一个用户申请成功。 分布式锁必要条件 布式系统环境下,一个方法在同一时间只能被一个机器的一个线程执行; 高可用的获取锁与释放锁; 高性能的获取锁与释放锁; 具备可重入特性; 具备锁……

阅读全文

Redis 应用场景

应用场景 作为一名匠人,当熟悉手里各样工具的特点。用起来才能得心应手。什么时候使用锯子,什么时候当用斧子。 同理熟知产品的技术特性,方可灵活运用。 在面对不同的业务需求时才能提供具有针对性的解决方案。 不求十八般兵器样样精通,但求不置斧锯于一旁只顾轮打锤。 Redis 都能干点啥 缓存 消息队列 循环列表……

阅读全文

Redis 持久化策略

持久化的两种方式 RDB 快照 AOF 日志 RDB 快照 快照一次全量备份。 特点: 保存时比较耗系统资源容易造成业务卡顿,恢复比较快。 原理: 使用操作系统的多进程COW(COPY ON Write)机制来实现快照持久化 命令: 堵塞 save ,非堵塞后台执行 bgsave 配置: save m n #配置快照(rdb)促发规则,格式:save <seconds> <changes> #save 900 1……

阅读全文

Redis Cluster

主从复制 原理说明参考 https://www.cnblogs.com/daofaziran/p/10978628.html 基本原理 主要是Redis没有wal日志机制。aof是先执行命令再记录。主从同步不是依赖aof日志。 通过单独的进程完成主从的同步。 初始时全量复制,SYNC。 然后进行增量复制PSYNC。在主库内存中维护一个偏移量master run id 。 当断开重新连接上比较偏移量,尝试……

阅读全文

Redis 6.0安装配置管理

安装 yum 方式 yum install -y http://rpms.famillecollet.com/enterprise/remi-release-7.rpm yum --enablerepo=remi install redis make 方式 升级gcc 版本临时生效,否则编译错误 yum -y install centos-release-scl yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils scl enable devtoolset-9 bash wget http://download.redis.io/releases/redis-6.0.1.tar.gz tar -xvf redis-6.0.1.tar.gz cd /usr/local/redis-6.0.1/ make PREFIX=/usr/local/redis install 启动 systemctl start redis systemctl enalbe redis 配置 系统参数 vi /etc/sysctl.conf net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_tw_reuse = 1 kernel.shmmax = 68719476736 kernel.shmall = 4294967296 net.core.netdev_max_backlog = 262144 net.core.somaxconn = 40960 net.ipv4.tcp_max_orphans = 3276800 net.ipv4.tcp_max_syn_backlog = 262144 服务参数 vi /etc/redis.conf daemonize yes pidfile /var/run/redis.pid bind * #绑定网卡 timeout 300 #当客户端闲置多长时间后关闭连接,如果指定为0……

阅读全文

Redis 常用数据结构

基本类型 String: 字符串。整数,浮点数 。底层数据结构 字符数组。 类似于ARRYLIST Hash:健值对的无序散列列表 。 List:链表 。 底层数据结构 qucklist。 类似于LISKLIST Set:无序集合 Zset:有序集合 。底层数据结构,跳跃列表 高级类型 BitMap GEO HyperLogLog 其他 Stream https://www.cnblogs.com/knowledgesea/category/722602.html……

阅读全文