zoukankan      html  css  js  c++  java
  • Redis API

    安装

    启动

    最简启动

    命令行输入

    redis-server     # 使用默认配置
    

    验证

    ps-ef I grep redis
    netstat-antpl I grep redis
    redis-cli-h ip-p port ping
    

    动态参数启动

    redis-server -p 6380
    

    配置文件启动

    redis-server   /path/to/conf
    

    常用配置

    daemonize 是否是守护进程(nolyes)
    port Redis 对外端口号
    logfile  Redis系统日志
    dir  Redis工作目录
    
    config  get *
    

    通用命令

    • keys

      keys *
      key 后面可以使用正则表达式,但是一般推荐在生产环境中使用这个命令
      
    • bdsize 计算key的总数

    • exists 判断是否存在

      存在就返回1,不存在就返回0
      
    • del key-value 删除指定的key-value 成功删除1 不存在0

    • expire

      expire key seconds    设置seconds秒后过期
      
    • ttl

      查看剩余的过期时间
      
    • persist

      去掉过期时间
      

    -2 代表不存在 -1代表存在,但是没有设置过期时间

    • type

      type key 返回key的过期时间
      

    上面的命令出了keys 是O(n),其他全都是O(1).

    redis是单线程的

    单线程为什么这么快?

    1、纯内存2、非阻塞IO 3、避免线程切换和竟态消耗

    一次只运行一次命令

    拒绝长命令

    字符串类型

    字符串应用场景

    缓存,分布式锁,计数器。

    常用命令

    get key 获取key对应的value值 时间复杂度为O(1)

    set key value 设置key-value 时间复杂度为O(1)

    del key 删除key-value 时间复杂度为O(1)

    命令 作用 时间复杂度
    incr key key自增1,如果key不存在,自增后get(key)=1 O(1)
    decr key key自减1,如果key不存在,自减后get(key)=-1 O(1)
    incry key k key自增k,如果key不存在,自增后get(key)=k decr key k O(1)
    decr key k key自减k,如果key不存在,自减后get(key)=-k O(1)
    命令 作用 时间复杂度
    set key value 不管key是否存在,都设置 O(1)
    setnx key value key不存在,才设置 O(1)
    set key value xx key存在,才设置 O(1)
    命令 作用 时间复杂度
    mget keyl key2 key3... #批量获取key,原子操作 O(n)
    mset keyl valuel key2 value2 key3 value3 #批量设置key-value
    getset key newvalue #set key newvalue并返回旧的value O(1)
    append key value #将value追加到旧的value O(1)
    strlen key #返回字符串的长度(注意中文) O(1)
    incrbyfloat key 3.5 #增加key对应的值3.5 O(1)
    getrange key start end #获取字符串指定下标所有的值 O(1)
    setrange key index value #设置指定下标所有对应的值 O(1)

    哈希

    特点:

    MapMap?

    field不能相同,但是值可以相同

    API

    不常用的

    列表

    集合

    集合的特点:无序性,无重复,集合间操作

    sinter (求交集)

    sdiff(求差集)

    sunion(求并集)

    scard 计数

    sismember 判断是不是集合中的数据

    srandmember 随机返回一个集合中的元素

    spop随机删除一个集合中的元素

    smember 返回所有的数据 小心使用这个API

    有序集合

    和有序集合的对比

    无序集合 有序集合 列表
    重复值 无重复值 无重复值 可以有重复元素
    有序无序 无序 有序 有序
    存储 element score+element element

    重要API

    命令 作用 时间复杂度
    zadd key score element 可以是多对 添加score和element O(logN)
    zrem key element 可以是多个 删除指定元素 O(1)
    zscore key element 返回指定元素的分数 O(1)
    zincrby key increScore element 分数可以为负 增加或者减少元素的分数 O(1)
    zcard key 返回元素的总个数 O(1)
    zrange key start end [withscores] 返回指定索引范围内的升序元素[是否输出分值可选] O(logN + M)
    zrangebyscore key minScore MaxScore [withscores] 返回指定索引分数内的升序元素[是否输出分值可选] O(logN + M)
    zremrangebyrangk key start stop 删除指定排名内的升序元素 O(logN + M)
    zremrangebyscore key minScore MaxScore 删除指定分数内的升序元素 O(logN + M)

    redis 主从复制

    127.0.0.1:6380> slaveof 11.11.11.11 6370 
    OK (异步) 清空6380机器上的所有数据
    
    127.0.0.1:6380> slaveof noone
    ok 不会清除数据
    

    配置文件

    slaveof ip port 
    slave-read-only yes
    

    redis配置

    获取访问页面
    localhost:5010/get
    
    ## ssdbadmin 网页上查看redis的数据内容
    
    #是否作为守护进程运行
    daemonize no
    #Redis 默认监听端口
    port 6379
    #客户端闲置多少秒后,断开连接
    timeout 300
    #日志显示级别
    loglevel verbose
    #指定日志输出的文件名,也可指定到标准输出端口
    logfile redis.log
    #设置数据库的数量,默认最大是16,默认连接的数据库是0,可以通过select N 来连接不同的数据库
    databases 32
    #Dump持久化策略
    #当有一条Keys 数据被改变是,900 秒刷新到disk 一次
    #save 900 1
    #当有10 条Keys 数据被改变时,300 秒刷新到disk 一次
    save 300 100
    #当有1w 条keys 数据被改变时,60 秒刷新到disk 一次
    save 6000 10000
    #当dump     .rdb 数据库的时候是否压缩数据对象
    rdbcompression yes
    #dump 持久化数据保存的文件名
    dbfilename dump.rdb
    ###########    Replication #####################
    #Redis的主从配置,配置slaveof则实例作为从服务器
    #slaveof  ip host
    #主服务器连接密码
    # masterauth <master-password>
    ############## 安全性 ###########
    #设置连接密码
    #requirepass <password>
    ############### LIMITS ##############
    #最大客户端连接数
    # maxclients 128
    #最大内存使用率
    # maxmemory <bytes>
    ########## APPEND ONLY MODE #########
    #是否开启日志功能
    appendonly no
    # AOF持久化策略
    #appendfsync always
    #appendfsync everysec
    #appendfsync no
    ################ VIRTUAL MEMORY ###########
    #是否开启VM 功能
    #vm-enabled no
    # vm-enabled yes
    #vm-swap-file logs/redis.swap
    #vm-max-memory 0
    #vm-page-size 32
    #vm-pages 134217728
    #vm-max-threads 4
    
    

    python连接redis提高效率

    写单例

    把连接放在单独的配置文件中,或者新建文件,在调用的时候从其他的地方导入过来

    settings.py

    import redis
    
    POOL = redis.connectionpool(host ='127.0.0.1',port=6379,password='12',max_connections =1000)
    

    其他

    from settings import POOL
    
    conn = redis.Redis(connection_pool = POOL)
    

    在hgetall中如果,redis的内存过大,会发生爆栈的情况。

    应该用hscan_iter(key,count)

    列表操作

    var = conn.blpop(k1,timeout = 10)

  • 相关阅读:
    代码书写的细节
    php中的正则函数主要有三个-正则匹配,正则替换
    2个比较经典的PHP加密解密函数分享
    淘宝运营中的6大致命误区,你犯过么?
    30分钟教你写出10分的淘宝标题
    超全的web开发工具和资源
    转化率不好?告诉你转化飙秘诀
    帮你店铺日销千单的20个淘宝小技巧
    不刷单,中小卖家如何提升店铺流量?
    使用Flexible实现手淘H5页面的终端适配
  • 原文地址:https://www.cnblogs.com/ruhai/p/11159660.html
Copyright © 2011-2022 走看看