redis中与key相关的命令
1、简单描述
redis本质上是一个key-value db,value可以有多种类型(string、hash、set、sorted set、list等),本章节不讲这些类型的命令,这里是讲跟key相关的命令操作。
key本身是string类型,不支持边界符,比如my key 这种含有空格的名字是会报错的,mykey\n这样包含换行符的也不行,包含\r\n的会被特殊处理,暂不细说。
由于redis的数据是在内存中的,所以如果key的名字过长,会占用更多字节,另外就是查找的时候,会比长度短的key慢。但是key名称长度也不能过小,否则可读性差。
2、相关命令(下面所有截图是在redis 4.0.1上测试的结果,4.0.1是2017年7月发布的稳定版本)
1)exists命令 : 判断key是否存在,同时可以支持多个key的判断,返回存在的key的数量。
2)keys命令:支持模式匹配
3)type命令:查看key的类型
【注意】type命令只能查看一个key的类型,不支持多个key同时查询。
4)rename命令:重命名一个key为新的名称。如果新key本来是存在的,则会覆盖,如果旧key不存在,会报错。
如果修改的新key存在,会覆盖,而且新key的类型会跟着改变,比如myHash本来是hash类型,现在把myString改名字为myHash:
myHash本来是hash类型,把string类型的myString的名字改为myHash,会把原来存在的myHash这个key给覆盖掉了。
5)randomkey命令:随机返回一个key,如果为空,则返回nil,表示空串。
6)del命令:删除key,支持删除多个key,命令执行结果看上图。
7)renamenx命令:重命名一个旧key为一个新key,如果新key存在,则报错:
8)dbsize命令:查看key的数量
【注意】dbsize是统计的某个索引db下的key的数量。比如索引为0的有2个,索引为1的key有10个,那么在索引为0的当前环境下,dbsize会返回2,而不是返回12(即2+10)。
9)expire命令:设置过期时间。
10)ttl命令:获取过期的时间。
【注意】过期时间是可以被重置的,比如重新给key赋值。
【注意】expire设置如果给一个不存在的key过期时间,会返回错误信息。
【注意】对一个不存在的key执行ttl命令,会返回错误信息。
【注意】对一个设置了过期时间的key再次执行expire,会重置过期时间:
【注意】rename操作会使得新的key继承旧的key的过期时间,哪怕是新key和旧key有各自的过期时间和不同类型,只要新key是被旧key覆盖,那么新key的过期时间就是继承了旧ky的过期时间:
rename改名字,新key是存在的,所以rename后是被覆盖了,过期时间继承过来了:
11)select命令,选择一个一个db索引。默认是有16个db,默认是用的索引是0:
12)move命令:把key转移到某个索引号对应的db下
【注意】如果要转移的key不存在,或者已经存在于目标索引的db中,会返回0,表示转移失败:
12)flushdb命令:删除当前索引db的所有数据,其他索引db下的数据不受影响。
13)flushall命令:删除所有数据,所有索引db的数据全部删除。
多个索引db都有数据,一条flushall把所有的key都删了,这些命令的操作要慎重!!!
3、小结
1)expire命令设置过期时间,ttl获取过期时间;
2)rename允许新的名字是已存在的key名字,这样会覆盖,同时把旧key的过期时间延续过去。
3)flushdb和flushall命令会删除数据,慎用;
4)keys 命令会列出一大堆的key,如果key过多,会影响性能,慎用!
redis中与key相关的命令的更多相关文章
- Redis中的数据结构与常用命令
开发系统:Ubuntu 17.04Redis驱动:StackExchange.Redis 1.2.3Redis版本:3.2.1开发平台:.NET Core 对于Redis的介绍这里只写一句:Redis ...
- Redis中的原子操作(2)-redis中使用Lua脚本保证命令原子性
Redis 如何应对并发访问 使用 Lua 脚本 Redis 中如何使用 Lua 脚本 EVAL EVALSHA SCRIPT 命令 SCRIPT LOAD SCRIPT EXISTS SCRIPT ...
- 如何解决Redis中的key过期问题
最近我们在Redis集群中发现了一个有趣的问题.在花费大量时间进行调试和测试后,通过更改key过期,我们可以将某些集群中的Redis内存使用量减少25%. Twitter内部运行着多个缓存服务.其中一 ...
- 单点登录filter根据redis中的key判断是否退出
package com.ailk.biapp.ci.localization.cntv.filter; import java.io.IOException; import java.util.Has ...
- Redis 键(key)相关的命令及其它命令的查看地址
Redis 键(key) Redis 键命令用于管理 redis 的键. 语法 Redis 键命令的基本语法如下: redis 127.0.0.1:6379> COMMAND KEY_NAME ...
- 转载文章(Redis中对key的操作)
转载地址:http://www.cnblogs.com/stephen-liu74/archive/2012/03/26/2356951.html 一.概述: 在该系列的前几篇博客中,主要讲述的是与R ...
- redis中的key设置过期时间
EXPIRE key seconds 为给定 key 设置生存时间,当 key 过期时(生存时间为 0 ),它会被自动删除. 在 Redis 中,带有生存时间的 key 被称为『易失的 ...
- 超大批量删除redis中无用key+配置
目前线上一个单实例redis中无用的key太多,决定删除一部分. 1.删除指定用户的key,使用redis的pipeline 根据一定条件把需要删除的用户统计出来,放到一个表里面,表为 del_use ...
- 代码实测:给redis中的key取一个正确的名字多么重要
redis对写入的key长度有限制吗? 太长的key对性能有影响吗? key越长对性能影响越大? 如何评估键长度对性能的影响? talk is cheap, show me the code! 今天我 ...
随机推荐
- 基于MVC设计模式的Web应用框架:struts2的简单搭建(一)
Struts2的初步介绍 Struts2是apache项目下的一个web 框架,普遍应用于阿里巴巴.京东等互联网.政府.企业门户网站.虽然之前存在了很大的安全漏洞,在2013年让苹果.中国移动.中国联 ...
- Git详解及 github与gitlab使用
1.1 关于版本控制 1.1.1 本地版本控制 本地版本控制系统 许多人习惯用复制整个项目目录的方式来保存不同的版本,或许还会改名加上备份时间以示区别.这么做唯一的 好处就是简单,但是特别容易犯错.有 ...
- Entity Framework——建模建库
1数据库初始化策略选择 三种初始化策略: 1)CreateDatabaseIfNotExists:默认的策略.如果数据库不存在,那么就创建数据库.但是如果数据库已存在,而且实体发生了变化,就会出现异常 ...
- 基于 HTML5 Canvas 的简易 2D 3D 编辑器
不管在任何领域,只要能让非程序员能通过拖拽来实现 2D 和 3D 的设计图就是很牛的,今天我们不需要 3dMaxs 等设计软件,直接用 HT 就能自己写出一个 2D 3D 编辑器,实现这个功能我觉得成 ...
- Java第二季
1.封装 (1)概念 将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问. (2)封装的实现步骤 2.Java中的访问修饰符 3.继承 (1)Ja ...
- 【深度学习系列】用PaddlePaddle和Tensorflow实现AlexNet
上周我们用PaddlePaddle和Tensorflow实现了图像分类,分别用自己手写的一个简单的CNN网络simple_cnn和LeNet-5的CNN网络识别cifar-10数据集.在上周的实验表现 ...
- Android开发之漫漫长途 番外篇——自定义View的各种姿势2
该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>以及<深入理解And ...
- uva11636-Hello World!
题意:已知有一行printf(“Hello World!”\n);以后就可以复制,问多少次之后就可以达到所需要的行数. 题解:模拟: #include<iostream> #include ...
- 矩阵取数游戏洛谷p1005
题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下: 1.每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素: 2. ...
- Promise原理与实现探究的一种思路
写在前面 这个文章,展现的是一个实现Promise的思路,以及如何发现和处理问题的情境. 从现有的Promise分析 如果我们想要自己实现一个简单的Promise,那现有规范规定的Promise肯定是 ...