1.简介
NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,泛指非关系型的数据库。NoSQL不依赖业务逻辑方式存储,而以简单的key-value模式存储。因此大大的增加了数据库的扩展能力。
NoSQL特性
- 不遵循sql标准
- 不支持ACID(原子性、一致性、隔离性、持久性)
- 远超于SQL的性能
NoSQL适用场景
- 对数据高并发的读写
- 海量数据的读写
- 对数据高可扩展性的
NoSQL不适用的场景
- 需要事务支持
- 基于sql的结构化查询存储,处理复杂的关系,需要即席查询
2.redis文件结构
- redis-benchmark:性能测试工具,可以在自己本地运行,看看自己本地性能如何
- redis-check-aof:修复有问题的AOF文件
- redis-check-rdb:修复有问题的dump.rdb文件
- redis-cli:客户端,操作入口
- redis-sentinel:Redis集群使用
- redis-server:Redis服务器启动命令
3.启动redis
3.1.前台启动(不推荐)
执行命令redis-server
可以在前台启动redis,但是这种方式启动redis会导致如果窗口关闭,redis的服务也会关闭
3.2.后台启动
- 在redis的解压目录下找到他的配置文件
redis.conf
,把它cp一份到etc目录下vim redis.conf
进入文件,用/daem
找到daemonize
,将daemonize no
设置为daemonize yes
:wq
保存- 执行
redis-server /etc/redis.conf
指令,这个目录就是你的conf文件存放的位置- 使用
ps -ef | grep redis
查看进程,如图
表明redis后台启动成功
4.redis关闭
- 可以使用
redis-cli shutdown
来关闭 - 可以找到他的进程号,如3.2 他的进程号是29722,使用
kill -9 29722
来杀掉他的进程
5.redis常用五大基础数据类型
5.1.key键操作
keys *
查看当前库所有key (匹配:keys *1
)exists key
判断某个key是否存在type key
查看你的key是什么类型del key
删除指定的key数据unlink key
根据value选择非阻塞删除
仅将keys从keyspace元数据中删除,真正的删除会在后续异步操作。expire key 10
10秒钟:为给定的key设置过期时间ttl key
查看还有多少秒过期,-1表示永不过期,-2表示已过期select [0-15]
命令切换数据库,默认使用的数据库是0,总共有16个数据库dbsize
查看当前数据库的key的数量flushdb
清空当前库flushall
通杀全部库
5.2.字符串String
常用命令
set <key><value>
添加键值对
*NX:当数据库中key不存在时,可以将key-value添加数据库
*XX:当数据库中key存在时,可以将key-value添加数据库,与NX参数互斥
*EX:key的超时秒数
*PX:key的超时毫秒数,与EX互斥get <key>
查询对应键值append <key><value>
将给定的<value>
追加到原值的末尾strlen <key>
获得值的长度setnx <key><value>
只有在 key 不存在时 设置 key 的值incr <key>
将 key 中储存的数字值增1
只能对数字值操作,如果为空,新增值为1decr <key>
将 key 中储存的数字值减1
只能对数字值操作,如果为空,新增值为-1incrby / decrby <key><步长>
将 key 中储存的数字值增减。自定义步长。mset <key1><value1><key2><value2> .....
同时设置一个或多个 key-value对mget <key1><key2><key3> .....
同时获取一个或多个 valuemsetnx <key1><value1><key2><value2> .....
同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。
原子性,有一个失败则都失败getrange <key><起始位置><结束位置>
获得值的范围,类似java中的substring,前包,后包setrange <key><起始位置><value>
用<value>
覆写<key>
所储存的字符串值,从<起始位置>开始(索引从0开始)。setex <key><过期时间><value>
设置键值的同时,设置过期时间,单位秒。getset <key><value>
以新换旧,设置了新值同时获得旧值。
数据结构
String的数据结构为简单动态字符串(Simple Dynamic String,缩写SDS)。是可以修改的字符串,内部结构实现上类似于Java的ArrayList,采用预分配冗余空间的方式来减少内存的频繁分配.
如图中所示,内部为当前字符串实际分配的空间capacity一般要高于实际字符串长度len。当字符串长度小于1M时,扩容都是加倍现有的空间,如果超过1M,扩容时一次只会多扩1M的空间。需要注意的是字符串最大长度为512M。
5.3.列表List
常用命令
lpush/rpush <key><value1><value2><value3> ....
从左边/右边插入一个或多个值。lpop/rpop <key>
从左边/右边吐出一个值。值在键在,值光键亡。rpoplpush <key1><key2