redis常用命令手册大全
一、五种数据类型
1.Redis字符串String
String 是最简单的类型,你可以理解成与 Memcached 是一模一样的类型,一个 key 对应一个value,其上支持的操作与 Memcached 的操作类似。但它的功能更丰富。string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据.
①.set设置指定的key的值
127.0.0.1:6379> set name mz
OK
127.0.0.1:6379>
②.get获取指定的key的值
127.0.0.1:6379> get name
"mz"
127.0.0.1:6379>
如果key不存在,返回nil
127.0.0.1:6379> get col
(nil)
127.0.0.1:6379>
③.incr给指定的key值加一,返回一个加一之后的结果。
127.0.0.1:6379> set num 10
OK
127.0.0.1:6379> incr num
(integer) 11
127.0.0.1:6379>
④.incrby将 key 所储存的值加上给定的增量值
127.0.0.1:6379> incrby num 10
(integer) 21
127.0.0.1:6379>
⑤.decr将key 中储存的数字值减一。
127.0.0.1:6379> decr num
(integer) 20
127.0.0.1:6379>
⑥.decrby将 key 所储存的值减去给定的增量值
127.0.0.1:6379> decrby num 5
(integer) 15
27.0.0.1:6379>
⑦.SETBIT key offset value
127.0.0.1:6379> setbit tom 100 1
(integer) 0
127.0.0.1:6379>
⑧.getset key value
将给定 key 的值设为 value ,并返回 key 的旧值(old value)。
127.0.0.1:6379> getset num 0
"15"
127.0.0.1:6379> get num
"0"
127.0.0.1:6379>
思考:getset和incr结合有什么作用呢?
如果要设计一个复位的计数器,该如何使用呢?
如果某一个进程发生时,就会调用incr,当该进程结束时,完成get myCount 和set myCount 0.
127.0.0.1:6379> incr myCount
(integer) 1
127.0.0.1:6379> incr myCount
(integer) 2
127.0.0.1:6379> getset myCount 0
"2"
127.0.0.1:6379> get myCount
"0"
127.0.0.1:6379>
应用:计数器
计数器是 Redis 的原子性自增操作可实现的最直观的模式了,它的想法相当简单:每当某个操作发生时,向Redis 发送一个INCR 命令。
比如在一个 web 应用程序中,如果想知道用户在一年中每天的点击量,那么只要将用户 ID 以及相关的日期信息作为键,并在每次用户点击页面时,执行一次自增操作即可。
比如用户名是 peter ,点击时间是 2012 年 3 月 22 日,那么执行命令 INCR peter::2012.3.22 。
可以用以下几种方式扩展这个简单的模式:
• 可以通过组合使用INCR 和EXPIRE ,来达到只在规定的生存时间内进行计数 (counting) 的目的。
• 客户端可以通过使用GETSET 命令原子性地获取计数器的当前值并将计数器清零
• 使用其他自增/自减操作,比如DECR 和INCRBY ,用户可以通过执行不同的操作增加或减少计数器的值,比如在游戏中的记分器就可能用到这些命令。
2.redis哈希(hash)
Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。
①.hset key fields
设置哈希表中的key对应的 filed和value
127.0.0.1:6379> hmset cat name "tom" color "red" age "12"
OK
127.0.0.1:6379>
②.hget key field
获取哈希表中key的字段值
127.0.0.1:6379> hget cat name
"tom"
127.0.0.1:6379>
③.hlen key
获取哈希表中字段的数量
127.0.0.1:6379> hlen cat
(integer) 3
127.0.0.1:6379>
④.hkeys key
获取该哈希表中所有的filed
127.0.0.1:6379> hkeys cat
1) "name"
2) "color"
3) "age"
127.0.0.1:6379>
⑤.hvals key 获取哈希表中所有值
127.0.0.1:6379> hvals cat
1) "tom"
2) "red"
3) "12"
127.0.0.1:6379>
3.redis列表(list)
①.lpush key value
将一个或多个值插入到列表头部
key后面的value可以是多个
127.0.0.1:6379> lpush username xm
(integer) 1
127.0.0.1:6379> lpush username xg
(integer) 2
127.0.0.1:6379> lpush username zg
(integer) 3
127.0.0.1:6379> lpush username we we
(integer) 5
127.0.0.1:6379>
②.lrange key start end
取出给定索引范围的列表值
127.0.0.1:6379> lrange username 0 7
1) "we"
2) "we"
3) "zg"
4) "xg"
5) "xm"
注:后面那个索引超出也没有关系,redis会自动处理,会取出在哪个范围内的所有值
看完有什么发现呢?是不是觉得跟栈的特点很相似,先进后出。
③.lpop key
移除并获取列表中的第一个元素
127.0.0.1:6379> lpop username
"we"
127.0.0.1:6379> lrange username 0 10
1) "we"
2) "zg"
3) "xg"
4) "xm"
127.0.0.1:6379>
④.通过索引获取
获取指定索引处的值,如果该索引处没有值,则返回nil
127.0.0.1:6379> lindex username 5
(nil)
127.0.0.1:6379> lindex username 4
"xm"
127.0.0.1:6379>
⑤.rpop key
移除列表的最后一个元素,返回值为移除的元素。
127.0.0.1:6379> rpop username
"xm"
127.0.0.1:6379> lrange username 0 10
1) "we"
2) "zg"
3) "xg"
127.0.0.1:6379>
应用:
双十一秒杀
最新消息的排行
4.redis集合set
Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
①.lpush key value
127.0.0.1:6379> lpush username weh
(integer) 5
127.0.0.1:6379> sadd animal dog
(integer) 1
127.0.0.1:6379> sadd animal pig
(integer) 1
127.0.0.1:6379> sadd animal cat
(integer) 1
127.0.0.1:6379> sadd animal cat
(integer) 0
127.0.0.1:6379> smembers animal
1) "pig"
2) "dog"
3) "cat"
127.0.0.1:6379>
发现什么了吗?和Java中的set类似,无序不能重复
②.scard key 获取集合的成员数
127.0.0.1:6379> scard animal
(integer) 5
127.0.0.1:6379>
③.smembers key返回集合中的所有成员
127.0.0.1:6379> smembers animal
1) "sheep"
2) "pig"
3) "dog"
4) "cat"
5) "tiger"
④.spop key
移除并返回集合中的一个随机元素
127.0.0.1:6379> spop animal
"dog"
127.0.0.1:6379> smembers animal
1) "cat"
2) "pig"
3) "sheep"
4) "tiger"
127.0.0.1:6379>
⑤.SISMEMBER key member
判断 member 元素是否是集合 key 的成员
127.0.0.1:6379> sismember animal cat
(integer) 1
127.0.0.1:6379> sismember animal jj
(integer) 0
127.0.0.1:6379>
是返回1,否则,返回0
⑥.sinter key1 key2
求集合中的交集
127.0.0.1:6379> sadd dog a b c d f g h
(integer) 7
127.0.0.1:6379> sadd pig a b c d m l o
(integer) 7
127.0.0.1:6379> sinter dog pig
1) "d"
2) "b"
3) "a"
4) "c"
127.0.0.1:6379>
⑦.sinterstore newkey key1 key2
返回集合中的交集,并存放到新的集合中
127.0.0.1:6379> sinterstore my dog pig
(integer) 4
127.0.0.1:6379> smembers my
1) "a"
2) "c"
3) "b"
4) "d"
127.0.0.1:6379>
应用:
每一个人的QQ好友都存放到一个集合中,这样求两个人共同好友的,只需求出交集即可。
5.redis有序集合sorted set
sorted set 是 set 的一个升级版本,它在 set 的基础上增加了一个顺序属性,这一属性在添加修改元素的时候可以指定,每次指定后,zset 会自动重新按新的值调整顺序。可以理解为有两列的 mysql 表,一列存 value,一列存顺序。操作中 key 理解为 zset 的名字。和 set 一样 sorted set 也是 string 类型元素的集合,不同的是每个元素都会关联一个 double类型的 score。sorted set 的实现是 skip list 和 hash table 的混合体。
当元素被添加到集合中时,一个元素到 score 的映射被添加到 hash table 中,所以给定一个元素获取 score 的开销是 O(1),另一个 score 到元素的映射被添加到 skip list,并按照 score 排序,所以就可以有序的获取集合中的元素。添加,删除操作开销都是 O(log(N))和 skip list 的开销一致,redis 的 skip list 实现用的是双向链表,这样就可以逆序从尾部取元素。sorted set 最
经常的使用方式应该是作为索引来使用.我们可以把要排序的字段作为 score 存储,对象的 id当元素存储。
以某一个条件为权重,进行排序。
①.zadd key scores members
向名称为 key 的 zset 中添加元素 member,score 用于排序。如果该元素已经存在,则根据score 更新该元素的顺序
127.0.0.1:6379> zadd myaset 1 one
(integer) 1
127.0.0.1:6379> zadd myaset 2 two
(integer) 1
127.0.0.1:6379> zadd myaset 5 three
(integer) 1
127.0.0.1:6379> zadd myaset 6 three
(integer) 0
127.0.0.1:6379> zrange myaset 0 6 withscores
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "6"
127.0.0.1:6379>
我们可以看到three被设置了两次,以最后一次为准
②.zrem
删除名称为 key 的 zset 中的元素 member
127.0.0.1:6379> zrange myaset 0 6 withscores
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "6"
127.0.0.1:6379> zrem myaset one
(integer) 1
127.0.0.1:6379> zrange myaset 0 6 withscores
1) "two"
2) "2"
3) "three"
4) "6"
127.0.0.1:6379>
two被删除
③. zincrby
如果在名称为 key 的 zset 中已经存在元素 member,则该元素的 score 增加 increment;否则向集合中添加该元素,其 score 的值为 increment
127.0.0.1:6379> zrange myaset 0 6 withscores
1) "two"
2) "2"
3) "three"
4) "6"
127.0.0.1:6379> zincrby myaset 3 three
"9"
127.0.0.1:6379>
three由3增加到了9
④.zrank
返回名称为 key 的 zset 中 member 元素的排名(按 score 从小到大排序)即下标
127.0.0.1:6379> zrank myaset two
(integer) 0
127.0.0.1:6379> zrank myaset three
(integer) 1
127.0.0.1:6379>
注意:返回的是索引,不是score
⑤. zrevrank
返回名称为 key 的 zset 中 member 元素的排名(按 score 从大到小排序)即下标
127.0.0.1:6379> zrevrange myaset 0 10 withscores
1) "three"
2) "9"
3) "two"
4) "2"
127.0.0.1:6379>
⑥.zcount
返回集合中 score 在给定区间的数量
127.0.0.1:6379> zcount myaset 1 10
(integer) 2
127.0.0.1:6379>
应用:
搜索商品时按照价格排序
二.键值命令
keys *
返回所有key127.0.0.1:6379> keys *
1) "color"
2) "a"
3) "mz"
4) "my"
5) "x"
6) "name"
7) "customer"
8) "dog"
9) "username"2.keys w*
取出以w开头的key127.0.0.1:6379> keys w*
1) "wan"
2) "weh"
127.0.0.1:6379>3.exists key
是否存在该键
4.del key
删除指定的键127.0.0.1:6379> exists wan
(integer) 1
127.0.0.1:6379> del wan
(integer) 1
127.0.0.1:6379> exists wan
(integer) 0
127.0.0.1:6379>5.expire
设置过期时间(单位:秒)127.0.0.1:6379> expire debt 15
(integer) 1
127.0.0.1:6379> ttl debt
(integer) 9
127.0.0.1:6379> ttl debt
(integer) 2
127.0.0.1:6379> ttl debt
(integer) -2
127.0.0.1:6379>设置debt这个key的过期时间是15秒,然后我们不断的用ttl 来获取这个
key 的有效时长,直至为-2 说明此值已过期
6.move
将当前数据库中的 key 转移到其它数据库中127.0.0.1:6379> select 0
OK
127.0.0.1:6379> set bus 1
OK
127.0.0.1:6379> move bus 2
(integer) 1
127.0.0.1:6379> select 2
OK
127.0.0.1:6379[2]> get bus
"1"
127.0.0.1:6379[2]>7.移除给定 key 的过期时间
127.0.0.1:6379[2]> expire bus 100
(integer) 1
127.0.0.1:6379[2]> ttl bus
(integer) 83
127.0.0.1:6379[2]> persist bus
(integer) 1
127.0.0.1:6379[2]> ttl bus
(integer) -1
127.0.0.1:6379[2]>8.randomkey
随即返回一个key127.0.0.1:6379> randomkey
"s"
127.0.0.1:6379> randomkey
"myCount"
127.0.0.1:6379> randomkey
"dog"
127.0.0.1:6379>
9.rename
重命名key
127.0.0.1:6379> rename s dg
OK
127.0.0.1:6379>
三、服务相关
1.ping
测试连接是否成功
127.0.0.1:6379> ping
PONG
127.0.0.1:6379>
2.quit
退出
3.dbsize
返回数据库中的key的数目
127.0.0.1:6379> dbsize
integer) 26
127.0.0.1:6379>
4.flushdb
删除当前库的所有key
5.flushall
删除所有数据库的key
6.select 库的索引
redis有16个数据库,默认都存在0号库
redis常用命令手册大全的更多相关文章
- Redis常用命令手册:服务器相关命令
Redis提供了丰富的命令(command)对数据库和各种数据类型进行操作,这些command可以在Linux终端使用.在编程时,比如各类语言包,这些命令都有对应的方法.下面将Redis提供的命令做一 ...
- Redis 常用命令 大全
Redis 常用命令 发现几个很好的 Redis 常用命令汇总大全网页,分享给小伙伴们~ 1.Redis 命令参考 http://redisdoc.com/string/index.html 2.W3 ...
- Redis快速起步及Redis常用命令大全
本系列教程内容提要 Java工程师之Redis实战系列教程教程是一个学习教程,是关于Java工程师的Redis知识的实战系列教程,本系列教程均以解决特定问题为目标,使用Redis快速解决在实际生产中的 ...
- 思科、华为、H3C常用命令对比大全
思科.华为.H3C这些网络设备的命令还是挺多的,不过我们一般用的路由交换机设备都是最简单的了,先学基本命令,再学其他功能命令.路由命令是最基本的命令了. 思科.华为.H3C常用命令对比大全 CI ...
- Redis常用命令
Redis常用命令Redis提供了丰富的命令对数据库和各种数据类型进行操作,这些命令可以再Linux终端使用.1.键值相关命令2.服务器相关命令 一.键值相关命令 1.get get 键值 当 key ...
- 第2讲 Redis常用命令与高级应用
目录 一.redis数据类型 5. sorted sets类型和操作 二.Redis常用命令 1.键值相关命令 2.服务器相关命令 三. redis高级应用 1. 给redis服务器设置密码 2.持久 ...
- UBoot常用命令手册
UBoot常用命令手册 U-Boot还提供了更加详细的命令帮助,可以通过”?”显示支持的命令列表,通过help [CommandName]命令还可以查看每个命令的参数说明. 1.bootm bootm ...
- [置顶] linux常用命令手册
前言:整理了一份linux常用命令手册,与大家分享.这是一些比较常用的命令. 我已经整理成一份PDF带书签的手册,可以到CSDN免费下载. 下载地址:http://download.csdn.net/ ...
- Linux常用命令手册
Linux常用命令手册 NO 分类 PS1 命令名 用法及参数 功能注解 对应章节 1 文件管理 # ls ls -a 列出当前目录下的所有文件,包括以.头的隐含文件 文件管理 # ls ls ...
随机推荐
- CF1225B1 TV Subscriptions (Easy Version)
CF1225B1 TV Subscriptions (Easy Version) 洛谷评测传送门 题目描述 The only difference between easy and hard vers ...
- hibernate中flush()、refresh()、clear()缓存操作
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~分割线~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flush():使数据库中的对象和session缓存中的对象的状态 ...
- 启动tomcat内存溢出
在运行项目的过程中,启动tomcat内存溢出.查阅了一些解决办法,总结出来留个笔记. 1.使用Myeclipse2014+tomcat 7 ,在MyEclipse中将项目部署到Tomcat下,启动to ...
- Shiro的基本使用
目录 前言 Shiro的介绍 Shiro功能 补充 HelloWorld 依赖包: 示例代码 代码解析 对于shiro.ini: 对于ShiroDemo.java: 补充 一些概念 Realm 认证 ...
- Django常用知识整理
Django 的认识,面试题 1. 对Django的认识? #1.Django是走大而全的方向,它最出名的是其全自动化的管理后台:只需要使用起ORM,做简单的对象定义,它就能自动生成数据库结构.以及全 ...
- 无聊系列 - C#中一些常用类型与java的类型对应关系
昨天在那个.NET转java群里,看到一位朋友在问C#的int 对应java的哪个对象,就心血来潮,打算写一下C#中一些基础性的东西,在java中怎么找. 1. 基础值类型 如:int,long,do ...
- c#DateTime与unix时间戳互相转换
public class UnixTimeUtil { /// <summary> /// 将dateTime格式转换为Unix时间戳 /// </summary> /// & ...
- pymysql的基本使用
序pymysql的语法sql注入问题数据的增删查改 TOC 序 当我们在写程序中需要使用到数据库的时候,尽量在代码层次实现一些限制,例如两张表,我们不再使用外键去关联表与表之间的关系,我们可以在程序层 ...
- hue框架介绍和安装部署
大家好,我是来自内蒙古的小哥,我现在在北京学习大数据,我想把学到的东西分享给大家,想和大家一起学习 hue框架介绍和安装部署 hue全称:HUE=Hadoop User Experience 他是cl ...
- lambda的用法
关于lambda的用法: lambda的用法和def的用法基本相同.区别在于def可以用来定义简单和复杂的函数,而lambda主要用来定义简单的函数.下面通过两个例子来了解下: lambda 参数1, ...