• Redis学习---Redis操作之String


    set(name, value, ex=None, px=None, nx=False, xx=False)
    在Redis中设置值,默认,不存在则创建,存在则修改
    参数:      ex,过期时间(秒)      px,过期时间(毫秒)      nx[not exist],如果设置为True,则只有name不存在时,当前set操作才执行      xx,如果设置为True,则只有name存在时,当前set操作才执行

    image

    image

    --------------------------------------------------------------------------------------------------------------------------------------

    setnx(name, value)           --> 不存在则设置
    设置值,只有name不存在时,执行设置操作(添加)
    --------------------------------------------------------------------------------------------------------------------------------------
    setex(name, value, time)       --> 存在则设置
    # 设置值
    # 参数:
    # time,过期时间(数字秒 或 timedelta对象)
    --------------------------------------------------------------------------------------------------------------------------------------
    mset(*args, **kwargs)   --> 批量设置key-value

    image

    --------------------------------------------------------------------------------------------------------------------------------------

    mget(keys, *args)   --> 批量获取value

    image

    --------------------------------------------------------------------------------------------------------------------------------------

    getset(name, value)  --> 设置新值并获取原来的值

    image

    --------------------------------------------------------------------------------------------------------------------------------------

    getrange(key, start, end)  --> 获取子序列(根据字节获取,非字符)
    参数:     # key,Redis 的 key     # start,起始位置(字节)
    # end,结束位置(字节)

    image

    --------------------------------------------------------------------------------------------------------------------------------------

    setrange(name, offset, value)
    # 修改字符串内容,从指定字符串索引开始向后替换(新值太长时,则向后添加)
    # 参数:     # offset,字符串的索引,字节(一个汉字三个字节)     # value,要设置的值

    image

    --------------------------------------------------------------------------------------------------------------------------------------

    keys *     --> 获取全部的keys

    image

    --------------------------------------------------------------------------------------------------------------------------------------

    setbit(name, offset, value)  --> 对name对应值的二进制表示的位进行操作
    # 参数:     # name,redis的key     # offset,位的索引(将值变换成二进制后再进行索引)
    # value,值只能是 1 或 0 [因为二进制只有0和1]

    image

    --------------------------------------------------------------------------------------------------------------------------------------

    # 扩展,转换二进制表示:
     
        # source = "哈哈哈"
        source = "foo" 
        for i in source:
            num = ord(i)
            print bin(num).replace('b','') 
        特别的,如果source是汉字 "哈哈哈"怎么办?
        答:对于utf-8,每一个汉字占 3 个字节,那么 "哈哈哈" 则有 9个字节
           对于汉字,for循环时候会按照 字节 迭代,那么在迭代时,将每一个字节转换 十进制数,然后再将十进制数转换成二进制
    11100110 10101101 10100110 11100110 10110010 10011011 11101001 10111101 10010000
    getbit(name, offset)  --> name对应值的二进制
    # 参数:     # name,redis的key     # offset,位的索引(将值变换成二进制后再进行索引)

    image

    --------------------------------------------------------------------------------------------------------------------------------------

    bitcount(key, start=None, end=None) -->获取name对应的值的二进制表示中 1 的个数
    # 参数:     # key,Redis的name     # start,位起始位置     # end,位结束位置

    image

    --------------------------------------------------------------------------------------------------------------------------------------

    strlen(name)  --> 返回name对应值的字节长度
    # 返回name对应值的字节长度(一个汉字3个字节)

    image

    --------------------------------------------------------------------------------------------------------------------------------------

    incr(self, name, amount=1)    --> 整型自增
    # 自增 name对应的值,当name不存在时,则创建name=amount,否则,则自增
    # 参数:     # name,Redis的name     # amount,自增数(必须是整数)

    image

    --------------------------------------------------------------------------------------------------------------------------------------

    incrbyfloat(self, name, amount=1.0)  --> 浮点数自增
    # 参数:     # name,Redis的name     # amount,自增数(浮点型)

    image--------------------------------------------------------------------------------------------------------------------------------------

    decr(self, name, amount=1)   --> 整型自减
    # 参数:     # name,Redis的name     # amount,自减数(整数)

    image

    --------------------------------------------------------------------------------------------------------------------------------------

    append(key, value)  --> 在key后添加内容
    # 参数:     key, redis的name     value, 要追加的字符串

    image--------------------------------------------------------------------------------------------------------------------------------------

    附:用一个字符串实现的效果,很省空间

    装逼神器:反思双11的时候淘宝怎么在大屏上实时显示有多少用户登录,哪个用户登录了?

    答:我们每个用户都有一个唯一的用户ID,如果用户登录了,则获取到用户的userId,设置一个Redis的key且初始值为0[这里加上是login],login则记录登录用户的登录情况。如果说用户ID为100,则我设置login这个key的二进制的第100位置为1【setbit】,后续只需要统计login这个key中有多少个1就表示有多少个用户【bitcount】,获取这个1的位置,则获取到了用户的ID,根据ID就可以查询到用户的信息

    image

    Python补充

    image

  • 相关阅读:
    N皇后
    水域大小
    1221 分割平衡字符串
    1391 检查是否存在有效路径 DFS
    盛最多水的容器11 双指针
    烧饼排序
    每日日报8——软件设计④|抽象工厂模式(人与肤色)
    每日日报5——登录功能的实现(JAVA)
    每日日报4——软件设计②|简单工厂模式(女娲造人)
    vue利用transition过渡动画实现轮播图
  • 原文地址:https://www.cnblogs.com/ftl1012/p/9426297.html
Copyright © 2020-2023  润新知