一、NOSQL 的四大分类
- 键值(Key-Value) 存储
- 列存储(HBase)
- 文档数据库(MangoDB)
- 图形数据库
二、特点
- 易扩展
- 灵活的数据模型
- 大数据量
- 高性能
- 高可用
三、Redis
redis 由 c 语言开发的一个高可用的非关系型数据库
3.1 数据类型
高性能键值对数据库,支持的键值数据类型
- 字符串类型
- 列表类型
- 有序集合类型
- 散列类型
- 集合类型
3.2 应用场景
- 缓存
- 任务队列
- 网站访问统计
- 数据过期处理
- 应用排行榜
- 分布式集群架构中的 session 分离
四、操作 Redis
4.1 String 类型
- 赋值: set ‘key’ ‘value’
- 取值:get ‘key’
- 获取值,再设置值:getset ‘key’ ‘value’
- 删除:del ‘key’ 返回一个 Integer,如果继续删除,会返回 null
- 值递增1:incr number (值不存在,就会线设置为0,再+1,如果存在,并且是数字字符串,就会转型,否则报出异常)
- 值递减1:decr num (值不存在,默认赋值1,然后-1)
- 递增指定值:incrby num 5 (值不存在,默认赋值为0,再加5)
- 递减指定值:decrby num 5 (值不存在,默认赋值为0,再减5)
- 字符串拼接(追加):append num 5 (返回值为字符串长度)
4.2 Hash
适合存储对象类型数据
1.存值(一次存一个): hset myhash username jack
- 存值(一次存多个):hmset myhash2 username rose age 21
- 取值:hget myhash username
- 取值多个:hmget myhash2 username age
- 取所有值:hgetall myhash
- 删除:hdel myhash2 username age
- 删除整个:del myhash2
- 递增:hincrby myhash age 5
- 判断 key 中的某个属性是否存在: hexists myhash username
- 获取所有的属性个数:hlen myhash
- 获取所有的 key:hkeys myhash
- 获取所有的 val:hvals myhash
4.3 list
- ArrayList 使用数组方式
- LinkedList 双向链表方式
- 双向链表添加 和 删除数据
两端添加:
- lpush mylist a b c (c->b->a) 返回长度
- rpush mylist a b c (a->b->c)
查看列表
- lrange mylist 0 5 (可以是负数索引) 0 -1 (第一个到最后一个) 0 -2 (第一个到倒数第二个)
两端弹出
- lpop mylist
- rpop mylist
获取列表元素的个数
- llen mylist
扩展命令
- lpushx mylist x (x存在不会插入)