同步操作将从 布道师学习通/study-mongodb-redis 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
教材及素材获取 https://www.ossbar.com/#/productDetail?proData={"productId"%3A315,"skuId"%3A972,"shopId"%3A138}
MongoDB,Redis 是NO-SQL的杰出代表。是大数据,人工智能、分布式应用、高速缓存应用场景必备技能。 本教程结合实践案例,以任务为驱动,对Mongodb、Redis数据库技术进行知识梳理,让开发者快速掌握Mongodb和Redis数据库。
MongoDB并非芒果的意思,而是源于 Humongous(巨大)一词。中文叫盲狗db
MongoDB是面向文档的数据库,不是关系型数据库。它将原来**‘行’(row)的概念换成了更加灵活的‘文档’(document)模型**。面向文档的方式可以将文档和数组内嵌进来,所以用一条记录就可以表示很复杂的层次关系。 MongoDB没有模式,文档的键不会事先定义也不会固定不变。
Mongodb主要由文档(Document)、集合(Collection)、数据库(Database)三部分组成。
一个MongoDB实例,由多个数据库(Database)组成;一个数据库,由多个集合(Collection)组成;一个集合,又由多个文档组成。注意Mongodb单个文档大小上限为16MB,确保不会使用过多的内存RAM或在传输过程中占用过多的带宽。为了存储更大的文档,Mongodb提供了GridFS。
MongoDB 是一个文档数据库,即在类似 JSON 的文档内存储数据。我们认为面对数据,这种方法非常自然,比传统的排/列模型更加直观和强大。
● 自然、高效的数据处理方法。
● 支持将数组和嵌套对象存储为值。
● 支持灵活、动态结构。
● 查询语言丰富和直观,支持通过任何字段进行筛选和排序,而不受其在文档内的嵌套方式影响。
● 支持聚合和其他现代使用案例,如基于地理的搜索、图搜索和文本搜索。
● 查询本身是 JSON 格式,因此很容易进行组合。无需串联字符串即可动态生成 SQL 查询。
MongoDB的3大技术特色如下所示:
除了上图所示的还支持:
二级索引、动态查询、全文搜索 、聚合框架、MapReduce、GridFS、地理位置索引、内存引擎 、地理分布等一系列的强大功能。
但是其也有些许的缺点,例如:
● 多表关联: 仅仅支持Left Outer Join
● SQL 语句支持: 查询为主,部分支持
● 多表原子事务: 不支持
● 多文档原子事务:不支持
● 16MB 文档大小限制,不支持中文排序 ,服务端 Javascript 性能欠佳
MongoDB的应用已经渗透到各个领域,比如游戏、物流、电商、内容管理、社交、物联网、视频直播等,以下是几个实际的应用案例:
● 游戏场景:使用MongoDB存储游戏用户信息,用户的装备、积分等直接以内嵌文档的形式存储,方便查询、更新。
● 物流场景:使用MongoDB存储订单信息,订单状态在运送过程中会不断更新,以MongoDB内嵌数组的形式来存储,一次查询就能将订单所有的变更读取出来。
● 社交场景:使用MongoDB存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能。
● 物联网场景:使用MongoDB存储所有接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度的分析。
● 视频直播:使用MongoDB存储用户信息、礼物信息等。
备用下载链接:https://www.mongodb.com/try/download/community
下载可以选择 zip 格式或者 msi 格式,msi 格式就是下一步、下一步安装。我们讲解 zip格式。
进入解压后的文件夹,新建data和log文件夹,并在log文件夹下,新建mongod.log空文件
新建mongod.conf文件与bin文件夹同级
mongod.conf写入以下内容
注:dbpath和logpath根据自己的具体路径进行修改
开始---运行--cmd (ctrl+shift+Enter)调出windows终端,在mongodb解压目录的bin目录下执行如下命令:例如
mongod --config D:\mongodb-win32-x86_64-windows-5.0.11\mongod.conf--install --serviceName mongodb
执行后的结果可以在控制面板---管理工具--服务列表中查看到服务名为mongodb的进程。
注:在cmd操作下执行一定要以管理员身份运行,否则可能造成安装失败
正常情况下执行后窗口没有任何反应,其实是正常在生成data下默认的几个数据库文件,可以查看是否已经在data目录下生成初始化文件。
启动/停止mongodb: net start/stop mongodb
MongoDB客户端工具推荐:
https://www.mongodbmanager.com/download
Navicat Premium 是一套数据库开发工具,让你从单一应用程序中同时连接 MySQL、MariaDB、MongoDB、SQL Server、Oracle、PostgreSQL 和 SQLite 数据库。它与 Amazon RDS、Amazon Aurora、Amazon Redshift、Microsoft Azure、Oracle Cloud、MongoDB Atlas、阿里云、腾讯云和华为云等云数据库兼容。你可以快速轻松地创建、管理和维护数据库。
默认情况下Navicat 不显示mongodb默认三个数据库,需要显示隐藏的项目
https://robomongo.org/download
首先我们要先了解一下MongoDB中有什么样的数据类型:
Object ID :Documents 自生成的 _id
这是MongoDB生成的类似关系型DB表主键的唯一key,具体由24个字节组成:
0-8字节是时间戳,
9-14字节的机器标识符,表示MongoDB实例所在机器的不同;
15-18字节的进程id,表示相同机器的不同MongoDB进程。
19-24字节是计数器
注意如果插入文档时指定_id的值则MongoDB就不会赋值Object ID,但要注意_id的唯一性
获取_id可以执行ObjectId();
例如:
"_id" : ObjectId("5b151f8536409809ab2e6b26")
#"5b151f85" 代指的是时间戳time,这条数据的产生时间 #"364098" 代指某台机器的机器码machine,存储这条数据时的机器编号 #"09ab" 代指进程ID,PID多进程存储数据的时候,非常有用的 #"2e6b26" 代指计数器INC,这里要注意的是,计数器的数字可能会出现重复,不是唯一的 #以上四种标识符拼凑成世界上唯一的ObjectID #只要是支持MongoDB的语言,都会有一个或多个方法,对ObjectID进行转换 #可以得到以上四种信息
#注意:这个类型是不可以被JSON序列化的
● String: 字符串,必须是utf-8
● Boolean:布尔值
true 或者false 这里首字母是小写的
● Integer:整数
Int32 Int64 你们就知道有个Int就行了,一般我们用Int32
● Double:浮点数
没有float类型,所有小数都是Double
● Arrays:数组或者列表
多个值存储到一个键:这个数据类型就是字典
● Null:空数据类型 , 一个特殊的概念,None Null
● Timestamp:时间戳
● Date:存储当前日期或时间unix时间格式
我们一般不用这个Date类型,时间戳可以秒杀一切时间类型
1、int转换为string类型
String();
db.collectionName.find().forEach(function(x) {
x.FieldName = x.FieldName.toString();
db.collectionName.save(x);
});
db.emp.find({sal:{$lt:String(2000)}});
2、string转换为Date类型
ISODate()、
db.collectionName.find().forEach(function(x) {
x.FieldName = new ISODate(x.FieldName );
db.collectionName.save(x);
});
3、string转换为int类型
常用有:Number(),NumberInt,NumberLong,NumberDEcimal
//string转为int类型
db.collections.find().forEach( function (x) {
x.ise= NumberInt (x.ise);
db.collections.save(x);
});
4、Mongodb库中已存在的数据的类型转换
db.emp.updateMany({
sal: {
$exists: true
}},
[{$addFields:{
sal: {
$toDouble: "$sal"
}}}]
);
MongoDB中默认的数据库为 test,如果没有创建新的数据库,集合将存放在 test 数据库中。
使用show dbs来查看数据库
show dbs 或 show databases;
使用use命令来切换/创建数据库,会发现创建的数据库并不在数据库的列表中, 要显示它,需要向数据库插入一些数据
use db_name
使用db命令来显示/查看当前数据库,效果等同于 db.getName()
db
这将删除当前所选数据库。 如果没有选择任何数据库,那么它将删除默认的’test‘数据库
db.dropDatabase()
db.createCollection(name, options)
参数说明:
name: 要创建的集合名称 options: 可选参数, 指定有关内存大小及索引的选项 1 首先进入数据库 use 数据库名称 2 创建集合 db.creareCollection('集合名称')
创建集合有一些可选参数
size、capped都是在固定集合上使用的,我们一般将固定集合使用在日志上面,之前的日志文件难以维护,还要定期去处理。 有了固定集合当日志达到最大的时候他会覆盖最早的日志,这样减少了日志维护的资源; db.createCollection("role",{capped:true,autoIndexId:true,size:6100000}); db.createCollection("student",{capped:true,autoIndexId:true,size:6100000}); db.createCollection("user");
这样就创建一个固定大小的集合,默认_id创建一个索引,在MongoDB里面每一行数据的_id都是唯一的。
max是该集合最大的文档数,也就是可以插入数据的上限;
db.user.drop() 删除user集合
db.getCollectionNames():获取当前 db 的所有集合,以数组形式显示
show collections:获取当前 db 的所有集合,以列表(换行)形式显示
show collections
db.role.renameCollection('user')
### 文档操作 MongoDB的数据定义格式和JSON的数据定义格式是一样的,但是在MongoDB中我们把他称之为BSON(Binary JSON)是一种类json的一种二进制形式的存储格式。他的数据格式是非常丰富的,比如我们在MySQL中要联系两站表的关系我们会创建一个表,里面存放他们的关系。但是在MongoDB里面我们可以放在同一个文档里面,我们定义一个数组类型的属性,这个数组就可以存放他们之间的关系,只需要两个而不是三个。
要将数据插入到 MongoDB 集合中,需要使用 MongoDB 的 insert()或save()方法,还有insertOne()或insertMany()方法
insert()命令的基本语法如下
db.COLLECTION_NAME.insert(document)
save():如果 _id 主键存在则更新数据,如果不存在就插入数据。该方法新版本中已废弃,可以使用db.collection.insertOne()或db.collection.replaceOne()来代替。
insert(): 若插入的数据主键已经存在,则会抛org.springframework.dao.DuplicateKeyException异常,提示主键重复,不保存当前数据。
在插入的文档中,如果不指定_id参数,那么 MongoDB 会为此文档分配一个唯一的ObjectId。_id为集合中的每个文档唯一的12个字节的十六进制数
_id,又称为ObjectId是一个12字节的BSON类型字符串。按照字节顺序依次代表:
db.course.insert({
"name" : "数学",
"type" : "major"
})
向课程表里插入一条数据
一次性插入多条数据db.collection.insertMany()
/*
插入多条记录
*/
db.student.insert([
{
"stu_name" : "小明",
"stu_number" : "2013001",
"stu_sex" : "男",
"course" : [
ObjectId("5bb82bb3627eb5e25bead053"),
ObjectId("5bb82c5f627eb5e25bead054"),
ObjectId("5bb82c5f627eb5e25bead055"),
ObjectId("5bb82c5f627eb5e25bead057"),
ObjectId("5bb82c5f627eb5e25bead058")
],
},
{
"stu_name" : "小红",
"stu_number" : "2013002",
"stu_sex" : "女",
"course" : [
ObjectId("5bb82bb3627eb5e25bead053"),
ObjectId("5bb82c5f627eb5e25bead054"),
ObjectId("5bb82c5f627eb5e25bead055"),
ObjectId("5bb82c5f627eb5e25bead056"),
ObjectId("5bb82c5f627eb5e25bead058")
],
}
])
就像JSON一样。一次封装多个数据我们就用数组包裹起来就可以了,我们直接在学生表里面关联课程的信息,course就是我们学生所选的课程。
同样我们也可以定义一个变量
document1=( {
"stu_name" : "小明",
"stu_number" : "2013001",
"stu_sex" : "男",
"course" : [
ObjectId("5bb82bb3627eb5e25bead053"),
ObjectId("5bb82c5f627eb5e25bead054"),
ObjectId("5bb82c5f627eb5e25bead055"),
ObjectId("5bb82c5f627eb5e25bead057"),
ObjectId("5bb82c5f627eb5e25bead058")
],
},
{
"stu_name" : "小红",
"stu_number" : "2013002",
"stu_sex" : "女",
"course" : [
ObjectId("5bb82bb3627eb5e25bead053"),
ObjectId("5bb82c5f627eb5e25bead054"),
ObjectId("5bb82c5f627eb5e25bead055"),
ObjectId("5bb82c5f627eb5e25bead056"),
ObjectId("5bb82c5f627eb5e25bead058")
]
});
再执行db.student.insert(document1);
还有一种插入的方法:
db.student.save(
{
"stu_name" : "小峰",
"stu_number" : "2013009",
"stu_sex" : "男",
"course" : [
ObjectId("5bb82bb3627eb5e25bead053"),
ObjectId("5bb82c5f627eb5e25bead054"),
ObjectId("5bb82c5f627eb5e25bead055"),
ObjectId("5bb82c5f627eb5e25bead057"),
ObjectId("5bb82c5f627eb5e25bead058")
],
}
)
save也可以插入数据,save操作和insert操作的区别在于,save在遇到_id相同的插入数据时候,会覆盖原来的,而insert会提示错误。
shell的for循环批量插入文档:一次插入多条数据
1、先创建数组
2、将数据放在数组中
3、一次 insert 到集合中
/*
插入单个文档练习
*/
db.user.insert(
{
"name":"liwei",
"tel":18843436650
}
);
db.user.insert(
{
"name":"liwei",
"tel":18843436650,
"yz":"100"
}
);
/*
插入多个文档练习
*/
db.user.insertMany(
[
{
"name":"longdage",
"sex":1,
"jushu":"good"
},
{
"name":"gaoluofeng",
"zhiwu":"1ge",
"jushu":"yiliu"
}
]
);
/*
批量插入多个文档练习
*/
var arr = [];
for(var i=1 ; i<=20000 ; i++){
arr.push({name:"小峰"+i});
}
db.user.insert(arr);
db.student.update({ 查询的条件, 更新的语句, 附加的参数 })
附加的参数
构造更新操作前的准备工作,插入测试数据
db.student.insertMany([
{
"stu_name" : "小张",
"stu_number" : "2013003",
"age":18
},
{
"stu_name" : "小张",
"stu_number" : "2013002",
"age":28
},
{
"stu_name" : "小张三",
"stu_number" : "2013004",
"age":38
}]
);
区分:update默认情况下是只修改一个文档,等同updateOne,如果需要修改多个可以使用multi:true属性
db.collection.update(query, update);
db.student.update(
{
"stu_name" : "小张"
},
{
$set : {"stu_name" : "小张二"}
}
)
db.collection.updateOne(query, update);
db.student.update(
{
"stu_name" : "小张"
},
{
$set : {"stu_name" : "小张一"}
}
)
修改多个文档
db.student.update(
{
"stu_name": "小张"
},
{
$set: {
"stu_name": "小张二"
}
},
{
multi: true
}
)
db.collection.updateMany(query, update);
$set:用来指定一个键的值
$unset :删除指定一个属性
$inc : 增加和减少(increase)
$push:向数组尾部追加元素
$addToSet:添加时避免重复,例如:
db.user.update({"_id": ObjectId("....")}, {$addToSet: {"emails": "sky3hao@163.com"}})
$addToSet和$each组合起来,可以添加多个不同的值.
$pop:从数组某一端删除元素
$pull:基于条件来删除数组元素
test.update({'name':'foobar'},{$set:{'age':36}}) <==> update test set age=36 where name='foobar'
db.test.update({'name':'foobar'},{$inc:{'age':3}}) <==> update test set age=age+3 where name='foobar'
and条件,挨着写默认就是and
db.student.update(
{
"stu_name" : "小张",
"stu_number" : "2013003",
},
{
$set : {"stu_name" : "小张二"}
}
)
or条件,要出现$or的关键字
db.student.update(
{
$or : [
{"stu_name" : "小张二"},
{"stu_number" : "2013003"}
],
},
{
$set : {"stu_name" : "小张"}
}
)
$inc
db.student.update(
{
"stu_number" : "2013001"
},
{
$inc : {"mark" : 1}//自增1,为负数的时候就是减
}
);
大于一个数据或小于一个数
db.student.update(
{
"stu_number" : {$gte:"2013001",$lte:"2013002"}
},
{
$inc : {"mark" : 1}//自增1,为负数的时候就是减
}
);
布尔运算符
1 $ne : 不等于 2 $not : 不匹配结果 3 $nor : 所有的条件都不匹配 4 $exists : 判断元素是否存在
$exists
db.student.find( { "stu_number" : {$exists:true} } );
返回这个字段存在的所有记录,当为false的时候结果就是相反;
db.student.remove({ 条件 },属性)
db.student.remove(
{
"_id":ObjectId("5bb83384627eb5e25bead061")
}
)
另外删除单个和多个文档:
/* 删除单个文档 */
db.student.deleteOne();
/* 删除多个文档 */
db.student.deleteMany();
/* 可以删除单个也可以多个如果设置true表示删除一个,否则多个*/
db.student.remove();
/* 删除集合中所有文档:清空 */
db.student.remove({});
/* 或使用性能最高的 */
db.student.drop();
掌握选择器(selector)
MongoDB的查询选择器就像SQL代码中的where语句。因此您可以用它在集合中查找,统计,更新或是删除文档。选择器就是一个JSON对象,最简单的形式就是{},用来匹配所有的文档(null也可以)。如果我们需要找到所有雌性的独角兽(unicorn),我们可以用选择器{gender:'f'}来匹配。
要从MongoDB集合查询数据,需要使用MongoDB的find()方法,默认返回结果中的前20条文档,输入"it"显示接下来的20条文档。
find()命令的基本语法如下:
db.COLLECTION_NAME.find(document)
find()方法将以非结构化的方式显示所有文档
数据准备
db.student.insertMany([
{
"stu_name": "小李子",
"stu_number": "2013003",
"age": 19.5,
"sex": "男"
},
{
"stu_name": "小李子",
"stu_number": "2013002",
"age": 9.5,
"sex": "男"
},
{
"stu_name": "小李子",
"stu_number": "2013004",
"age": 4.5,
"sex": "男"
},
{
"stu_name": "小张",
"stu_number": "2013003",
"age": 18,
"sex": "女"
},
{
"stu_name": "小张",
"stu_number": "2013002",
"age": 28,
"sex": "女"
},
{
"stu_name": "小张三",
"stu_number": "2013004",
"age": 38,
"sex": "女"
},
{
"stu_name": "小李",
"stu_number": "2012001",
"age": 19.5,
"sex": "男"
},
{
"stu_name": "小李",
"stu_number": "2012002",
"age": 29.5,
"sex": "女"
},
{
"stu_name": "小李",
"stu_number": "2012003",
"age": 39.5,
"sex": "女"
}
]);
比较运算符
查询的条件有:
等于equal;不等于not equal,小于less than,小于或等于equal or less than,大于greater than,大于或等于equal or greater than。
$not
db.student.find(
{
'stu_number' : {$not : {$ne : "2013002"}}
}
).pretty()
这种情况下也会返回没有stu_number的字段,和$gt这些比较运算符是不同的,他们只会返回有的字段 范围运算符
$in,不在集合里面我们就用$nin
db.student.find(
{
'stu_number' : { $in : ["2013001","2013002"]}
}
).pretty()
和Mysql的where in是一样的效果,他会查出2013001和002的数据
模糊查询:正则表达式
在mongoDB里面我们的模糊查询是按照正则表达式来进行匹配的
db.student.find(
{
"stu_number":{$regex:/^2013/}
}
)
我们要查询一个数组里面一个字段的值,我们用点进行连接
{
"userInfo" : {
"name" : "张三",
"age" : 28
}
}
我们要查询name等于张三的信息
db.student.find({"userInfo.name":"张三"})
JavaScript查询
db.student.find(
{
"$where" : "function () {return this.stu_number == '2013001'}"
}
)
排序
1:升序
-1:降序
语法:
db.stu.find().sort({字段:1})
举例:
db.student.find().sort({"stu_number":-1}).pretty()
/* #多属性排序sort升序值1,降序为-1
db.student.aggregate([{$sort:{age:-1}},{$sort:{stu_name:-1}}]);
db.student.find().sort({age:-1},{stu_name:-1}).pretty();
*/
/显示10条数据/
db.student.find().sort({age:-1},{stu_name:-1}).limit(10).pretty();
db.student.find().sort({age:-1},{stu_name:-1}).limit(10).skip(2).pretty();
限制
db.student.find().sort({"stu_number":-1}).limit(5).pretty()
限制显示5条数据 跳过
db.student.find().sort({"stu_number":-1}).limit(5).skip(2).pretty()
#跳过前两个并且显示5条数据
我们所看到的限制、跳过和Mysql的limit一样,限制就是第一个参数,跳过就是第二个参数偏移量。
查询返回特定的字段
db.student.find({},{'stu_number':0,}).sort({"stu_number":-1}).limit(5).skip(2).pretty()
当我们stu_number为0的时候,返回除了stu_number以外的数据,如果为1只返回stu_number一个字段的数据。
统计个数 db.stu.find(条件).count() db.stu.count({条件}) 消除重复 db.stu.distinct(去重字段, {条件}) 聚合 aggregate
表达式
$sum $avg $min $max $push: 数组 $first $last $$ROOT: 将文档内容加入到结果集的数组中 /聚合管道操作/ /性别分组并统计男女数/
db.student.aggregate({
$group: {
_id:"$sex",
num:{$sum:1}
}
});
/求文档数/
db.student.find().count();
/求属性值 最大/
db.student.aggregate({
$group: {
_id:"$id",
max_value:{$max:"$age"}
}
});
/求属性值 最小/
db.student.aggregate({
$group: {
_id:"$id",
min_value:{$min:"$age"}
}
});
/*求属性值 平均值 */
db.student.aggregate({
$group: {
_id:"$id",
avg_value:{$avg:"$age"}
}
});
https://www.ossbar.com/#/productDetail?proData={"productId"%3A315,"skuId"%3A972,"shopId"%3A138}
是完全开源并免费的,遵守BSD协议,是一个高性能的key-value数据库中
Redis 与其他key-value 缓存产品有以下三个特点
Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
Redis支持数据的备份,即master-slave模式的数据备份
解压直接可以使用:
redis.windows.conf:配置文件
redis-cli.exe:redis的客户端
redis-server.exe:redis服务器端
1、下载和解压Redis-x64-3.2.100
Github下载地址:https://github.com/MicrosoftArchive/redis/releases
2、打开cmd指令窗口,输入你刚才解压的文件路径,然后输入以下命令
redis-server redis.windows.conf
3、安装Windows服务
redis-server --service-install redis.windows.conf
4、启动redis服务
#Redis常用的指令
#卸载服务:
redis-server --service-uninstall
#开启服务:
redis-server --service-start
或net start redis
#停止服务:
redis-server --service-stop
或net stop redis
1、Redis Desktop Manager
是一款跨平台开源 Redis ® 管理工具,RDM 是易于使用的 GUI 工具,可用于 Windows,Linux,MacOS,支持命令控制台操作,以及常用,查询key,rename,delete等操作。
下载地址:http://down.123520.net/dir/195471-41859118-4ed9f5
2、AnotherRedisDesktopManager
下载地址:https://github.com/qishibo/AnotherRedisDesktopManager
或国内:https://gitee.com/qishibo/AnotherRedisDesktopManager/releases/v1.5.0
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
127.0.0.1:6379> set name zhangsan
OK
127.0.0.1:6379> set age 25
OK
get key
127.0.0.1:6379> get name "zhangsan"
del 删除key del key
127.0.0.1:6379> del name (integer) 1
exists 判断key是否存在 存在返回1,不存在返回0
127.0.0.1:6379> exists name (integer) 1
127.0.0.1:6379> exists title
(integer) 0
type key
127.0.0.1:6379> type name string
127.0.0.1:6379> type age string
expire 设置key有效期 expire key
expire key 表示以秒为单位设置声明周期
127.0.0.1:6379[1]> expire login 60
(integer) 1
127.0.0.1:6379[1]> ttl login
(integer) 47
tll 查看key有效期 ttl key
大于0 :生命周期单位为秒, # 等于-1:永久有效 # 等于-2:该key不存在 # pttl key表示秒为单位
127.0.0.1:6379> ttl name
(integer) -1
127.0.0.1:6379> ttl title
(integer) -2
rename 重命名key rename key newkey
127.0.0.1:6379> set title "redis test"
OK
127.0.0.1:6379> exists title
(integer) 1
127.0.0.1:6379> rename title biaoti
OK
127.0.0.1:6379> get biaoti
"redis test"
renamenx 重命名不存在的key renamenx key newkey
127.0.0.1:6379> keys *
1) "biaoti"
2) "age"
3) "name"
127.0.0.1:6379> renamenx biaoti name
(integer) 0
persist 设置key永久有效 persist key
127.0.0.1:6379> set login on
OK 127.0.0.1:6379> expire login 60
(integer) 1
127.0.0.1:6379> ttl login
(integer) 55
127.0.0.1:6379> persist login
(integer) 1
127.0.0.1:6379> ttl login
(integer) -1
move 把key移动到其他库 move key db
库操作命令 dbsize 查看当前有多少个key dbsize
127.0.0.1:6379> dbsize 12
select 选择库
select db
db为整数 # 默认有16个数据库0~15,如果想修改数据库数量,修改redis.conf配置文件的databases值
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[2]> select 15
OK
flushdb 删除选中数据库中的key flushdb
127.0.0.1:6379[1]> keys *
1) "biaoti"
127.0.0.1:6379[1]> flushdb
OK
127.0.0.1:6379[1]> keys *
(empty list or set)
flushall 删除所有库的key flushall
127.0.0.1:6379[1]> flushall
OK 127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> keys *
(empty list or set)
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。