Redis简易教程(二)- 数据类型与常用命令

一、数据类型

1.有哪些类型

Redis是Key-Value型数据库,Key只有一种类型,字符串。Value的数据类型比较丰富,考虑来应用场合和使用场景,高效利用内存等因素,总共设计了5种类型:string, hash, list, set和zset。

2.string类型

string可以存储任何数据,一条string的记录最大1G。
常用操作:
(1)set key value
设置key对应string类型的value,返回1表示成功,返回0表示失败。
如果key不存在,则插入一条新的记录,如果key存在则更新此记录。
(2)setnx key value
与set基本功能相同,区别在于如果key存在,则不会执行命令。
(3)mset key1 value1 key2 value2 ...
批量设置多个key的string类型的value,只要其中任何一个key value设置成功就返回1,全部执行不成功则返回0。
(4)msetnx key1 value1 key2 value2 ...
与mset基本功能相同,区别在于如果批量操作中某些key已经存在,则不会更新这些key对应的value。
(5)get key
获取key对应的string类型的value,如果key不存在返回nil。
(6)mget key1 key2 ...
批量获取
(7)getset key value
先获取值再进行更新。如果key不存在返回nil。
(8)incr key
对key对应的value进行自增操作,key对应的value必须是一个整数,如果key不存在,则设置key值为1。
(9)incrby key integer
对key对应的value进行自增integer数值
(10)decr key
对key对应的value进行自减操作,key对应的value必须是一个整数,如果key不存在,则设置key值为-1。
(11)decrby key integer
对key对应的value进行自减integer数值

3.hash类型

hash类型是由多个string类型的key value对组成的映射表。

hash类型相对多个string类型key value对存储的优点:
将一个对象存储在hash类型中占用更少的内存(集中存储),并且可以方便的对整个对方进行存取。

常用操作:
(1)hset key field value
设置key对应的hash的字段field的值value。
(2)hmset key field value field value field value ...
批量设置key对应的hash的多个字段field的值value。
(3)hget key field
获取key对应的hash中指定的字段field的值
(4)hmget key field1 field2 field3 ...
批量获取key对应的hash中多个字段的值
(5)hkeys key
得到key对应的hash的所有字段
(6)hvals key
得到key对应的hash的所有value
(7)hgetall key
得到key对应的hash的所有field和value
(8)hlen key
得到key对应的hash的字段个数。
(9)hincrby key field integer
将指定的hash field加上指定的值 。成功返回hash field变更后的值。
(10)hexists key field
判断key对应的hash指定的字段是否存在。
(11)hdel key field
删除key对应的hash指定字段。

4.list类型

list类型是一个链表结构,是一个由string类型元素组成的双向链表。
主要操作就是push,pop,range等。
双向链表分左右,左为表头,右为表尾,可以双向进行操作,快速查询到链表中任一元素。
常用操作:
(1)lpush key value
在key对应的list的头部添加元素。
(2)rpush key value
在key对应的list的尾部添加元素。
(3)lpop key
从list的头部删除并返回删除的元素。
(4)rpop key
从list的尾部删除并返回删除的元素。
(5)blpop key1 key2... timeout
在timeout(超时时间,以秒为单位)时间内,从头到尾扫描,返回对第一个非空list进行lpop操作的结果,并返回删除的元素。
(6)brpop key1 key2... timeout
与blpop类似,方向不同,从尾到头扫描。
(7)llen key
返回key对应的list的元素个数。
(8)lrange key start end
返回指定区间内的元素,下标从0开始,负值表示逆向,即-1表示倒数第一个元素。
(9)ltrim key start end
截取list指定区间内的元素。
(10)lset key index value
更新指定下标的元素值。
(11)lrem key count value
从List的头部(count>0时)或尾部(count<0时)开始,删除count个等于value值的元素,返回删除的数量,count为0时表示删除全部等于value值的元素。

5.set类型

set是无序排重的,最大可包含2的32次方-1个元素。redis的set是通过hash table实现的。
set可以进行交集、并集、差集运算,可以应用在求共同好友、blog的tag功能等场景。

常用操作:
(1)sadd key member
添加一个string类型的元素到key对应的set集合中。
(2)srem key member
删除指定元素。
(3)spop key
随机删除set中的一个元素,并返回这个元素。
(4)smove sourcekey distkey member
从sourcekey对应的set中转移member对应的元素到diskey对应的set中。
(5)scard key
返回set中元素的个数
(6)sismember key member
判断member是否在set中。
(7)srandmember key
与spop类似,随机取得一个元素,但不删除这个元素。
(8)smembers key
得到集合中所有元素
(9)sinter key1 key2 ...
返回多个set集合的交集
(10)sinterstore distkey key1 key2 ...
返加key1 key2等多个set的交集,并存储在distkey对应的set中。
(12)sunion key1 key2 ...
返回多个set集合的并集
(13)sunionstore distkey key1 key2 ...
返加key1 key2等多个set的并集,并存储在distkey对应的set中。
(14)sdiff key1 key2 ...
返回多个set集合的差集,差集运算有顺序性,操作的key顺序不同,运算结果不同。
(15)sdiffstore distkey key1 key2 ...
返加key1 key2等多个set的差集,并存储在distkey对应的set中。

6.zset类型

zset即sorted set,有序集合,是在set的基础上为每个元素添加一个score属性,集合中的元素根据score大小进行排序。任何时候,zset都是有序的。
每次添加进一个新的元素或者集合中的元素的score发生变更时,zset会自动根据score重新排序。
常用操作:
(1)zadd key score1 member1 score2 member2...
添加元素到集合,元素如果存在,则更新对应的score
(2)zrem key member
删除指定元素,只删除一个
(3)zincrby key incr member
增加对应member的score,加完后元素会进行移动,以保证整个集合的有序性。
(4)zremrangebyrank key min max
对排名在min与max之间的元素进行删除
(5)zremrangebyscore key min max
按score进行区间删除
(6)zrank key member
返回指定元素在集合中的排名(下标,以0开始),集合中元素是按score从小到大升序的。
(7)zrevrank key member
返回降序排名
(8)zrange key start end
返回集合中指定区间的元素(升序)
(9)zrevrange key start end
返回集合中指定区间的元素(降序)
(10)zrangebyscore key min max
返回score在min到max之间的元素
(11)zcount key min max
返回集合中score在给定区间的数量
(12)zcard key
返回集合中元素的个数
(13)zscore key element
返回集合中指定元素的分数

二、对key进行操作

  1. 对key常用的操作有:
    (1)exists key
    判断指定key是否存在
    (2)del key1 key2 ...
    删除给定key,返回删除的数目,0表示给定key都不存在
    (3)type key
    返回给定key对应value的数据类型
    (4)keys pattern
    返回匹配指定模式的所有key,比如 keys user* 表示返回以user开头的所有key
    (5)randomkey
    随机返回当前数据库中一个key
    (6)rename oldkey newkey
    重命名一个key,如果newkey存在,将会进行覆盖
    (7)renamenx oldkey newkey
    重命名一个key,如果newkey存在,则不执行命令(不会覆盖)
    (8)expire key seconds
    为key指定过期时间
    (9)ttl key
    返回key的剩余过期时间,以秒为单位,<0表示key不存在或者已经过期。
    (10)select db-index
    切换数据库
    (11)move key db-index
    将key从当前数据库移动到指定数据库

三、常用管理命令

1. redis-cli交互式客户端

运行redis的bin目录下的redis-cli命令,进入交互式命令行

redis-cli -h 127.0.0.1 -p 6379 制定要连接的ip和端口号

redis-cli PING,ping redis的端口,看是否正常

redis-cli SHUTDOWN 关闭redis服务

2. 修改数据库数量

一个redis实例默认有16个数据库,可以在redis的conf配置文件中进行修改

databases 16

3.生成备份文件

关于数据持久化及备份策略,将在后面的教程中再深入探讨。此处只列出几个常用的命令:
(1)save
保存数据到硬盘dump.rdb备份文件中,会堵塞主进程
(2)bgsave
以后台进程保存数据到硬盘dump.rdb备份文件,不会堵塞主进程,常用
(3)shutdown save
安全关闭数据库,关闭前会先执行save备份操作。
(4)bgrewriteaof
异步执行重写一个AOF文件操作

4. 获取客户端连接

client list
可以得到连接到服务器的所有客户端

5. 结束客户端连接

client kill ipaddr:port
ipaddr为客户端IP,port为客户端端口

6. 标记当前连接名

client setname name
为当前连接设置一个name,区分与其他连接

7. 获取服务器端统计信息

info [section]
section参数可省略,省略表示显示所有信息
加上对应的section可以显示对应分块的统计信息,比如 info cpu得到服务器cpu使用情况, info replication得到replication复制方面的信息等等。

8. 清空数据

(1)flushdb
清空当前数据库所有key
(2)flushall
清空所有数据库所有key

9. 热修改Replication角色

(1)role
查询当前服务器的角色
(2)slaveof masterip:port
设置本实例为masterip:port服务器的从服务器

10.热修改配置信息

(1)config get setting
获取当前setting对应的配置的信息,比如config get timeout得到当前配置的连接超时时间
(2)config set setting value
设置当前setting对应的配置的信息

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

推荐阅读更多精彩内容

  • 最近学习redis,记录一下 redis官网:redis.io 中文官网:http://www.redis.net...
    alexpdh阅读 1,858评论 0 1
  • 本文为笔者对在学习Redis过程中所收集资料的一个总结,目的是为了以后方便回顾相关的知识,大部分为非原创内容。特此...
    EakonZhao阅读 14,407评论 0 9
  • Redis::__construct构造函数$redis = new Redis(); connect, open...
    bycall阅读 1,398评论 0 2
  • 代码 Redis的操作 1、连接操作相关的命令quit:关闭连接(connection)auth:简单密码认证 2...
    gogoforit阅读 484评论 0 0
  • 查看当前所有的KEY KEYS *KEYS zhang* #查看前缀为zhang的所有键; 查看当前redis...
    Zhang21阅读 10,353评论 0 3