Redis 的常用命令
Posted 独一无二的哈密瓜
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis 的常用命令相关的知识,希望对你有一定的参考价值。
文章目录
1. Redis 数据结构
Redis 是一个键值对的数据库, 也就是 key-value 类型的, 这里的 key 一般都是String类型的, value的类型可以有多种.
基本类型:
- String 类型
- Hash 类型
- List 类型
- Set 类型
- SortedSet 类型
特殊数据类型:
- Gerspatial 地理位置
- Hyperloglog 基数计数
- BitMap 位图
2. Redis 通用命令
命令 | 作用 |
---|---|
KEYS | 查看所有符合模板的key |
DEL | 删除一个指定的key |
EXISTS | 判断key是否存在 |
EXPIRE | 给key设置有效期,到期会删除key |
TTL | 查看key的剩余有效期 |
HELP [command] | 查看命令的具体用法 |
注: Redis 的key允许有多个单词形成层级结构, 多个单词之间用:
隔开, 例如 blog:user:1
① KEYS
② DEL
③ EXISTS
④ EXPIRE
⑤ TTL
这里返回 -2
就是删除了
返回 -1
就是存在且没有过期时间
⑥ 层级结构
3. String 类型
value 为String类型, 根据不同的字符串格式, 也可以分为几类
- string: 普通字符串
- int: 整数
- float: 浮点数
注: 字符串类型最大空间不能超过512M
可以使用help @string
来查看string类型的所有方法, 这里展示一些常用的命令.
命令 | 作用 |
---|---|
SET [key] [value] | 添加或者修改已经存在的一个 String 类型的键值对 |
GET [key] | 根据 key 获取 String 类型的 value |
MSET [key] [value] ( [key] [value] …) | 批量添加多个 String 类型键值对 |
MGET [key] ( [key] …) | 根据多个key获取多个String类型的value |
INCR [key] | 让 key 自增1个 |
INCRBY [key] [increment] | 让 key 自增 increment 个 |
INCRBYFLOAT [key] [increment] | 让浮点型 key 自增 increment 个 |
SETNX [key] [value] | 添加一个String类型键值对, 前提key不存在,否则不执行 |
SETEX [key] [second] [value] | 添加一个String类型键值对并指定有效时间 |
① SET
② GET
③ MSET
④ MGET
⑤ INCR
⑥ INCRBY
⑦ INCRBYFLOAT
⑧ SETNX
⑨ SETEX
4. Hash 类型
Hash类型的value, value内是 field+value
的格式
可以使用help @hash
来查看string类型的所有方法, 这里展示一些常用的命令.
命令 | 作用 |
---|---|
HSET [key] [field] [value] ([filed] [value] …) | 添加或者修改hash类型key的field的值 |
HGET [key] [field] | 获取一个hash类型key的field的值 |
HMSET [key] [field] [value] ([filed] [value] …) | 批量添加多个hash类型key的field的值 |
HMGET [key] [field] ( [field] …) | 批量获取多个hash类型key的field的值 |
HGETALL [key] | 获取hash类型的key中所有的field和value |
HKEYS [key] | 获取一个hash类型的key中所有的field |
HVALS [key] | 获取一个hash类型的key中所有的value |
HINCRBY [key] [field] [increment] | 让hash类型key的字段自增 |
HSETNX [key] [field] [value] | 添加一个hash类型的key的field的值, 如果存在就不执行 |
① HSET
这里hset可以添加一个,也可以批量添加
② HGET
这里的hget只能获取一个key的field的值
③ HMSET 和 HMGET
④ HKEYS 和 HVALS
⑤ HINCRBY
⑥ HSETNX
5. List 类型
这里List可以看成一个双向链表
特点: ① 有序 ② 元素可重复 ③ 插入删除快 ④ 查询速度一般
命令 | 作用 |
---|---|
LPUSH [key] [element] ([element] …) | 向左侧插入一个或者多个元素 |
LPOP [key] | 移除并返回列表左侧的第一个元素, 没有返回nil |
RPUSH [key] [element] ([element] …) | 向右侧插入一个或者多个元素 |
RPOP [key] | 移除并返回列表右侧第一个元素, 没有返回nil |
LRANGE [key] [start] [stop] | 返回一段范围内的所有元素 |
BLPOP [key] ([key]…) [timeout] | 在没有元素的时候等待指定时间, 而不是返回nil |
BRPOP [key] ([key]…) [timeout] | 在没有元素的时候等待指定时间, 而不是返回nil |
① LPUSH
② LPOP
③ RPUSH
④ RPOP
⑤ LRANGE
⑥ BRPOP
6. Set 类型
和Java的Set类似
特点: 1. 无序 2. 元素不可重复 3. 查找快 4. 支持交集. 并集, 差集功能
命令 | 作用 |
---|---|
SADD [key] [member] ([member] …) | 添加一个元素 |
SREM [key] [member] ([member] …) | 删除一个元素 |
SCARD [key] | 返回元素个数 |
SISMEMBER [key] [member] | 判断是否存在一个元素 |
SMEMBERS [key] | 获取所有的元素 |
SINTER [key] ([key] … ) | 求key1 和 key2的交集 |
SDIFF [key] ([key] … ) | 求key1 和 key2的差集 |
SUNION [key] ([key] … ) | 求key1 和 key2的并集 |
案例 将下列数据用 Redis 的Set集合来存储
A 的好友有: B , C , D
B 的好友有: C , E , F
利用Set的命令实现下列功能
① 计算A的好友有多少人
② 计算A和B的共同好友
③ 查询是A的好友却不是B的好友的人是哪些
④ 查询A和B的总共有哪些好友
⑤ 判断B是否是A的好友
⑥ 判断A是否是B的好友
⑦ A删除B的好友
首先将好友存入到列表里
① 计算A的好友有多少人
② 计算A和B的共同好友
③ 查询是A的好友却不是B的好友的人是哪些
④ 查询A和B的总共有哪些好友
⑤ 判断B是否是A的好友
⑥ 判断A是否是B的好友
⑦ A删除B的好友
7. SortedSet 类型
是一个可排序的Set集合
特点: 1. 可排序 2. 元素不重复 3. 查询速度快
命令 | 作用 |
---|---|
ZADD [key] [score] [member] ([score] [member] …) | 添加一个或者多个元素, 如果存在,更新score值 |
ZREM [key] [member] ([member] …) | 删除指定元素 |
ZSCORE [key] [member] | 获取指定元素的score值 |
ZRANK [key] [member] | 获取指定元素的排名 |
ZCARD [key] | 获取元素个数 |
ZCOUNT [key] [min] [max] | 统计指定范围内的元素个数 |
ZINCRBY [key] [increment] [member] | |
ZRANGE [key] [min] [max] | 获取指定排名范围内的元素 |
ZRANGEBYSCORE [key] [min] [max] | 获取指定score范围内的元素 |
ZDIFF [numkeys] key ([key] …) | 差集 |
ZINTER [numkeys] key ([key] …) | 交集 |
ZUNION [numkeys] key ([key] …) | 并集 |
所有排名默认是升序, 如果要降序在命令的Z后面添加REV即可, 例如ZREVRANK
案例
将班级的下列学生得分情况存入 Redis 的SortedSet中
A 85, B 89, C 82, D 95, E 78, F 92, G 76
实现以下功能
① 删除D同学
② 获取F同学的分数
③ 获取C同学的排名
④ 查询80分以下有几名同学
⑤ 给F同学加2分
⑥ 查出成绩前3名的同学
⑦ 查出成绩80分以下的所有同学
首先将成绩存入Redis中
① 删除D同学
② 获取F同学的分数
③ 获取C同学的排名
④ 查询80分以下有几名同学
⑤ 给F同学加2分
⑥ 查出成绩前3名的同学
⑦ 查出成绩80分以下的所有同学
常用的redis命令
常用的redis命令
http://www.runoob.com/redis/redis-tutorial.html 菜鸟教程
Cmd连接有密码的redis:$ redis-cli -h host -p port -a password
1、连接操作命令
$redis->quit:关闭连接(connection)
$redis->auth:简单密码认证
2、键值相关命令
$redis->set("test","hello") ~~~set设置test键
$redis->setex("test",11,"jin") ~~~~setex设置test的值并存储11秒
$redis->expire("test",22) ~~~在设置原有的key-value的时效性,时效已过就会消失
$redis->ttl("test");查看test的时效时间
$redis->get("test"); ~~~get获取test值;
$redis->setnx("foo","jin"); ~~~setnx第一次设置了foo的值后,以后都不可改变;
$redis->getset("foo","ming"); ~~~getset这个可以改变setnx当初设置的值;
$redis->incr("foo"); ~~~incr只对值为int型有用;每刷新一次加1;
$redis->incrby("foo",2); ~``incrby只对值为int有用,每刷新一次加2
$redis->exists("foo") ~~~exists检测foo是否存在
$redis->del("foo") ~~~del删除foo
$redis->delete("foo") ~~~~delete一样都是删除foo
$redis->append("foo","jin") ~~~append在已有的foo的字符串后面就"jin",没有的话意思就是定义一个foo 值为jin
$redis-setrange("wreplace",1,"abcd")// ~~~~setrange如何wreplace之前存在则表示从下标为1的后面全部替换成abcd,如何之前没有则 wreplace的话就等于set建了一个
Echo $redis->substr("wreplace",2,4) ~~~substr截取wreplace的值得小标为2~4
$rdis->setbit("bit1",32,1);//表示在32位存入1,这边可能会有大小端的问题;
$redi->getbit("bit1",32);//获取
$redis->randomkey();随机返回一个键
$redis->rename("test","learn"); ~~~rename表示将键test改变为learn
$redis->keys("*"); ~~~查看的所有的键
$redis-keys("a?b?c*") ~~~查出符合模糊查询的a?b?c*的所有键;?表示只能有一个,*表示可有任意个;
$redis->dbsize(); ~~~记录当前记录的总数
3、队列操作(列表不与键值对应,两者不一样)
$redis->rpush("foolist","bar1") ~~~在foolist中右边插入bar1 返回长度1
$redis->lpush("foolist","bar") ~~~在foolist列表的左边插入"bar" 返回长度2
$redis->rpushx("foolist","bar2) ~~~对已有的foolist右边插入bar2 返回长度3
$redis->llen("foolist") ~~~返回foolist的长度
$redis->lindex("foolist",1) ~~~返回列表foolist第二个元素
$redis->lrange("foolist",0,1) ~~~获取列表foolist 0~1这两个元素
$redis->lrange("foolist",0,-1) ~~~获取列表foolist所有的元素-1:到倒数第一个,-2:到第二个元素
$redis->lset("foolist",1,"jin") ~~~修改foolist第二个元素改为jin
$redis->lpop("foolist") ~~~删除列表foolist左起第一个,并弹出
$redis->rpop("foolist") ~~~删除列表foolist右起第一个,并弹出
$redis->ltrim("foolist",0,1) ~~~保留列表foolist中0~1这两个元素,其余删除
$redis->rpoplpush("list1","list2") ~~~删除list1最右边的元素,就删除元素从左边插入到list2中
$redis->rpoplpush("list2","list2") ~~~同表也可以的,将表中最右边的元素已到最左边
$redis->linsert("foolist","before","bar1","123"); ~~~linsert设置foolist列表中bar1之前插入123
$redis->linsert("foolist","after","bar2","234"); ~~~linsert设置foolist列表中bar2之后插入234;
$redis->blpop() ~~~如果list3为空则一直等待,直到不为空时将第一元素弹出,10秒后超时(不知道什么样)
4、set表操作
5、hash表操作
6、redis管理操作
文章来源:刘俊涛的博客
以上是关于Redis 的常用命令的主要内容,如果未能解决你的问题,请参考以下文章