zoukankan      html  css  js  c++  java
  • redis-其他应用

    1.codis

    Codis 是一个分布式 Redis 解决方案, 对于上层的应用来说, 连接到 Codis Proxy 和连接原生的 Redis Server 没有明显的区别 (不支持的命令列表), 上层应用可以像使用单机的 Redis 一样使用, Codis 底层会处理请求的转发, 不停机的数据迁移 等工作, 所有后边的一切事情, 对于前面的客户端来说是透明的, 可以简单的认为后边连接的是一个内存无限大的 Redis 服务.

    2.twemproxy

    是 Twtter 开源的一个 Redis 和 Memcache 代理服务器,主要用于管理 Redis 和 Memcached 集群, 减少与Cache 服务器直接连接的数量。

    3.redis如何实现事物

    import redis 
    pool = redis.ConnectionPool(host='10.211.55.4', port=6379) 
    conn = redis.Redis(connection_pool=pool) 
    # pipe = r.pipeline(transaction=False) 
    pipe = conn.pipeline(transaction=True) 
    # 开始事务 
    pipe.multi() 
    pipe.set('name', 'bendere') 
    pipe.set('role', 'sb') 
    # 提交 
    pipe.execute() 
    #注意:咨询是否当前分布式redis是否支持事务
    

    4.redis中watch命令的作用

    # 在Redis的事务中,WATCH命令可用于提供CAS(check - and -set) 
    # 功能。 
    # 假设我们通过WATCH命令在事务执行之前监控了多个Keys,倘若在WATCH之后有任何Key的值发生了变化, 
    # EXEC命令执行的事务都将被放弃,同时返回Null 
    # multi - bulk应答以通知调用者事务执行失败。 
    # 面试题:你如何控制剩余的数量不会出问题? 
    # 方式一:- 通过redis的watch实现 
    import redis 
    conn = redis.Redis(host='127.0.0.1', port=6379) 
    # conn.set('count',1000)
    val = conn.get('count') 
    print(val) 
    with conn.pipeline(transaction=True) as pipe:
    # 先监视,自己的值没有被修改过 
    conn.watch('count') 
    # 事务开始 
    pipe.multi() 
    old_count = conn.get('count') 
    count = int(old_count) 
    print('现在剩余的商品有:%s', count) 
    input("问媳妇让不让买?") 
    pipe.set('count', count - 1) 
    # 执行,把所有命令一次性推送过去 
    pipe.execute() 
    
    

    5.项目中redis性能的问题

    我的项目中暂时没有遇到性能问题,不过我下来之后在学习Redis的时候,看到过一篇博客,写的很好,大概内容就是:
    (1) Master最好不要做任何持久化工作,如RDB内存快照和AOF日志文件
    (2) 如果数据比较重要,某个Slave开启AOF备份数据,策略设置为每秒同步一次
    (3) 为了主从复制的速度和连接的稳定性,Master和Slave最好在同一个局域网内
    (4) 尽量避免在压力很大的主库上增加从库
    (5) 主从复制不要用图状结构,用单向链表结构更为稳定,即:Master <- Slave1 <- Slave2 <- Slave3… 这样的结构方便解决单点故障问题,实现Slave对Master的替换。如果Master挂了,可以立刻启用Slave1做Master,其 他不变。

    6.Redis应用key很大,如何取出特定的key呢

    # 通过scan_iter分片取,减少内存压力 
    scan_iter(match=None, count=None)增量式迭代获取redis里匹配的的值 
    # match,匹配指定key 
    # count,每次分片最少获取个数 
    r = redis.Redis(connection_pool=pool) 
    for key in r.scan_iter(match='PREFIX_*', count=100000): 
      	print(key)
    

    7.如何高效的找到redis中所有以oldboy开头的key

    redis 有一个keys命令。

    语法:KEYS pattern

    说明:返回与指定模式相匹配的所用的keys。

    该命令所支持的匹配模式如下:
    1、?:用于匹配单个字符。例如,h?llo可以匹配hello、hallo和hxllo等;
    2、:用于匹配零个或者多个字符。例如,hllo可以匹配hllo和heeeello等;
    3、[]:可以用来指定模式的选择区间。例如h[ae]llo可以匹配hello和hallo,但是不能匹配hillo。同时,可以使 用“/”符号来转义特殊的字符

    注意

    KEYS 的速度非常快,但如果数据太大,内存可能会崩掉,
    如果需要从一个数据集中查找特定的key,最好还是用Redis的集合结构(set)来代替。

  • 相关阅读:
    centos7 install flash player
    【转载】网站配置Https证书系列(二):IIS服务器给网站配置Https证书
    【转载】网站配置Https证书系列(一):腾讯云申请免费的SSL证书的流程步骤(即https安全连接使用的证书)
    【转载】网站配置Https证书系列(三):IIS网站设置Http链接直接跳转Https安全连接
    【转载】 C#使用Union方法求两个List集合的并集数据
    【转载】程序设计过程中SQL语句Where 1=1的作用
    【转载】C#编程中两个List集合使用Intersect方法求交集
    【转载】腾讯云服务器域名解析操作详解
    【转载】C#中使用OrderBy和ThenBy等方法对List集合进行排序
    【转载】腾讯云服务器通过设置安全组放行对外端口号
  • 原文地址:https://www.cnblogs.com/zhuyuanying123--/p/12494482.html
Copyright © 2011-2022 走看看