本章节介绍数据存储相关内容。Mysql、MongoDB、redis 等基础内容。
第三章 数据库简介与使用
第三章 MongoDB及Redis使用
windows
启动本地客户端:mongo 查看帮助:mongo –help 退出:exit或者ctrl+c
Mac
跳转到MongoDB安装目录: cd ~/Documents/mongodb 启动服务: mongod --dbpath data --logpath log/mongod.log --logappend 启动本地客户端:mongo 查看帮助:mongo –help 退出:exit或者ctrl+c
MongoDB是非关系型数据库,它有的是数据库、集合、文档,分别对应关系型里面的数据库、数据表、和表里面一行一行的数据。在MongoDB中,文档构成集合,集合构成数据库。
mongodb里面,文档指的是集合里面的一行数据,一个文档中可以含有多个键值对,可以存放不同的数据类型.
文档组成:
MongoDB中的集合就相当于MySQL中的数据表,集合由文档组成,可以使用show tables查看一个数据库中有哪些集合。
MongoDB中数据库和MySQL的不同之处在于其组成, show dbs 可以查看相关数据库。
注意:use 库名如果该库不存在,则会自动以该名字创建一个新的库,如果后面跟已有的数据库名,则切换到另一个需要操作的数据库。
查看当前的数据库:db 查看所有的数据库:show dbs /show databases 切换数据库:use db_name 删除当前的数据库:db.dropDatabase()
db.createCollection(name,options) db.createCollection("kkb") db.createCollection("kkb", { capped : true, size : 10 } )
db.text.insert({name: '张三',age: 18,sex:'男'})
保存 db.集合名称.save(document)
注意:如果文档的_id不存在为添加,如果_id存在则为修改。
查询
db.集合名称.find() 查询所有内容
db.集合名称.findOne() 查询所有内容,但是只返回第⼀个
db.集合名称.find().pretty() 查询所有内容,将结果格式化输出
更新
db.集合名称.update(<query> ,<update>,{multi:<boolean>}) db.info.insert( [{name: '张三',age: 19,sex: '男'}, {name: '张三',age: 18,sex: '男'}, {name: '张三',age: 17,sex: '男'}])
db.集合名称.remove(<query>,{justOne:<boolean>}) 删除一条 db.info.remove({name:'lisi'}, {justOne:1}) 删除全部 db.info.remove({name:'lisi'})
等于: 默认是等于判断, 没有运算符 ⼩于:$lt (less than) ⼩于等于:$lte (less than equal) ⼤于:$gt (greater than) ⼤于等于:$gte 不等于:$ne 查询info集合中年龄大于等于18的人 db.info.find({age:{$gte:18}})
使⽤"$in", "$nin" 判断是否在某个范围内 查询年龄是17和19岁的信息 db.info.find({age:{$in:[17,19]}})
and:直接写多个条件即可 or:使⽤$or,值为数组
使⽤//或$regex编写正则表达式 查询李姓信息 db.info.find({name:/^李/}) db.info.find({name:{$regex:'^李'}})
redis-cli 连接redis
ping 测试命令
select n 切换数据库
redis中数据库没有名称,默认有16个,通过0-15进行标识,在连接成功后默认选择第一个数据库。
keys pattem keys *k* 查看包含k的键 keys * 查看所有键
exists key
type key type k1 查看k1对应的值的类型
expire key seconds expire k2 5 设置k2过期时间为5秒
ttl key ttl k3 查看键k3的有效时间
字符串类型是Redis中最为基础的数据存储类型,它在Redis中是二进制,安全的,这便意味着该类型可以接受任何格式的数据,如JPEG图像数据或Json对象描述信息等。在Redis中字符串类型的Value最多可以容纳的数据长度是512M。
set key value set name kkb # 根据键名获取值
setex key seconds value set name 5 zhangsan #设置键为name值为zhangsan 过期时间为5秒的数据
mset key1 value1 key2 value2 # 设置键k1的值为kkb k2的值为python mset k1 kkb k2 python
append key value append key value # 在键k1的值后面追加 666
get key 获取 mget key1 key2 # 根据多个键获取多个值
del key1 key2
# 设置单个属性 hset key field value # 设置多个属性 hmset key field1 value1 field2 value2
获取指定键所有的属性 hkeys key 获取⼀个属性的值 hget key field 获取多个属性的值 hmget key field1 field2 获取所有属性的值 hvals key
删除属性 hdel key field1 field2 删除user2的age属性 hdel user2 age
按照插⼊顺序排序
在左侧插⼊数据 lpush key value1 value2 在右侧插⼊数据 rpush key value1 value2 在指定元素的前或后插⼊新元素 linsert key before/after 现有元素 新元素 从键为'k1'的列表左侧加⼊数据1 2 3 lpush k1 1 2 3 在p前面插入kk linsert k1 before p kk
lrange key start stop 获取k1列表所有元素 lrange k1 0 -1
lset key index value 修改k1列表中下标为3的元素为4 lset k1 3 4
lrem key count value # 删除k1右侧中2 lrem k1 -3 2
⽆序集合
元素为string类型
元素具有唯⼀性,不重复
说明:对于集合没有修改操作
sadd key member1 member2 向键'all_name'的集合中添加元素'zhangsan'、'lisi'、'wangwu' sadd all_name zhangsan lisi wangwu
smembers key 获取键all_name的集合中所有元素 smembers all_name
srem key 删除all_name中的lisi srem all_name lisi
有序集合,元素为string类型
元素具有唯⼀性,不重复
每个元素都会关联⼀个double类型的score,表示权重,通过权重将元素从小到大排序
说明:没有修改操作
zadd key score1 member1 score2 member2 向键'all_name1'的集合中添加元素'wangwu'、'zhangsan'、'zhaoliu'、'lisi', 权重分别为3、1、4、2 zadd all_name1 3 wangwu 1 zhangsan 4 zhaoliu 2 lisi
zrange key start stop 获取all_name1中所有的元素 zrange all_range 0 -1 返回score值在min和max之间的元素 zrangebyscore key min max 返回成员member的score值 zscore key member 获取键'all_name1'的集合中权限值在1和3之间的元素 zrangebyscore all_name1 1 3
删除指定元素 zrem key member1 member2 删除权重在指定范围的元素 zremrangebyscore key min max 删除集合'all_name1'中元素'lisi' zrem all_name1 lisi 删除权重在2-4之间的元素 zremrangebyscore all_name1 2 4