Redis学习笔记02——数据类型和操作命令

本文主要介绍 Redis 常用的基本操作命令和数据类型操作命令,也就是 Redis 的基本使用。通过学习本文,应该可以完成 Redis 数据库的入门。没有太多技术上的难度,今后可以将本文作为一个命令查询的字典。

基本操作命令

redis 默认为16个库(在 redis.conf 文件可配置),默认自动使用0号库。

配置

databases 16

修改数据库的个数

redis.conf 文件中修改 databases 16 。比如:修改为 databases 10后,当前可使用第0~9个数据库。

基本命令

ping

沟通命令,查看状态

输入 pingredis 给我们返回 PONG ,表示 redis 服务运行正常

dbsize

查看当前数据库中 key 的数量

返回数字, key 的数量

select db

切换数据库。使用其他数据库,命令是 select index

例如: select 5 切换到第5个数据库

flushdb

删除当前数据库的数据,正式环境慎用!

quit

退出数据库(未关闭数据库)

Key 的操作命令

keys

查找所有符合模式 patternkeypattern 可以使用通配符。

语法: keys pattern

通配符:

  • * :表示0-多个字符,例如: keys * 查询所有的key。

  • ? :表示单个字符,例如: wo?d ,匹配 wordwood

exists

判断 key 是否存在

语法: exists key [key...]

返回值: 整数,存在 key 返回1,其他返回0。使用多个 key ,返回存在的 key 的数量。

例如: exists k1exists k1 k2

expire

设置 key 的存活时间,超过时间, key 自动删除。单位是秒。

语法: expire key seconds

返回值:设置成功返回1,其他返回0。

例如:

ttl

以秒为单位,返回 key 的剩余生存时间( ttl: time to live

语法: ttl key

返回值:

  • -1 :没有设置 key 的存活时间, key 永不过期。例如: ttl k1 -1

  • -2 : key 不存在。例如: ttl k1 -2

  • 数字: key 的剩余时间,秒为单位。例如: ttl k1 5

应用场景:用户注册-验证码的过期时间

type

查看 key 所存储值的数据类型

语法: type key

返回值:字符串表示的数据类型

  • nonekey 不存在

  • string :字符串

  • list :列表

  • set :集合

  • zset :有序集

  • hash :哈希表

del

删除存在的 key ,不存在的 key 忽略。

语法: del key [key...]

返回值:数字,删除的 key 的数量

数据类型操作命令

Redis 中有5种数据类型: stringhashlistsetzset

字符串类型 string

字符串类型是 Redis 中最基本的数据类型,它能存储任何形式的字符串,包括二进制数据,序列化后的数据, JSON 化的对象甚至是一张图片。最大 512M

例如: "{'name':'leon','age':25}"

基本命令

set

将字符串值 value 设置到 key

语法: set key value

get

查看已经插入的 key 。如果值不存在,返回 (nil) ,相当于 null

语法: get key

incr

key 中存储的数字值加1,如果 key 不存在,则 key 的值先被初始化为0,再执行 incr 操作(只能对数字类型的数据操作)

语法: incr key

特性:具备原子性,是线程安全的

decr

key 中存储的数字值减1,如果 key 不存在,则 key 的值先被初始化为0,再执行 decr 操作(只能对数字类型的数据操作)

语法: decr key

特性:具备原子性,是线程安全的

append

如果 key 存在,则将 value 追加到 key 原来旧值的末尾

如果 key 不存在,则将 key 设置值为 value

语法: append key value

返回值:追加字符串之后的总长度

常用命令

strlen

返回 key 所存储的字符串值的长度

语法: strlen key

返回值:

  • 如果 key 存在,返回字符串值的长度

  • 如果 key 不存在,返回0

getrange

获取 key 中字符串值从 start 开始到 end 结束的子字符串,包括 startend ,负数表示从字符串的末尾开始,-1表示最后一个字符。字符串从0开始。(不存在的 key 返回空字符串 ""

语法: getrange key start end

返回值:截取的子字符串

例子: set school bjpowernode

  • getrange school 2 6 :取 power

  • getrange school -4 -1 :取 node

  • getrange school -1 -4 :空字符串 ""

  • getrange schools -4 -1 :空字符串 ""

setrange

value 覆盖(替换) key 的存储的值从 offset 开始,不存在的 key 当作空白字符串处理。

语法: setrange key offset value

返回值:修改后的字符串的长度

例子: set item tmocat

  • setrange item 1 om :将 mo 替换为 om ,返回值为6
mset

同时设置一个或多个 key-value

语法: mset key value [key value...]

返回值:OK

例如: mset k1 v1 k2 v2

mget

获取所有(一个或多个)给定 key 的值

语法: mget key [key...]

返回值:包含所有 key 的列表

例子:

  • mget k1 k2 返回值: v1v2

  • mget k1 k-not k2 返回值: v1(nil)v2

哈希类型 hash

Redis hash 是一个 string 类型的 fieldvalue 的映射表, hash 特别适合用于存储对象。

Redis-hash.png

例如:存储用户登录的session会话信息,实现多服务器之间的会话共享。

基本命令

hset

将哈希表 key 中的域 field 的值设为 value ,如果 key 不存在,则新建 hash 表,执行赋值,如果有 field ,则覆盖值。

语法: hset hash表的key field value

返回值:

  • 如果 fieldhash 表中新 field ,且设置值成功,返回1

  • 如果 field 已经存在,旧值覆盖新值,返回0

例子:

  • hset website baidu www.baidu.com :设置名为 websitehash 表中的 baidu 的值为 www.baidu.com (添加新值)

  • hset website baidu http://www.baidu.com :设置名为 websitehash 表中的 baidu 的值为 http://www.baidu.com (旧值被覆盖)

hget

获取哈希表 key 中给定域 field 的值

语法: hget key field

返回值: field 域的值,如果 key 不存在或者 field 不存在,返回 nil

hmset

同时将多个 field-value (域-值)设置到哈希表 key 中,此命令会覆盖已经存在的 fieldhashkey 不存在,创建空的 hash 表,执行 hmset

语法: hmset key field value [field value...]

返回值:设置成功返回 OK ,如果失败返回一个错误

hmget

获取哈希表 key 中一个或多个给定域的值

语法: hmget key field [field...]

返回值:返回和 field 顺序对应的值,如果 field 不存在,返回 nil

hgetall

获取哈希表 key 中所有的域的值

语法: hgetall key

返回值:以列表形式返回 hash 中域和域的值,如果 key 不存在,返回空 hash

hdel

删除哈希表 key 中一个或多个指定域 field ,不存在 field 直接忽略

语法: hdel key field [field...]

返回值:成功删除的 field 的数量

常用命令

hkeys

查看哈希表 key 中的所有 field

语法: hkeys key

返回值:包含所有 field 的列表, key 不存在返回空列表

hvals

查看哈希表 key 中的所有 field 域的值

语法: hvals key

返回值:包含哈希表所有域值的列表, key 不存在返回空列表

hexists

查看哈希表 key 中,给定域 field 是否存在

语法: hexists key field

返回值:如果 field 存在,返回 1,其他返回0

列表 list

Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)

Redis-list.png

基本命令

lpush

将一个或多个值 value 插入到列表 key 的表头(最左边),从左边开始加入值,从左到右的顺序依次插入到表头。

语法: lpush key value [value...]

返回值:数字,新列表的长度

例子:

  • lpush mylist a b c :往 mylist 列表中插入a 、b、c三个值,插入后,列表的值顺序为: c、b、a。
rpush

将一个或多个值 value 插入到列表 key 的表头(最右边),从左边开始加入值,从左到右的顺序依次插入到表尾。

语法: rpush key value [value...]

返回值:数字,新列表的长度

例子:

  • lpush mylist a b c :往 mylist 列表中插入a 、b、c三个值,插入后,列表的值顺序为: a、b、c。
lrange

获取列表 key 中指定区间内的元素(取区间元素)。列表第一个元素下标从 0 开始; startstop 是列表的开始和结束下标。下标为负数,意为从右侧取数。

语法: lrange key start stop

返回值:区间内的元素

例子: lpush mylist a b c d e

  • lrange mylist 1 3 :返回b、c、d

  • lrange mylist -3 -2 :返回c、d

  • lrange mylist -1 -1 :返回e

  • lrange mylist 0 -1 :返回全部元素

  • lrange mylist 0 100 :返回满足条件的所有元素

lindex

获取列表 key 中指定下标的元素(取单个元素)。只是查询操作,元素不会被删除。列表第一个元素下标从 0 开始, startstop 是列表的开始和结束下标。下标为负数,意为从右侧取数。

语法: lindex key index

返回值:指定下标的元素; index 不在列表范围,返回 nil

llen

获取列表 key 的长度。

语法: llen key

返回值:数值,列表的长度; key 不存在,返回0。

常用命令

lrem

根据参数 count 的值,移除列表中与参数 value 相等的元素, count > 0 ,从列表的头部(左侧)向右开始移除; count < 0 从列表尾部(右侧)开始移除; count = 0 移除表中所有与 value 相等的值。

语法: lrem key count value

返回值:数值,移除的元素个数

lset

将列表 key 下标为 index 的元素的值设置为 value

语法: lset key index value

返回值:设置成功返回 OKkey 不存在或者 index 超出范围,返回错误信息。

linsert

将值 value 插入到列表 key 当中位于值 pivot 之前或之后的位置。 key 不存在, pivot 不在列表中, 不执行任何操作。

语法: linsert key BEFORE|ALFTER pivot value

返回值:命令执行成功,返回新列表的长度。没有找到 pivot 返回 -1

集合类型 set

Redissetstring 类型的无序集合,集合成员是唯一的,即集合中不能出现重复的数据。

基本命令

sadd

【新增】将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略,不会再加入。添加操作是无序的。

语法: sadd key member [member...]

返回值:加入到集合的新元素的个数。不包括被忽略的元素。

smembers

【查询】获取集合 key 中的所有成员元素,不存在的 key 视为空集合。

语法: smembers key

返回值:所有成员元素。

sismember

判断 member 元素是否是集合 key 的成员。

语法: sismember key member

返回值: member 是集合成员返回 1 ,其他返回 0 。

scard

获取集合里面的元素个数。

语法: scard key

返回值:数字, key 的元素个数。其他情况返回 0 。

srem

删除集合 key 中的一个或多个 member 元素,不存在的元素被忽略。

语法: srem key member [member...]

返回值:数字, key 的元素个数。其他情况返回 0 。

常用命令

srandmember

只提供 key ,随机返回集合中一个元素,元素不删除,依然在集合中;提供了 count 时, count 正数,返回包含 count 个数元素的集合,集合元素各不相同。 count 是负数,返回一个 count 绝对值的长度的集合,集合中元素可能会重复多次。

语法: standmember key [count]

返回值:一个元素;多个元素的集合。

spop

随机从集合中删除一个元素, count 是删除的元素个数。

语法: spop key [count]

返回值:被删除的元素, key 不存在或空集合返回 nil

有序集合类型 zset (sorted set)

Redis 有序集合 zset 和集合 set 一样也是 string类型元素的集合,且不允许重复的成员。

不同的是 zset 的每个元素都会关联一个分数(分数可以重复,可以是整数), redis 通过分数来为集合中的成员进行从小到大的排序。

Redis-zset.png

基本命令

zadd

【增改】将一个或多个 member 元素及其 score 值加入到有序集合 key 中,如果 member 存在集合中,则更新值; score 可以是整数或浮点数,最多保留两位小数。如果 key 不存在,会自动创建

语法: zadd key score member [score member...]

返回值:数字,新添加的元素个数

例子:

  • zadd student 60 zhangsan 72 lisi 80 wangwu
zrange

【查询】查询有序集合,指定区间内的元素。集合成员按 score 值从小到大来排序。 startstop 都是从 0 开始。 WITHSCOPES X、选项让 scorevalue 一同返回。

语法: zrange key strat stop [WITHSCOPES]

返回值:数字,新添加的元素个数

zrevrange

返回有序集 key 中,指定区间内的成员。其中成员的位置,按score 值递减(从小到达)来排列。其它同 krange 命令。

语法: zrevrange key strat stop [WITHSCOPES]

返回值:自定区间的成员集合

zrem

删除有序集合 key 中的一个或多个成员,不存在的成员被忽略。

语法: zrem key member [member...]

返回值:被成功删除的成员变量,不包括被忽略的学员。

zcard

获取有序集 key 的元素成员的个数。

语法: zcard key

返回值: key 存在返回集合元素的个数, key 不存在,返回 0 。

常用命令

zrangebyscore

获取有序集 key 中,所有 score 值介于 minmax 之间(包括 minmax )的成员,有序成员是按递增(从小到大)排序。

  • 使用符号 ( 表示不包括
  • minmax 可以使用 -inf+inf 表示最小和最大
  • limit 用来限制返回结果的数量和区间
  • withscores 显示 scorevalue

语法: zrangebyscore key min max [WITHSCORES][LIMIT offset count]

返回值:从小到大排序的指定区间的集合数据

zrevrangebyscore

获取有序集 key 中,所有 score 值介于 maxmin 之间(包括 minmax )的成员,有序成员是按递减(从大到小)排序。其他同 zrangebyscore

语法: zrevrangebyscore key max min [WITHSCORES][LIMIT offset count]

返回值:从大到小排序的指定区间的集合数据

zcount

返回有序集 key 中, score 值介于 minmax 之间(包括 minmax )的成员数量。

语法: zcount key min max

返回值:从大到小排序的指定区间的集合数据数量

适用场景:微博点赞数排序,查看最新注册的n个用户等。

更多命令

更多的命令还是需要去查询官方文档。这里给出官网地址:redis官网

笔记小结

这一篇文章主要介绍了 redis 的 5 种数据类型,以及常用的操作命令。学到这里,只是完成了 redis 的入门学习,下一节会介绍 redis 的高级使用,包括事务、持久化、主从复制、哨兵机制、安全设置等。

学习渠道

因为朋友的推荐,在蛙课网进行了能力提升学习,课程讲解很通透细致,零基础也是没有问题的。要非常感谢朋友的帮助,也要感谢蛙课网提供的精心录制的视频!在这里也算是以私人的方式做一下宣传,也算是尽自己的绵薄之力做的一点小小的回馈吧。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269