Redis第一天
一、 NoSQL数据库介绍
NoSQL表示不仅仅是SQL,泛指非关系型数据库。NoSQL不依赖业务逻辑方式存储,而是以简单的key-value模式存储。因此大大增加了数据库的扩展能力
- 不遵循SQL标准
- 不支持ACID(原子性、隔离性、一致性、持久性)
- 远超于SQL的性能
NoSQL适用场景
- 对数据高并发的读写
- 海量数据读写
- 对数据高可扩展性
NoSQL不适用场景
- 需要事务支持
- 基于sql的结构话查询存储,处理复杂的关系,
(用不着sql,和用了sql也不能解决的情况,可以考虑NoSQL)
常见NoSQL数据库
- Memcache
- Redis(支持持久化、还支持多种数据结构的存储)
- MongoDB(文档型数据库,类似于json格式数据,存储数据更加多样)
二、Redis概述与安装
- Redis 是一个开源的key-value存储系统
- 支持更多数据结构的存储
- Redis支持不同方式排序
- 支持数据持久化
- session共享
- 多样数据结构存储持久化数据
通过List实现按自然排序的数据 --> 最新N个数据
利用zset(有序集合) --> 排行榜N
Expire 过期 --> 手机验证码
原子性自增方法 --> 计数器、秒杀
利用Set集合 --> 去除大量重复数据
利用list集合 --> 构建队列
1、linux环境下安装redis
-
上传redis文件
-
由于redis需要C语言环境支持,所以首先安装gcc
-
安装完成之后使用tar -zxvf redis-2.6.7.tar.gz 解压
-
进入加压好的文件目录执行 make 命令进行编译
-
使用make install命令进行安装
-
安装成功之后进入 /usr/local/bin目录查看安装文件
redis-benchmark 性能测试工具,可以自己在本机运行,看看自己本机性能如何
redis-check-aof 修复有问题的AOF文件,rdb和aof
redis-cli 客户端,操作入口
redis-sentinel Redis集群使用
redis-server Redis服务器启动命令
2、Redis前台启动
[root@CclSys bin]# redis-server
3、推荐Redis后台启动
[root@CclSys bin]# redis-server /etc/redis.conf
4、远程连接虚拟机Redis
-
开放linux3679端口
[root@CclSys bin]# firewall-cmd --permanent --add-port=6379/tcp
success
[root@CclSys bin]# firewadd-cmd --reload
success
表示端口开放成功
-
更改redis配置文件
[root@CclSys bin]# vim /etc/redis.conf
将配置文件中的 protected-moodo yes 改成no 关闭保护
将 bind 127.0.0.1 改为 0.0.0.0 允许所有ip访问
将deamonize 改为yes 允许后台运行
3. 使用可视化软件进行连接
Redis底层使用单线程+IO多路复用实现
三、常用五大数据类型
1、常用命令
- keys * 查看当前库中所有key
- existts key 查看当前库中某个key是否存在
- type key 查看 某个key是什么类型
- del key 删除某个key
- unlink key 根据value选择非阻塞删除(仅仅将keys从keyspace元数据中删除,真正的删除会在后续异步操作)
- expore key 10 为给定的key 设置过期时间
- ttl key 查看key还有多少秒过期 -1表示永不过期 -2表示已经过期
- select 0-15 切换redis默认的15个库
- dbsize 查看当前redis中存在多少个key
- flushdb 清空当前库
- fllushall 通杀全部库
2、Redis 字符串(String)
String是Redis最基本的类型,String类型 是二进制安全的.意味着Redis的String可以包含任何数据,比如jpg图片或者序列化对象
String类型是Redis最基本的数据类型,一个Redis中字符串value最多可以是512M
字符串操作常用命令
- set命令 set key value 设置值 ,设置相同的key会覆盖之前的值
- get命令 get key 取值
- append key value 追加
- strlen key 获得值的长度
- setnx key value 只有在key不存在时 ,才可以设置key的值
- incr key 让存储的数字值自增1
- decr key 让存储的数字值减1
- incrby / decrby key <步长> 让数字值增加/减少相应步长
- 原子性:所谓原子操作是指不会被线程调度机制打断的操作,这种操作一旦开始就一直运行到结束,中间切换到另一个线程。
- mset 设置多个键值对
- mget 获取多个值
- msetnx 只能设置多个不存在的值(有一个存在都不成功)
- getrange <起始位置><结束位置> 获得范围之内的值
- setrange <起始位置><结束位置> 设置范围的值
- setex <过期时间> 设置过期时间的值
- getset 新值换旧值
数据结构
String的数据结构为简单动态字符串(simpl Dynamic String)。是可以修改的字符串,内部结构实际上类似于Java的ArrayList,采用预分配冗余空间的方式来减少内存的频繁分配。当字符串长度小于1M时,扩容是加倍现有的空间,如果超过1M,扩容时一次指挥多扩1M的空间。需要注意的是字符串最大长度为512M。
3、Redis 列表(List)
- 单键多值
- Redis列表是简单的字符串列表,按照插入顺序排序,你可以添加一个元素列表的头部或者尾部
- 底层实际上是双向链表,对两端的操作性能很高,通过索引下标的操作,中间节点性能会较差。
列表常用命令操作
- lpush / rpush 从左/右插入一个或多个值.
- lpop / rpop 表示从左边或者右边移除一个值。
- lrange <起始位置><末尾位置>