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.5k1-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相关推荐

  1. Python中 redis StrictRedis对象操作string类型

    Python中 redis StrictRedis对象操作string类型 准备 在桌面上创建redis目录 使用pycharm打开 redis目录 创建redis_string.py文件 from ...

  2. redis(二)redis实战 使用redis进行文章的排序

    2019独角兽企业重金招聘Python工程师标准>>> http://www.beckbi.cn/?p=172 redis实战使用redis进行文章的排序 转载于:https://m ...

  3. Redis实战之Redis + Jedis

    用Memcached,对于缓存对象大小有要求,单个对象不得大于1MB,且不支持复杂的数据类型,譬如SET 等.基于这些限制,有必要考虑Redis! 相关链接: Redis实战 Redis实战之Redi ...

  4. Redis实战 - 09 Redis BitMaps 实现用户签到,统计签到次数,统计签到情况等功能

    文章目录 1. 需求分析 2. 设计思路 3. 用户签到和统计连续签到的次数 1. 签到控制层 SignController 2. 签到业务逻辑层 SignService 3. 测试 4. 按月统计用 ...

  5. Redis 实战篇:通过 Geo 类型实现附近的人邂逅女神

    码老湿,阅读了你的巧用数据类型实现亿级数据统计之后,我学会了如何游刃有余的使用不同的数据类型(String.Hash.List.Set.Sorted Set.HyperLogLog.Bitmap)去解 ...

  6. Redis 笔记(03)— string类型(设置key、获取key、设置过期时间、批量设置获取key、对key进行加减、对key值进行追加、获取value子串)

    字符串 string 是 Redis 最简单的数据结构.Redis 所有的数据结构都是以唯一的 key 字符串作为名称,然后通过这个唯一 key 值来获取相应的 value 数据.不同类型的数据结构的 ...

  7. Redis初学:5(String类型的基本操作)

    String类型 String类型是Redis中最基本的类型,String类型有以下的一些特点: String类型是二进制安全的,这意味着String类型可以包含任何的数据,如:图片.序列化的对象等: ...

  8. Redis常用命令之操作String类型

    场景 Centos中Redis的下载编译与安装(超详细): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103967334 Re ...

  9. C# Redis实战(二)

    二.Redis服务 在C# Redis实战(一)中我将所有文件拷贝到了D盘redis文件夹下,其中redis-server.exe即为其服务端程序,双击即开始运行,如图 可以将此服务设置为window ...

最新文章

  1. Python从菜鸟到高手(2):清空Python控制台
  2. PHP大法——实验吧
  3. ssh错误 server not ready for puppeth err=“ssh: handshake failed: ssh: unable to authenticate... 解决方法
  4. 2.10 局部最优的问题-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
  5. 50条超精辟的经典语录:哗众,可以取宠,也可以失宠!
  6. android java 面试题,Android java 高级面试题库
  7. 数据仓库组件:HBase集群环境搭建和应用案例
  8. Linux如何生成列表
  9. Flink 1.9报错:No implicits found for parameter evidence$2: TypeInformation[(String, String, String)]
  10. bzoj 1432: [ZJOI2009]Function
  11. 【情感分析】基于知识引入的情感分析
  12. NP、OSPF 故障排除
  13. 抢票软件开发(二) 模拟登录
  14. 为什么我们买了股票就不涨被套,股票割肉就飞了?
  15. Xubuntu系统要求
  16. 一名软件测试工程师的一天24小时(每天在忙什么)
  17. 悟已往之不谏,知来者之可追;实迷途其未远,觉今是而昨非
  18. 计算机视觉及其工业中的应用,计算机视觉技术在工业领域中的应用
  19. 纯CSS实现回到顶部的功能
  20. Project Professional安装:Windows Installer(MSI)与即点即用

热门文章

  1. 服务的默认端口_Informatica端口管理
  2. TensorFlow2-网络训练技巧
  3. 对于我的博客的相关说明
  4. 1_1 FactoryMode 工厂模式
  5. 静态函数调用非静态函数的小例子
  6. 函数调用方式__stdecl _stdcall _fastcall __thiscall介绍
  7. python 获取指定目录下的图片文件
  8. 上班后咋防控?分享一份指南
  9. Kafka消息格式中的变长字段(Varints)
  10. 计算机基础--认识CPU