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平台,所以是这个 ...
随机推荐
- R绘图 第六篇:绘制线图(ggplot2)
线图是由折线构成的图形,线图是把散点从左向右用直线连接起来而构成的图形,在以时间序列为x轴的线图中,可以看到数据增长的趋势. geom_line(mapping = NULL, data = NULL ...
- mybatis 初步使用(IDEA的Maven项目, 超详细)
目录 创建 Maven 项目 Maven配置 pom.xml 创建数据库 配置Mybatis 配置mybatis的XML文件 创建实体类和对应的Mapper.xml 测试 源码 @ 创建 Maven ...
- BUGKU--刷题
刷题 一.BUGKU WEB 1. 变量1 知识点php两个$$是 可变变量,就是一个变量的变量名可以动态的设置和使用 $GLOBALS一个包含了全部变量的全局组合数组.变量的名字就是数组的键 < ...
- LintCode——筛子求和
描述:扔n个骰子,向上面的数字之和为 S .给定 Given n,请列出所有可能的 S 值及其相应的概率. 样例:给定n=1,返回 [ [1, 0.17], [2, 0.17], [3, 0.17], ...
- 深入浅出etcd系列Part 1 – etcd架构和代码框架
1.绪论 etcd作为华为云PaaS的核心部件,实现了PaaS大多数组件的数据持久化.集群选举.状态同步等功能.如此重要的一个部件,我们只有深入地理解其架构设计和内部工作机制,才能更好地学习华为云Ku ...
- CentOS7安装OpenStack(Rocky版)-01.控制节点的系统环境准备
分享一下Rocky版本的OpenStack安装管理经验: OpenStack每半年左右更新一版,目前是版本是201808月发布的版本-R版(Rocky),目前版本安装方法优化较好,不过依然是比较复杂 ...
- 强化学习算法DQN
1 DQN的引入 由于q_learning算法是一直更新一张q_table,在场景复杂的情况下,q_table就会大到内存处理的极限,而且在当时深度学习的火热,有人就会想到能不能将从深度学习中借鉴方法 ...
- NO.3:自学tensorflow之路------MNIST识别,神经网络拓展
引言 最近自学GRU神经网络,感觉真的不简单.为了能够快速跑完程序,给我的渣渣笔记本(GT650M)也安装了一个GPU版的tensorflow.顺便也更新了版本到了tensorflow-gpu 1.7 ...
- CodeMirror 小册子
User manual and reference guide version 5.41.1 用户手册和参考指南 CodeMirror is a code-editor component ...
- “数学口袋精灵”App的第一个Sprint计划
一.现状 我们这个团队想制作一个关于运算的游戏类型手机软件,针对我们这个学期的Android软件开发的课程,制作出一个关于数学算术游戏软件. 二.任务认领 第一阶段先把静态网页制作出来,各自的任务: ...