Redis相较于其它的数据库虽然简单,但是要熟记所有命令的用法也并非易事。一个简单的技巧是通过要操作的数据类型来将这些命令进行结构化。

数据类型和对应命令

所有存储于redis中的数据都对应于一个键值对(key-value pair), key可以是任意二进制序列,通常我们使用字符串来标记一个特定的key。在redis中我们通常称这个key为name或者就叫key, 而对于value,redis支持如下几种类型:

  • strings
  • lists: list内容只能是string
  • sets: set中存储非重复的string
  • sorted sets: 与sets类似,但是每个string都会对应一个float类型的score,从而用于排序
  • hashes: 键值对hash类型,也就是Python中的dict,注意在redis中最外层的key一般叫做name或者key,而value中数据类型如果是dict,那么这个dict中的key通常被称为field。
  • Bit arrays (or simply bitmaps): 实际存储的仍然是string,但是可以针对bit进行操作
  • HyperLogLogs: 用于估计unique value的数量

针对不同的数据类型,会有不同的命令,通过如下脑图可以更加清晰地记忆redis的命令

 
Redis数据类型与常用命令

strings

  1. 127.0.0.1:6379> set strtest xyz
  2. OK
  3. 127.0.0.1:6379> get strtest
  4. "xyz"
  5. 127.0.0.1:6379> mset a 1 b 2 c 3
  6. OK
  7. 127.0.0.1:6379> mget a b c
  8. 1) "1"
  9. 2) "2"
  10. 3) "3"
  11. # 注意以下增减操作只能针对整数数字(虽然类型仍然是string类型)
  12. 127.0.0.1:6379> incr a
  13. (integer) 2
  14. 127.0.0.1:6379> incrby b 5
  15. (integer) 7
  16. 127.0.0.1:6379> decr b
  17. (integer) 6
  18. 127.0.0.1:6379> decrby b 3
  19. (integer) 3

lists

lists类型中存储的仍然是string类型

  1. # left push用于从左将item压入到list当中
  2. 127.0.0.1:6379> lpush list_test 1 2 3
  3. (integer) 3
  4. # 注意如果想看list中的内容,无法通过get直接去看,get只是针对string,而必须使用lrange
  5. 127.0.0.1:6379> get list_test
  6. (error) WRONGTYPE Operation against a key holding the wrong kind of value
  7. # 这里0 -1均为list index,表示从index 0 开始到-1结束,-1即从右数最后一个item
  8. 127.0.0.1:6379> lrange list_test 0 -1
  9. 1) "3"
  10. 2) "2"
  11. 3) "1"
  12. 127.0.0.1:6379> rpush list_test 5 7
  13. (integer) 5
  14. 127.0.0.1:6379> lrange list_test 0 -1
  15. 1) "3"
  16. 2) "2"
  17. 3) "1"
  18. 4) "5"
  19. 5) "7"
  20. 127.0.0.1:6379> lpop list_test
  21. "3"
  22. 127.0.0.1:6379> lrange list_test 0 -1
  23. 1) "2"
  24. 2) "1"
  25. 3) "5"
  26. 4) "7"
  27. # 从左trim截断list,以下是截取index 0 到index 2 的item作为新的list
  28. 127.0.0.1:6379> ltrim list_test 0 2
  29. OK
  30. 127.0.0.1:6379> lrange list_test 0 -1
  31. 1) "2"
  32. 2) "1"
  33. 3) "5"

hashes (dict)

哈希类型,在python中也就是dict类型。这也是非常常用的数据类型。

  1. 127.0.0.1:6379> hset htest a 1
  2. (integer) 1
  3. 127.0.0.1:6379> hget htest a
  4. "1"
  5. 127.0.0.1:6379> hmset htest a 1 b 2 c 3
  6. OK
  7. 127.0.0.1:6379> hmget htest a b c
  8. 1) "1"
  9. 2) "2"
  10. 3) "3"
  11. 127.0.0.1:6379> hgetall htest
  12. 1) "a"
  13. 2) "1"
  14. 3) "b"
  15. 4) "2"
  16. 5) "c"
  17. 6) "3"
  18. 127.0.0.1:6379> hkeys htest
  19. 1) "a"
  20. 2) "b"
  21. 3) "c"
  22. 127.0.0.1:6379> hvals htest
  23. 1) "1"
  24. 2) "2"
  25. 3) "3"

在python程序中使用redis-py driver的时候,通过dict进行操作会非常清晰和简单。

  1. In [1]: import redis
  2. In [2]: r = redis.StrictRedis(host='localhost', port=6379, db=0)
  3. In [3]: d = {"a": 2, "b": 3}
  4. In [4]: key = "test:2"
  5. In [5]: r.hmset(key, d)
  6. Out[5]: True
  7. In [6]: r.hgetall(key)
  8. Out[6]: {'a': '2', 'b': '3'}

sets

  1. 127.0.0.1:6379> sadd set_test a b 33
  2. (integer) 3
  3. 127.0.0.1:6379> sadd set_test c a b 22
  4. (integer) 1
  5. # 可以看到不会有重复的item
  6. 127.0.0.1:6379> smembers set_test
  7. 1) "c"
  8. 2) "33"
  9. 3) "a"
  10. 4) "b"
  11. # 用于测试set中是否包含指定的item,如有则返回1,没有返回0
  12. 127.0.0.1:6379> sismember set_test a
  13. (integer) 1
  14. 127.0.0.1:6379> sismember set_test xx
  15. (integer) 0
  16. 127.0.0.1:6379> sadd set_test2 a b 56 66
  17. (integer) 4
  18. 127.0.0.1:6379> smembers set_test2
  19. 1) "56"
  20. 2) "a"
  21. 3) "66"
  22. 4) "b"
  23. # 求交集
  24. 127.0.0.1:6379> sinter set_test set_test2
  25. 1) "a"
  26. 2) "b"
  27. # 求并集
  28. 127.0.0.1:6379> sunion set_test set_test2
  29. 1) "33"
  30. 2) "a"
  31. 3) "56"
  32. 4) "c"
  33. 5) "66"
  34. 6) "22"
  35. 7) "b"

sorted sets

sorted sets与sets类似,可以保证item不重复,区别在于sorted sets中每个item对应一个float类型的score

  1. 127.0.0.1:6379> zadd sort_set 2.2 a
  2. (integer) 1
  3. 127.0.0.1:6379> zadd sort_set 2 bb
  4. (integer) 1
  5. 127.0.0.1:6379> zadd sort_set 10 x
  6. (integer) 1
  7. # 获取index 从0 到-1的(即所有) items
  8. 127.0.0.1:6379> zrange sort_set 0 -1
  9. 1) "bb"
  10. 2) "a"
  11. 3) "x"
  12. # 获取item bb对应的index
  13. 127.0.0.1:6379> zrank sort_set bb
  14. (integer) 0
  15. 127.0.0.1:6379> zrank sort_set x
  16. (integer) 2
  17. 127.0.0.1:6379> zscore sort_set x
  18. "10"
  19. # 用于获取对应score set中item的数量
  20. 127.0.0.1:6379> zcard sort_set
  21. (integer) 3

bit arrays

用于针对指定的key设置位数据为0 或 1。当我们对存储有较高要求,且对于统计为1的item的数量时,使用bit array是一个好的办法。

  1. # 针对bit 7进行设置,设置为1,返回该位之前存储的值
  2. 127.0.0.1:6379> setbit bit_test 7 1
  3. (integer) 0
  4. 127.0.0.1:6379> setbit bit_test 7 0
  5. (integer) 1
  6. 127.0.0.1:6379> get bit_test
  7. "\x00"
  8. 127.0.0.1:6379> setbit bit_test 8 1
  9. (integer) 0
  10. 127.0.0.1:6379> setbit bit_test 9 1
  11. (integer) 0
  12. # 统计有多少位为1
  13. 127.0.0.1:6379> bitcount bit_test
  14. (integer) 2

HyperLogLogs

redis实现了相应算法可以估计hyperloglog中存储的所有item中非重复的item的数量

  1. 127.0.0.1:6379> pfadd loglog 1 3 5 7 1
  2. (integer) 1
  3. 127.0.0.1:6379> pfcount loglog
  4. (integer) 4

通用的命令

  • keys pattern: pattern可以为glob风格的通配符格式,最常用的是keys *查询所有的keys
  • exists key: 查询该key是否存在
  • del key: 删除该key对应的数据
  • type key: 查询该key对应的value的数据类型
  • expire key: 定义多长时间后key对应的数据过期,过期后数据会被自动删除
  • ttl key: 查询该key对应的剩余存活时间
  • flushdb/flushall: flushdb用于清除当前db的所有数据,flushall清除所有数据库的数据

References

作者:geekpy
链接:https://www.jianshu.com/p/cd434a19c822
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

Redis数据类型和常用命令的更多相关文章

  1. redis数据类型及常用命令介绍(图文实例)

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAhgAAAFLCAYAAACUdvXUAAAgAElEQVR4nO3da1da58L2fT5KfPvc96 ...

  2. redis笔记总结之redis数据类型及常用命令

    三.常用命令 3.1 字符串类型(string) 字符串类型是Redis中最基本的数据类型,一个字符串类型的键允许存储的数据的最大容量为512MB. 3.1.1 赋值与取值: SET key valu ...

  3. redis数据类型及常用命令使用

    redis干啥的,一般人都知道,但很多人只知道是个缓存数据库,其它的就不知道了,本猿无能亦是如此,然知耻而后勇,我们该理一理这里边的一些逻辑,看看redis究竟是怎么一回事儿,能干啥,怎么做的,这样才 ...

  4. redis 介绍和常用命令

    redis 介绍和常用命令 redis简介 Redis 是一款开源的,基于 BSD 许可的,高级键值 (key-value) 缓存 (cache) 和存储 (store) 系统.由于 Redis 的键 ...

  5. 记录redis安装及常用命令

    Redis安装及常用命令 一.安装 1.下载,解压,进入redis解压目录,make. make PREFIX=目录/redis install :安装到指定目录文件名为redis. 2.将解压目录里 ...

  6. redis五种数据类型和常用命令及适用场景

    一.redis的5种数据类型: 1.基础理解: string 字符串(可以为整形.浮点型和字符串,统称为元素) list 列表(实现队列,元素不唯一,先入先出原则) set 集合(各不相同的元素) h ...

  7. Redis的数据类型及其常用命令

    快速入门Redis 首先安装redis: windows下安装redis Linux下安装redis 1. 什么是redis Redis属于nosql(非关系型数据库) 关系型数据库是基于关系表的数据 ...

  8. VMWare12安装CentOS7以及redis安装和常用命令

    一.vmware安装centos7后没有网卡 VMWare 12版本不提供32位安装程序,只有64位安装程序,如果在安装CentOS时,选择的是CentOS而不是CentOS 64位,则会出现Cent ...

  9. 数据库之redis篇(2)—— redis配置文件,常用命令,性能测试工具

    redis配置 如果你是找网上的其他教程来完成以上操作的话,相信你见过有的启动命令是这样的: 启动命令带了这个参数:redis.windows.conf,由于我测试环境是windows平台,所以是这个 ...

随机推荐

  1. 【转载】VS中的路径宏 vc++中OutDir、ProjectDir、SolutionDir各种路径

    原文:http://www.cnblogs.com/lidabo/archive/2012/05/29/2524170.html 说明 $(RemoteMachine) 设置为“调试”属性页上“远程计 ...

  2. Asp.Net_Mvc3.5语法_<%%>的用法

    一. <%%>这种格式实际上就是和asp的用法一样的,只是asp中里面是vbscript或 者javascript代码,而在asp.net中用的是.net平台下支持的语言.特别 注意:服务 ...

  3. Mvc4_mvc4跟mysql语法

    mvc4: 子页面:@section A{} 母页面:@RenderSection("A",false) false:别的页面没有定义为A的Section的话 也没事,layout ...

  4. SVN回退版本

    执行svn up 命令 保证当前本地版本是最新的版本. svn up 执行svn log 命令,查看历史修改,确定需要回复的版本,如果想要对比2个不同版本的文件差异 可以使用命令 svn diff - ...

  5. 一种C#泛型方法在lua中表示的设计

    在进行lua方法注册的时候, 大多数解决方案直接否定了泛型方法, 因为在lua侧难以表达出泛型, 以及lua的函数重载问题, 函数重载问题可以通过一些特殊方法解决, 而泛型问题是主要问题, 以Unit ...

  6. 做游戏的小伙伴们注意了,DDoS还可以这样破!

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯游戏云发表于云+社区专栏 作者:腾讯DDoS安全专家.腾讯云游戏安全专家haroldchen 摘要:在游戏出海的过程中,DDoS攻 ...

  7. ssm整合各配置文件

    ssm整合 1.配置web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns ...

  8. Alpha版本测试

    Alpha版本测试报告 项目名称:面向团队的日程提醒系统 软件版本:1.0.0 开发方:Team c# 开发代表:崔强 杜正远 是否经过开发自测(单元测试):是 软件运行环境: Android4.4. ...

  9. 【MOOC EXP】Linux内核分析实验五报告

    程涵  原创博客 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 分析system_call中断处理过程 ...

  10. 第一周:通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的

    姓名:吕松鸿 学号:20135229 ( *原创作品转载请注明出处*) ( 学习课程:<Linux内核分析>MOOC课程http://mooc.study.163.com/course/U ...