Redis实战(二):Redis 的 String 类型 bitmap
Redis
常用命令、数据类型
查看帮助
To get help about Redis commands type:"help @<group>" to get a list of commands in <group>"help <command>" for help on <command>"help <tab>" to get a list of possible help topics"quit" to exit
例如,help @string
字符串操作
set k1 value1 nx
nx表示无值的时候才执行成功
set k1 value1 xx
xx表示有值的时候才执行成功
mset k3 value3 k4 value4
含义为 more set,用来设置多个值
mget k1 k2
获取两个值
msetnx k2 c k3 d
这个命令可以保证多笔操作是原子操作,类似于一个事务中
appenk k1 "world"
在k1后面追加world
getrange k1 2 5
获取k1某两个索引之间的字符串子串(支持正负索引)
setrange k1 mashibing
从某个索引开始覆盖
strlen k1
获取字符串长度
getset k1 bashibing
取出旧值,并将旧值设置为新值(这样可以减少一次IO通信)
…
查看某个key的类型
type k1
查看k1的类型
如果value为1,查看的时候显示是string类型,但是是可以进行int类型的自增操作的:incr k1
查看encoding编码类型
object encoding k1
如果value为1,上面的命令显示为int类型
有一些方法会改变数据的类型
数值类型的加减操作
decr k1
k1-1
decrby k1 22
k1+22
incrbyfloat k1 0.5
k1-0.5
二进制安全
redis 是二进制安全的,并不会去破坏你的编码,也不去关心你是什么编码。底层存储的时候,是按照Byte字节存储的。我们前面看到的encoding,只是为了让加减之类的运算方法变得更快一些。
(HBASE也是二进制安全的)
在redis进程与外界交互的时候,redis存储的是字节流,而不会转换成字符流,也不会擅自按照某种数据类型存储,这样保证了数据不会被破坏,不会发生数据被截断/溢出等错误。
- 编码并不会影响数据的存储
- 因此,在多人使用redis的时候,我们一定要在用户端约定好数据的编码和解码。
问:Redis单线程是为了减少用户态到内核态的切换吗?
答:不是,至少主要原因不是。
操作系统为了响应多用户的请求,而进行的从用户态到内核态的切换,造成的的性能损耗,远不及为了保证数据一致性加锁带来的损耗。
Redis单线程是为了避免加锁的过程。
位图 bitmap
bitop
按位操作
业务场景:
- 公司有用户系统,让你统计用户登录天数,且时间窗口随机。例如,A用户在某一年中登陆了几次。怎么优化?
可以使用redis实现,假设一年400天,让每一天对应一个二进制位,需要50个字节即可。
setbit Tom 1 1
表示 Tom 在第2天登录了一次(下标从0开始)
setbit Tom 364 1
表示 Tom 在第365天登录了一次
bitcount Tom -2 -1
统计 Tom 在最后16天的总登录次数 - 你是京东,618做活动,登录就送礼物,假设京东有2亿用户。大库应该备货多少礼物?
用户应该分为:僵尸用户、冷热用户、忠诚用户
你需要统计活跃用户,也是随机时间窗口
比如说,统计本月1号~3号范围内的活跃过的用户,需要去重
Redis实战(二):Redis 的 String 类型 bitmap相关推荐
- Python中 redis StrictRedis对象操作string类型
Python中 redis StrictRedis对象操作string类型 准备 在桌面上创建redis目录 使用pycharm打开 redis目录 创建redis_string.py文件 from ...
- redis(二)redis实战 使用redis进行文章的排序
2019独角兽企业重金招聘Python工程师标准>>> http://www.beckbi.cn/?p=172 redis实战使用redis进行文章的排序 转载于:https://m ...
- Redis实战之Redis + Jedis
用Memcached,对于缓存对象大小有要求,单个对象不得大于1MB,且不支持复杂的数据类型,譬如SET 等.基于这些限制,有必要考虑Redis! 相关链接: Redis实战 Redis实战之Redi ...
- Redis实战 - 09 Redis BitMaps 实现用户签到,统计签到次数,统计签到情况等功能
文章目录 1. 需求分析 2. 设计思路 3. 用户签到和统计连续签到的次数 1. 签到控制层 SignController 2. 签到业务逻辑层 SignService 3. 测试 4. 按月统计用 ...
- Redis 实战篇:通过 Geo 类型实现附近的人邂逅女神
码老湿,阅读了你的巧用数据类型实现亿级数据统计之后,我学会了如何游刃有余的使用不同的数据类型(String.Hash.List.Set.Sorted Set.HyperLogLog.Bitmap)去解 ...
- Redis 笔记(03)— string类型(设置key、获取key、设置过期时间、批量设置获取key、对key进行加减、对key值进行追加、获取value子串)
字符串 string 是 Redis 最简单的数据结构.Redis 所有的数据结构都是以唯一的 key 字符串作为名称,然后通过这个唯一 key 值来获取相应的 value 数据.不同类型的数据结构的 ...
- Redis初学:5(String类型的基本操作)
String类型 String类型是Redis中最基本的类型,String类型有以下的一些特点: String类型是二进制安全的,这意味着String类型可以包含任何的数据,如:图片.序列化的对象等: ...
- Redis常用命令之操作String类型
场景 Centos中Redis的下载编译与安装(超详细): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103967334 Re ...
- C# Redis实战(二)
二.Redis服务 在C# Redis实战(一)中我将所有文件拷贝到了D盘redis文件夹下,其中redis-server.exe即为其服务端程序,双击即开始运行,如图 可以将此服务设置为window ...
最新文章
- Python从菜鸟到高手(2):清空Python控制台
- PHP大法——实验吧
- ssh错误 server not ready for puppeth err=“ssh: handshake failed: ssh: unable to authenticate... 解决方法
- 2.10 局部最优的问题-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
- 50条超精辟的经典语录:哗众,可以取宠,也可以失宠!
- android java 面试题,Android java 高级面试题库
- 数据仓库组件:HBase集群环境搭建和应用案例
- Linux如何生成列表
- Flink 1.9报错:No implicits found for parameter evidence$2: TypeInformation[(String, String, String)]
- bzoj 1432: [ZJOI2009]Function
- 【情感分析】基于知识引入的情感分析
- NP、OSPF 故障排除
- 抢票软件开发(二) 模拟登录
- 为什么我们买了股票就不涨被套,股票割肉就飞了?
- Xubuntu系统要求
- 一名软件测试工程师的一天24小时(每天在忙什么)
- 悟已往之不谏,知来者之可追;实迷途其未远,觉今是而昨非
- 计算机视觉及其工业中的应用,计算机视觉技术在工业领域中的应用
- 纯CSS实现回到顶部的功能
- Project Professional安装:Windows Installer(MSI)与即点即用