Redis数据类型和常用命令
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的命令

strings
127.0.0.1:6379> set strtest xyz
OK
127.0.0.1:6379> get strtest
"xyz"
127.0.0.1:6379> mset a 1 b 2 c 3
OK
127.0.0.1:6379> mget a b c
1) "1"
2) "2"
3) "3"
# 注意以下增减操作只能针对整数数字(虽然类型仍然是string类型)
127.0.0.1:6379> incr a
(integer) 2
127.0.0.1:6379> incrby b 5
(integer) 7
127.0.0.1:6379> decr b
(integer) 6
127.0.0.1:6379> decrby b 3
(integer) 3
lists
lists类型中存储的仍然是string类型
# left push用于从左将item压入到list当中
127.0.0.1:6379> lpush list_test 1 2 3
(integer) 3
# 注意如果想看list中的内容,无法通过get直接去看,get只是针对string,而必须使用lrange
127.0.0.1:6379> get list_test
(error) WRONGTYPE Operation against a key holding the wrong kind of value
# 这里0 -1均为list index,表示从index 0 开始到-1结束,-1即从右数最后一个item
127.0.0.1:6379> lrange list_test 0 -1
1) "3"
2) "2"
3) "1"
127.0.0.1:6379> rpush list_test 5 7
(integer) 5
127.0.0.1:6379> lrange list_test 0 -1
1) "3"
2) "2"
3) "1"
4) "5"
5) "7"
127.0.0.1:6379> lpop list_test
"3"
127.0.0.1:6379> lrange list_test 0 -1
1) "2"
2) "1"
3) "5"
4) "7"
# 从左trim截断list,以下是截取index 0 到index 2 的item作为新的list
127.0.0.1:6379> ltrim list_test 0 2
OK
127.0.0.1:6379> lrange list_test 0 -1
1) "2"
2) "1"
3) "5"
hashes (dict)
哈希类型,在python中也就是dict类型。这也是非常常用的数据类型。
127.0.0.1:6379> hset htest a 1
(integer) 1
127.0.0.1:6379> hget htest a
"1"
127.0.0.1:6379> hmset htest a 1 b 2 c 3
OK
127.0.0.1:6379> hmget htest a b c
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> hgetall htest
1) "a"
2) "1"
3) "b"
4) "2"
5) "c"
6) "3"
127.0.0.1:6379> hkeys htest
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> hvals htest
1) "1"
2) "2"
3) "3"
在python程序中使用redis-py driver的时候,通过dict进行操作会非常清晰和简单。
In [1]: import redis
In [2]: r = redis.StrictRedis(host='localhost', port=6379, db=0)
In [3]: d = {"a": 2, "b": 3}
In [4]: key = "test:2"
In [5]: r.hmset(key, d)
Out[5]: True
In [6]: r.hgetall(key)
Out[6]: {'a': '2', 'b': '3'}
sets
127.0.0.1:6379> sadd set_test a b 33
(integer) 3
127.0.0.1:6379> sadd set_test c a b 22
(integer) 1
# 可以看到不会有重复的item
127.0.0.1:6379> smembers set_test
1) "c"
2) "33"
3) "a"
4) "b"
# 用于测试set中是否包含指定的item,如有则返回1,没有返回0
127.0.0.1:6379> sismember set_test a
(integer) 1
127.0.0.1:6379> sismember set_test xx
(integer) 0
127.0.0.1:6379> sadd set_test2 a b 56 66
(integer) 4
127.0.0.1:6379> smembers set_test2
1) "56"
2) "a"
3) "66"
4) "b"
# 求交集
127.0.0.1:6379> sinter set_test set_test2
1) "a"
2) "b"
# 求并集
127.0.0.1:6379> sunion set_test set_test2
1) "33"
2) "a"
3) "56"
4) "c"
5) "66"
6) "22"
7) "b"
sorted sets
sorted sets与sets类似,可以保证item不重复,区别在于sorted sets中每个item对应一个float类型的score
127.0.0.1:6379> zadd sort_set 2.2 a
(integer) 1
127.0.0.1:6379> zadd sort_set 2 bb
(integer) 1
127.0.0.1:6379> zadd sort_set 10 x
(integer) 1
# 获取index 从0 到-1的(即所有) items
127.0.0.1:6379> zrange sort_set 0 -1
1) "bb"
2) "a"
3) "x"
# 获取item bb对应的index
127.0.0.1:6379> zrank sort_set bb
(integer) 0
127.0.0.1:6379> zrank sort_set x
(integer) 2
127.0.0.1:6379> zscore sort_set x
"10"
# 用于获取对应score set中item的数量
127.0.0.1:6379> zcard sort_set
(integer) 3
bit arrays
用于针对指定的key设置位数据为0 或 1。当我们对存储有较高要求,且对于统计为1的item的数量时,使用bit array是一个好的办法。
# 针对bit 7进行设置,设置为1,返回该位之前存储的值
127.0.0.1:6379> setbit bit_test 7 1
(integer) 0
127.0.0.1:6379> setbit bit_test 7 0
(integer) 1
127.0.0.1:6379> get bit_test
"\x00"
127.0.0.1:6379> setbit bit_test 8 1
(integer) 0
127.0.0.1:6379> setbit bit_test 9 1
(integer) 0
# 统计有多少位为1
127.0.0.1:6379> bitcount bit_test
(integer) 2
HyperLogLogs
redis实现了相应算法可以估计hyperloglog中存储的所有item中非重复的item的数量
127.0.0.1:6379> pfadd loglog 1 3 5 7 1
(integer) 1
127.0.0.1:6379> pfcount loglog
(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数据类型和常用命令的更多相关文章
- redis数据类型及常用命令介绍(图文实例)
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAhgAAAFLCAYAAACUdvXUAAAgAElEQVR4nO3da1da58L2fT5KfPvc96 ...
- redis笔记总结之redis数据类型及常用命令
三.常用命令 3.1 字符串类型(string) 字符串类型是Redis中最基本的数据类型,一个字符串类型的键允许存储的数据的最大容量为512MB. 3.1.1 赋值与取值: SET key valu ...
- redis数据类型及常用命令使用
redis干啥的,一般人都知道,但很多人只知道是个缓存数据库,其它的就不知道了,本猿无能亦是如此,然知耻而后勇,我们该理一理这里边的一些逻辑,看看redis究竟是怎么一回事儿,能干啥,怎么做的,这样才 ...
- redis 介绍和常用命令
redis 介绍和常用命令 redis简介 Redis 是一款开源的,基于 BSD 许可的,高级键值 (key-value) 缓存 (cache) 和存储 (store) 系统.由于 Redis 的键 ...
- 记录redis安装及常用命令
Redis安装及常用命令 一.安装 1.下载,解压,进入redis解压目录,make. make PREFIX=目录/redis install :安装到指定目录文件名为redis. 2.将解压目录里 ...
- redis五种数据类型和常用命令及适用场景
一.redis的5种数据类型: 1.基础理解: string 字符串(可以为整形.浮点型和字符串,统称为元素) list 列表(实现队列,元素不唯一,先入先出原则) set 集合(各不相同的元素) h ...
- Redis的数据类型及其常用命令
快速入门Redis 首先安装redis: windows下安装redis Linux下安装redis 1. 什么是redis Redis属于nosql(非关系型数据库) 关系型数据库是基于关系表的数据 ...
- VMWare12安装CentOS7以及redis安装和常用命令
一.vmware安装centos7后没有网卡 VMWare 12版本不提供32位安装程序,只有64位安装程序,如果在安装CentOS时,选择的是CentOS而不是CentOS 64位,则会出现Cent ...
- 数据库之redis篇(2)—— redis配置文件,常用命令,性能测试工具
redis配置 如果你是找网上的其他教程来完成以上操作的话,相信你见过有的启动命令是这样的: 启动命令带了这个参数:redis.windows.conf,由于我测试环境是windows平台,所以是这个 ...
随机推荐
- 【转载】VS中的路径宏 vc++中OutDir、ProjectDir、SolutionDir各种路径
原文:http://www.cnblogs.com/lidabo/archive/2012/05/29/2524170.html 说明 $(RemoteMachine) 设置为“调试”属性页上“远程计 ...
- Asp.Net_Mvc3.5语法_<%%>的用法
一. <%%>这种格式实际上就是和asp的用法一样的,只是asp中里面是vbscript或 者javascript代码,而在asp.net中用的是.net平台下支持的语言.特别 注意:服务 ...
- Mvc4_mvc4跟mysql语法
mvc4: 子页面:@section A{} 母页面:@RenderSection("A",false) false:别的页面没有定义为A的Section的话 也没事,layout ...
- SVN回退版本
执行svn up 命令 保证当前本地版本是最新的版本. svn up 执行svn log 命令,查看历史修改,确定需要回复的版本,如果想要对比2个不同版本的文件差异 可以使用命令 svn diff - ...
- 一种C#泛型方法在lua中表示的设计
在进行lua方法注册的时候, 大多数解决方案直接否定了泛型方法, 因为在lua侧难以表达出泛型, 以及lua的函数重载问题, 函数重载问题可以通过一些特殊方法解决, 而泛型问题是主要问题, 以Unit ...
- 做游戏的小伙伴们注意了,DDoS还可以这样破!
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯游戏云发表于云+社区专栏 作者:腾讯DDoS安全专家.腾讯云游戏安全专家haroldchen 摘要:在游戏出海的过程中,DDoS攻 ...
- ssm整合各配置文件
ssm整合 1.配置web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns ...
- Alpha版本测试
Alpha版本测试报告 项目名称:面向团队的日程提醒系统 软件版本:1.0.0 开发方:Team c# 开发代表:崔强 杜正远 是否经过开发自测(单元测试):是 软件运行环境: Android4.4. ...
- 【MOOC EXP】Linux内核分析实验五报告
程涵 原创博客 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 分析system_call中断处理过程 ...
- 第一周:通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
姓名:吕松鸿 学号:20135229 ( *原创作品转载请注明出处*) ( 学习课程:<Linux内核分析>MOOC课程http://mooc.study.163.com/course/U ...