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平台,所以是这个 ...
随机推荐
- debian系统下改语言设置
debian系统下改语言设置 安装debian 的时候选择了中文zh_CN_UTF-8,然后进系统后想换成en_US_UTF-8 可以使用一下命令选择:找到需要的语言 确定即可 dpkg-reconf ...
- MFC CTreeCtrl运用
CTreeCtrl运用 删除无效资源 递归的运用 自写遍历目录函数 递归遍历所有子目录 一.删除无效资源 .打开资源文件 .找到无效链接删掉 二.自写遍历目录函数 CFileFind findfile ...
- python sorted三个例子
# 例1. 按照元素出现的次数来排序 seq = [2,4,3,1,2,2,3] # 按次数排序 seq2 = sorted(seq, key=lambda x:seq.count(x)) print ...
- [Deep-Learning-with-Python] Keras高级概念
Keras API 目前为止,介绍的神经网络模型都是通过Sequential模型来实现的.Sequential模型假设神经网络模型只有一个输入一个输出,而且模型的网络层是线性堆叠在一起的. 这是一个经 ...
- 2PC/3PC到底是啥
讨论 提到2PC/3PC首先想到的是它是一致性协议,而且经常把它和Paxos协议放在一起比较,并且经常看到这样的说法"世上只有一种一致性算法,那就是Paxos",2PC/3PC并不 ...
- 使用C#创建WCF服务控制台应用程序
本文属于原创,转载请注明出处,谢谢! 一.开发环境 操作系统:Windows 10 开发环境:VS2015 编程语言:C# IIS版本:10.0.0.0 二.添加WCF服务.Internet Info ...
- 【ORACLE】oracle数据库用户密码复杂度配置
-- 设置密码复杂度 SQL> @ /u01/app/oracle/product/11.2.0/db_1/rdbms/admin/utlpwdmg.sql -- 测试 SQL> alte ...
- Js_字体滚动换颜色
<html><head><meta http-equiv="Content-Type" content="text/html; charse ...
- Js_cookie保存登录名
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head ...
- linux/Centos下查看和修改网卡Mac地址(ifconfig命令)
本文转载自http://www.169it.com/article/14360294838474691537.html linux/Centos下查看网卡Mac地址,输入命令: #ifconfig - ...