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

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

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

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

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

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

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

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

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

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

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

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

keys *     --> 获取全部的keys

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

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

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

# 扩展,转换二进制表示:

    # 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,位的索引(将值变换成二进制后再进行索引)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Python补充

Redis学习---Redis操作之String的更多相关文章

  1. Redis学习03——存储字符串(String)

    --------------------- 作者:愤怒的小明 来源:CSDN 原文:https://blog.csdn.net/qiwenmingshiwo/article/details/78118 ...

  2. Redis学习---Redis操作之Python连接

    PyCharm下的Redis连接 连接方式: 1. 操作模式 redis-py提供两个类Redis和StrictRedis用于实现Redis的命令,StrictRedis用于实现大部分官方的命令,并使 ...

  3. redis 学习(3)-- String 类型

    redis 学习(3)-- String 类型 String-结构 结构:Key-Value对 Value:可以是字符串.数字,也可以是二进制数组 限制:Value最大值为512MB String-常 ...

  4. Redis学习——Redis持久化之AOF备份方式保存数据

    新技术的出现一定是在老技术的基础之上,并且完善了老技术的某一些不足的地方,新技术和老技术就如同JAVA中的继承关系.子类(新技术)比父类(老技术)更加的强大! 在前面介绍了Redis学习--Redis ...

  5. Redis学习——Redis事务

    Redis和传统的关系型数据库一样,因为具有持久化的功能,所以也有事务的功能! 有关事务相关的概念和介绍,这里就不做介绍. 在学习Redis的事务之前,首先抛出一个面试的问题. 面试官:请问Redis ...

  6. Redis学习——Redis持久化之RDB备份方式保存数据

    从这一个介绍里面知道,redis比memcache作为缓存数据库强大的地方,一个是支持的数据类型比较多,另一个就是redis持久化功能. 下面就介绍Redis的持久化之RDB! 一:什么是redis的 ...

  7. [转]Redis学习---Redis高可用技术解决方案总结

    [原文]https://www.toutiao.com/i6591646189714670093/ 本文主要针对Redis常见的几种使用方式及其优缺点展开分析. 一.常见使用方式 Redis的几种常见 ...

  8. 尚硅谷redis学习11-jedis操作redis

    前面学习了redis的知识后,下面学习一下如何在java中通过jedis操作redis. 所需jar包:commons-pool-xxxx.jar,jedis-xxx.jar 下面看一下常用操作: 1 ...

  9. redis学习(二)——String数据类型

    一.概述 字符串类型是Redis中最为基础的数据存储类型,它在Redis中是二进制安全的,这便意味着该类型可以接受任何格式的数据,如JPEG图像数据或Json对象描述信息等.在Redis中字符串类型的 ...

随机推荐

  1. Go 协程编程感悟

    0.GPM模型 1.默认地, Go所有的goroutines只能在一个线程里跑 ,除非告诉Go我们允许同时最多使用多个核,或者主动让出CPU时间,使goroutine可以抢占式的执行 2.如果当前go ...

  2. ZooKeeper:架构和算法

    ZooKeeper主要用来解决分布式应用场景中存在的一些问题,如:统一命名服务.状态同步服务.集群管理.分布式应用配置管理等. 它支持Standalone模式和分布式模式,在分布式模式下,能够为分布式 ...

  3. nginx 学习笔记(4) Connection处理方法

    nginx支持connection的多种处理方法.nginx运行的平台确定了可用的处理方法. 在特定平台下connection的多种处理方法中,nginx会自动选择一种最有效的方法.然而,如果需要,你 ...

  4. ruby on rails 权限管理gem cancan

    系统的model关系如下: 用户类 class AdminUser embeds_many :permissions  accepts_nested_attributes_for :permissio ...

  5. 源码速读及点睛:HashMap

    Java 8 HashMap的分离链表 从Java 2到Java 1.7,HashMap在分离链表上的改变并不多,他们的算法基本上是相同的.如果我们假设对象的Hash值服从平均分布,那么获取一个对象需 ...

  6. Angular2 获取当前点击的元素

    <a (click)="onClick($event)"></a> onClick($event){ console.log($event.target); ...

  7. 使用<% =Type%>获取后台值时报错:控件包含代码块(即 <% ... %>),因此无法修改控件集合。

    <% =Type%>不能放在runat="server"的标签中,删掉runat="server"之后dev的控件回调第一次发生时会刷新页面,有ru ...

  8. MySql__centos6.5源码安装

    安装MySql步骤如下: 依赖包检查安装 配置防火墙 配置hosts文件 配置sysctl.cnf 检查是否安装mysql 如果有卸载掉(指的是没有用的mysql) 创建用户属组 创建相应目录并修改权 ...

  9. CSS 通过使用Important覆盖所有其他样式

    在许多情况下,您将使用CSS库.这些可能会意外覆盖您自己的CSS.所以当你绝对需要确定一个元素具有特定的CSS时,可以使用 !important. 让我们回到之前的 pink-text class 声 ...

  10. MyEclipse设置选中单词其它同名单词前景色和背景色

    General->Editors->Annotations->Occurrences