redis的基本操作整理

概念

Redis (Remote Dictionary Server) is an in-memory data structure project implementing a distributed, in-memory key-value database with optional durability

redis基础数据结构

redis作为key-value数据库,key都是字符串,value则为以下数据结构其中之一

  1. string 字符串
  2. list 列表
  3. set 集合
  4. hash 哈希
  5. zset 有序集合

redis常用命令

db操作

redis由多个db构成,默认有0~15号db

操作 命令 说明
选定db select db select 1表示选定1号数据库
获取db存储的key总数 dbsize 返回整数
清空当前db的数据 flushdb 谨慎使用
清空所有db的数据 flushall 谨慎使用!!

key操作

db中可以有很多key

操作 命令 示例 说明
给key赋值(不同的数据类型有不同的方式,用字符串类型来举例说明) set key value set myname jack 通常返回OK
是否存在key exists key exists myname 存在=1,不存在=0
删除key del key del myname 成功=1,失败=0
查看key的数据类型 type key type myname string/list/hash/set/zset...
设置key过期时间(单位:秒) expire key n expire myname 100 n<=0时,key会马上过期
查看key剩余有效时间 ttl key ttl myname -2=key不存在,-1=key无过期时间
模式匹配符合规则的key keys pattern keys my_* keys *查看所有key名

string 字符串

  • 最常用(最简单)的数据结构
  • value通常是普通字符串或序列化后的对象(也是字符串)
操作 命令 示例 说明
给key赋值 set key value set myname jack 通常返回OK
给多个key赋值(减少网络传输次数) mset key1 val1 key2 val2 ... mset myname jack hisname john 通常返回OK
获取key的值 get key get myname val字符串 / (nil)空值
获取多个key的值 mget key1 key2 ... mget myname hisname val字符串 / (nil)空值
使key的值+1并返回(value不为数字时,会报错。key未定义,则赋值1并返回) incr key incr age 返回增加后的数 / 报错原因
使key的值-1并返回(key未定义,则赋值-1并返回) decr key decr money 返回增加后的数 / 报错原因
使key的值+N并返回 incrby key num incrby money 100 返回增加后的数 / 报错原因
使key的值-N并返回 decrby key num decrby money 50 返回增加后的数 / 报错原因
key的值的字符串长度 strlen key strlen myname type=string时=长度 / type=none时=0 / type=其他时=报错
往key的值后追加字符串 append key str append myname happy type=string/none 追加 , type=其他 报错
截取key对应的字符串返回(不会改变原串,start和end是闭区间,且支持负数) substr key start end substr money 0 -3 超过范围不会报错
获取key用二进制表示的第n位(0或1) getbit key n getbit myname 2 -
设置key用二进制表示的第n位(0或1) setbit key n val setbit myname 3 1 val=0/1,否则会报错
获取key中的范围内所有字符用二进制表示时的1的个数(闭区间) bitcount key start end bitcount myname 2 3,start/end可以为空,表示整个字符串 -

list 列表

  • 双向链表结构,两端插入删除速度快,查询元素慢
操作 命令 示例 说明
从key左边(逐个)插入元素 lpush key val1 val2 ... lpush namelist jack john bob 通常返回正数表示成功,正数=插入元素个数
从key右边(逐个)插入元素 rpush key val1 val2 ... rpush namelist jack john bob 通常返回正数表示成功,正数=插入元素个数
从key左边弹出元素 lpop key lpop namelist 弹出元素,如果key对应的是null值,则弹出(nil)空值
从key右边弹出元素 rpop key rpop namelist 弹出元素,如果key对应的是null值,则弹出(nil)空值
key中元素个数 llen key llen namelist -
获取key中元素范围(不会改变key,start和end是闭区间,且支持负数) lrange namelist start end lrange namelist 2 5 空时返回(empty list or set)
改变key中元素,只保留范围内元素 ltrim key start end ltrim namelist 1 2 返回OK表示成功
获取key的第n个元素 lindex key n lindex namelist 2 返回该元素 / (nil)空值

hash 哈希

操作 命令 示例 说明
赋值key中的field hset key field val hset myattr age 10 初次创建返回1,否则(修改)返回0
获取key的field对应的值 hget key field hget myattr age 返回该元素 / (nil)空值
为key的field设置多个值 hmset key f1 val1 f2 val2 hmset myattr eyes big mouth small 通常返回OK
从key中取多值 hmget key f1 f2 ... hmget myattr f1 f2 f3 返回结果列表
获取key的所有字段和所有值 hgetall key hgetall myattr 返回key和value,每个元素都是一行
取所有字段名 hkeys key hkeys myattr 返回key,每个元素都是一行
取所有数据值 hvals key hvals myattr 返回value,每个元素都是一行
获取字段长度 hlen key hlen myattr key-value对的个数
删除字段 del key field1 field2 del myattr xxx yyy 删除元素个数
字段是否存在 hexists key field hexists myattr k3 存在=1,不存在=0
当字段存在的时候赋值(相当于exists+hset,但是是原子操作) hsetnx key field val hsetnx myattr k3 aa 设置成功=1,已存在=0

set 集合

操作 命令 示例
往key中增加值 sadd key val1 val2 sadd flag red blue 成功增加的元素个数(>=0)
删除key中的值 srem key val1 val2 srem flag red blue 成功删除的元素个数(>=0)
获取key中所有元素 smembers key smembers flag 返回列表
判断某个元素是否在key的元素中 sismember key val sismember flag green 存在=1,不存在=0
key中元素个数 scard key scard flag 元素个数
随机弹出一个元素 spop key spop flag 元素值
随机返回n个元素(负数表示可重复,正数表示不重复) srandmember key count srandmember flag -2 元素列表
差集 sdiff key1 key2 ... sdiff f1 f2 f3 元素列表
交集 sinner key1 key2 ... sinner f1 f2 f3 元素列表
并集 sunion key1 key2 ... sunion f1 f2 f3 元素列表

zset 有序集合

操作 命令 示例
往key中增加值 zadd key score1 val1 score2 val2 zadd zflag 100 red 90 blue 成功增加的元素个数(>=0)
删除key中的值 zrem key val1 val2 zrem zflag red blue 成功删除的元素个数(>=0)
获取分数 zscore key val zrem zflag red 分数
key中元素个数 zcard key zcard zflag 元素个数
指定分数范围内的元素个数(默认是闭区间,加上(可以转成开区间) zcount key min max zcount zflag (85 (90 元素个数
升序获取key中排名范围内的元素 zrange key start end [withscores] zrange zflag 0 -3 withscores withscores参数表示同时返回分数,分数相等时,按key字典序
降序获取key中排名范围内的元素 zrevrange key start end [withscores] zrevrange zflag 0 2 -
升序获取key中分数范围内的元素 zrangebyscore key min max [withscores] [limit offset count] zrangescore zflag 90 100 limit 3 1 升序的时候,先min后max,limit后接偏移量和获取的行数
降序获取key中分数范围内的元素 zrevrangebyscore key max min [withscores] [limit offset count] zrevrangescore zflag 110 100 limit 3 1 降序的时候,先max后min,limit后接偏移量和获取的行数
获取key中某分数范围内的元素个数 zcount key min max zcount zflag 100 110 元素个数
获取key中某个元素的升序排名 zrank key value zrank zflag red 从0开始算
获取key中某个元素的降序排名 zrevrank key value zrevrank zflag red -
删除key中某个元素 zrem key val1 val2 zrem zflag red blue 成功删除的元素个数(>=0)
删除key中某个排名范围的元素 zremrangebyrank key start end zremrangebyrank zflag 0 1 成功删除的元素个数(>=0)
删除key中某个分数范围元素 zremrangebyscore key min max zremrangebyscore zflag 90 100 成功删除的元素个数(>=0)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351

推荐阅读更多精彩内容

  • Redis的内存优化 声明:本文内容来自《Redis开发与运维》一书第八章,如转载请声明。 Redis所有的数据都...
    meng_philip123阅读 18,884评论 2 29
  • NOSQL类型简介键值对:会使用到一个哈希表,表中有一个特定的键和一个指针指向特定的数据,如redis,volde...
    MicoCube阅读 3,963评论 2 27
  • 参考来源 Redis的内存优化 Redis所有的数据都在内存中,而内存又是非常宝贵的资源。对于如何优化内存使用一直...
    秦汉邮侠阅读 1,285评论 0 2
  • 声明:本文内容来自《Redis开发与运维》一书第八章,如转载请声明。Redis所有的数据都在内存中,而内存又是非常...
    yoqu阅读 1,494评论 0 2
  • 记得老叶总喜欢说等她两个小孩都上学了她要怎么样怎么样,小凤也是二胎后算是告别职场生涯了。是啊,都说女人结婚生子后...
    谷幽_yan阅读 175评论 0 0