一、nosql介绍(not only sql)
- 泛指非关系型的数据库
- 不支持SQL语法
- 存储结构跟传统关系型数据库中的那种关系表完全不同,nosql中存储的数据都是KV形式
- NoSQL的世界中没有一种通用的语言,每种nosql数据库都有自己的api和语法,以及擅长的业务场景
- NoSQL中的产品种类相当多:
- Redis
- Mongodb
- Hbase hadoop
- Cassandra hadoop
1、NoSQL和SQL数据库的比较
- 适用场景不同:sql数据库适合用于关系特别复杂的数据查询场景,nosql反之
- 事务 特性的支持:sql对事务的支持非常完善,而nosql基本不支持事务
- 两者在不断地取长补短,呈现融合趋势
二、Redis介绍
- Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。
- Redis是 NoSQL技术阵营中的一员,它通过多种键值数据类型来适应不同场景下的存储需求,借助一些高层级的接口使用其可以胜任,如缓存、队列系统的不同角色
1、特性
Redis 与其他 key - value 缓存产品有以下三个特点:
- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
- Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
- Redis支持数据的备份,即master-slave模式的数据备份。
2、优势
- 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
- 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
- 原子 – Redis的所有操作都是原子性的。
- 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
3、应用场景
- 用来做缓存(ehcache/memcached)——redis的所有数据是放在内存中的(内存数据库)
- 可以在某些特定应用场景下替代传统数据库——比如社交类的应用
- 在一些大型系统中,巧妙地实现一些特定的功能:session共享、购物车
三、Redis核心配置
配置项 | 配置内容 | 说明 |
---|
bind 127.0.0.1 | 绑定ip | 如果需要远程访问,可将此⾏注释,或绑定⼀个真实ip |
port 6379 | 端⼝ | 默认为6379 |
daemonize yes | 是否以守护进程运⾏ | 1、如果以守护进程运⾏,则不会在命令⾏阻塞,类似于服务 2、如果以⾮守护进程运⾏,则当前终端被阻塞 3、设置为yes表示守护进程,设置为no表示⾮守护进程 4、推荐设置为yes |
dbfilename dump.rdb | 数据⽂件 | 数据⽂件 |
dir /var/lib/redis | 数据⽂件存储路径 | 数据⽂件存储路径 |
logfile “/var/log/redis/redis-server.log” | ⽇志⽂件 | ⽇志⽂件 |
database 16 | 数据库 | 默认有16个 |
slaveof | 主从复制 | 类似于双机备份 |
四、Redis数据结构
redis是key-value的数据结构,每条数据都是⼀个键值对,键的类型是字符串,且键不能重复。
值的类型分为五种:字符串string、哈希hash、列表list、集合set、有序集合zset。
1、string
字符串类型是 Redis 中最为基础的数据存储类型,它在 Redis 中是二进制安全的,这便意味着该类型可以接受任何格式的数据,如JPEG图像数据或Json对象描述信息等。
在Redis中字符串类型的Value最多可以容纳的数据长度是512M。
(1)、保存
命令 | 说明 |
---|
set key value | 设置键值 |
set name ty | 设置键为 name 值为 ty 的数据 |
setex key seconds value | 设置键值及过期时间,以秒为单位 |
setex key1 3 value1 | 设置键为 key1, 值为 value1 过期时间为 3秒的数据 |
mset key1 value1 key2 value2 … | 设置多个键值 |
append key value | 追加值 |
append key1 value1 | 向键为key1 中追加值value1 |
(2)、获取
命令 | 说明 |
---|
get key | 获取:根据键获取值,如果不存在此键则返回null |
get name | 获取键name的值 |
mget key1 key2 … | 根据多个键获取多个值 |
(3)、键命令
命令 | 说明 |
---|
keys pattern | 查找键,参数⽀持正则表达式 |
keys * | 查看所有键 |
keys a* | 查看名称中包含a的键 |
exists key1 | 判断键是否存在,如果存在返回1,不存在返回0 |
type key | 查看键对应的value的类型 |
del key1 key2 … | 删除键及对应的值 |
expire key1 3 | 设置键 key1 的过期时间为 3秒 |
ttl key | 查看有效时间,以秒为单位 |
2、hash
- hash⽤于存储对象,对象的结构为属性、值
- 值的类型为string
(1)、增加、修改
命令 | 说明 |
---|
hset user name ty | 设置键 user 的属性 name 为 ty |
hmset user name ty age 12 | 设置键 user 的属性 name 为 ty、属性 age 为 12 |
(2)、获取
命令 | 说明 |
---|
hkeys key | 获取指定键所有的属性 |
hget user name | 获取键 user 属性 name 的值 |
hget user name age | 获取键 user 属性 name、age 的值 |
hget user | 获取键 user 所有属性的值 |
(3)、删除
命令 | 说明 |
---|
hdel user age | 删除键 user 的属性 age |
3、list
(1)、增加
命令 | 说明 |
---|
lpush key value1 value2 … | 从键为key 的列表左侧加⼊数据value1 、 value2 … |
rpush key value1 value2 … | 从键为key 的列表右侧加⼊数据value1 、 value2 … |
linsert key1 before value1 value2 | 在键为key1 的列表中元素value1 前加⼊value2 |
(2)、返回列表⾥指定范围内的元素
命令 | 说明 |
---|
lrange key start stop | 1、start、stop为元素的下标索引 2、索引从左侧开始,第⼀个元素为0 3、索引可以是负数,表示从尾部开始计数,如-1表示最后⼀个元素 |
(3)、设置指定索引位置的元素值
命令 | 说明 |
---|
lset key index value | 1、索引从左侧开始,第⼀个元素为0 2、索引可以是负数,表示尾部开始计数,如-1表示最后⼀个元素
|
(4)、删除
命令 | 说明 |
---|
lrem key count value | 将列表中前count次出现的值为value的元素移除 |
- count > 0: 从头往尾移除
- count < 0: 从尾往头移除
- count = 0: 移除所有
4、set
- ⽆序集合
- 元素为string类型
- 元素具有唯⼀性,不重复
- 说明:对于集合没有修改操作
(1)、增加
命令 | 说明 |
---|
sadd key1 member1 member2 … | 向键key1 的集合中添加元素member1 、member2 … |
(2)、获取
命令 | 说明 |
---|
smembers key | 获取键key 的集合中所有元素 |
(3)、删除
命令 | 说明 |
---|
srem key | 删除键key |
srem key1 value1 | 删除键key1 的集合中元素value1 |
5、zset
- sorted set,有序集合
- 元素为string类型
- 元素具有唯⼀性,不重复
- 每个元素都会关联⼀个double类型的score,表示权重,通过权重将元素从⼩到⼤排序
zset类型没有修改操作。
(1)、增加
命令 | 说明 |
---|
zadd key 2 value1 3 value2 … | 向键key 的集合中添加元素value1 、value2 ,权重分别为2、3 … |
(2)、获取
命令 | 说明 |
---|
zrange key start stop | 获取键key 的集合中所有元素 |
返回指定范围内的元素:
- start、stop为元素的下标索引
- 索引从左侧开始,第⼀个元素为0
- 索引可以是负数,表示从尾部开始计数,如-1表示最后⼀个元素
命令 | 说明 |
---|
zrangebyscore key min max | 返回score值在min和max之间的成员 |
zscore key member | 返回成员member的score值 |
(3)、删除
命令 | 说明 |
---|
zrem key member1 member2 … | 删除集合key 中元素member1 、member2 … |
zremrangebyscore key min max | 删除集合key 中权限在min 、max 之间的元素 |
五、Redis数据结构