作业一:string list hash结构中,每个至少完成5个命令,包含插入 修改 删除 查询,list 和hash还需要增加遍历的操作命令
1、 string类型数据的命令操作:
(1) 设置键值:
set key values
(2) 读取键值:
get key
(3) 数值类型自增1:
INCR key
(4) 数值类型自减1:
DECR key
(5) 查看值的长度:
STRLEN key
2、 list类型数据的命令操作:
(1)对列表city插入元素:Shanghai Suzhou Hangzhou
LPUSH city Shanghai Suzhou Hangzhou
(2)将列表city里的头部的元素移除
LPOP city
(3)将name列表的尾部元素移除到number列表的头部
RPOPLPUSH
name
number
(4) 对一个已存在的列表插入新元素
RPUSH key value1
[value2]
(5)查看list的值长度
LLEN list
3、 hash类型数据的命令操作:
(1) 设置一个hash表,order表里包括的键值信息有:id:1,customer_name:张三
HSET order id 1 customer_name:'张三'
(2) 创建一个hash表,表里的键值批量插入
HMSET key field1 value1 [field2 value2]
(3) 获取order对应的map的所有key
HGETALL map
(4) 获取order对应的map的键值数量
HLEN map
(5) 获取order表里的id值
HMGET order id
4、Keys相关的命令操作
(1) 查看key是否存在
EXISTS key
(2) 查找满足pattern的keys
KEYS pattern
(3) 查看key的超时时间
PTTL key
(4) 遍历key
SCAN cursor [MATCH pattern] [COUNT count]
作业二:举例说明list和hash的应用场景,每个至少一个场景
List应用场景
栈:LPUSH +LPOP -->FILO
先进后出原则:LPUSH从队列左边进入d,c,b,a, LPOP从队列左边出来a,b,c,d
队列: LPUSH+RPOP
先进先出原则:LPUSH从队列左边进入d,c,b,a, RPOP从队列右边出d,c,b,a
阻塞队列: LPUSH+BRPOP
LPUSH+BRPOP是在LPUSH+RPOP的基础上多了阻塞和等待的功能,
BRPOP实际上就是等于Blocking+RPOP,当队列中的数据为空时,
会一直监听消息队列,直到获得消息Hash应用场景
1. 对象缓存hash类型的(key, field, value)的结构与对象的(对象id, 属性, 值)的结构相 似,也可以用来存储对象。
在介绍string类型的应用场景时有所介绍,string + json也是存储对象的一种方式,那么存储对象时,
到底用string +json还是用hash呢?两种存储方式的对比如下表所示。当对象的某个属性需要频繁修改时,不适合用string+json,因为它不够灵活,
每次修改都需要重新将整个对象序列化并赋值,如果使用hash类型,则可以针对某个属性单独修改,没有序列化,
也不需要修改整个对象。比如,商品的价格、销量、关注数、评价数等可能经常发生变化的属性,
就适合存储在hash类型里。
mongodb作业
1. 创建一个数据库 名字grade
use grade
2. 数据库中创建一个集合名字 class
db.createCollection('class')
3. 集合中插入若干数据 文档格式如下
{name:'zhang',age;10,sex:'m',hobby:['a','b','c']}
hobby: draw sing dance basketball football pingpong computer
db.class.insert({name:'zhang',age;10,sex:'m',hobby:['a','b','c']})
4. 查找
查看班级所有人信息
db.class.find()
查看班级中年龄为8岁的学生信息
db.class.find({age:8})
查看年龄大于10岁的学生信息
db.class.find({age:{$gt:10}})
查看年龄在 4---8岁之间的学生信息
db.class.find({age: {$gte:4,$lte:8}})
找到年龄为6岁且为男生的学生
db.class.find({age: {$eq:6},sex:'男'})
找到年龄小于7岁或者大于10岁的学生
db.class.find({$or:[{age:{$gt:7}},{age:{$lt:10}}]}
找到年龄是8岁或者11岁的学生
db.class.find({age:{$in[8,11]}}
找到兴趣爱好有两项的学生
找到兴趣爱好有draw的学生
db.student.find({hobdy:{$in:['draw']}})
找到既喜欢画画又喜欢跳舞的学生
db.student.find({hobdy:{$all:['dance','dance']}})
统计爱好有三项的学生人数
找出本班年龄第二大的学生
db.student.find().sort({age: -1}).skip(1).limit(1)
查看学生的兴趣范围
将学生按年龄排序找到年龄最大的三个
删除所有 年级大于12或者小于4岁的学生
5. 增加、更新、删除、统计
1. 将小红的年龄变为8岁 兴趣爱好变为 跳舞 画画
2. 追加小明兴趣爱好 唱歌
3. 小王兴趣爱好增加 吹牛 打篮球
4. 小李增加爱好,跑步和唱歌,但是不要和以前的重复
5. 该班所有同学年龄加1
6. 删除小明的sex属性
7. 删除小李兴趣中的第一项
8. 将小红兴趣中的画画爱好删除