redis基础(一)
传统数据库的特性:原子性,一致性,独立性,持久性
缓存数据库(Nosql)的特性:强一致性(Consistency),可用性(Availability),分区容错性(Partition tolerance)
分布式数据库系统不可能同时满足强一致性,可用性以及分区容错性,最多只能同时满足其中两个特性,对于Nosql的数据库,分区容错性是必须要实现的
传统的数据库是CA型(强一致性,高可用性)
BASE :基本可用性(Basically Available),软状态(Soft state),最终一致性(Enventually consistent)。
BASE主要为了解决关系型数据库强一致性而导致可用性降低的问题而提出的解决方案。主要思想是:通过让系统放松对某一时刻数据一致性的要求来换取系统整体伸缩性和性能上的改观
大多数网站架构是AP型(高可用性,分区容错性)
redis,Mongodb是CP型(强一致性,分区容错性)
分布式和集群的简介如下:
分布式:不同的多台服务器上部署不同的服务模块(工程),他们之间通过RPC/Rmi之间通信和调用,对外提供服务和组内协作。
集群:不同的多台服务器上面部署相同的服务模块,通过分布式调用软件进行统一的调度,对外提供服务和访问。
Redis(Remote DIctionary server):远程字典服务器
Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用
Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储
Redis支持数据的备份,即主从复制(master-slave)模式的数据备份
Redis可以干什么:
1.内存存储和持久化:redis支持异步将内存中的数据存储在硬盘上,同时不影响继续服务
2.取最新N个数据的操作,如:可以将在最新的10条评论的id放在redis的list集合中
3.模拟类似于HttpSession这种需要设定过期时间的功能
4.发布,订阅消息系统
5.定时器,计数器
Linux系统下redis的安装:
1.下载redis-3.0.4.tar.gz后放入到Linux目录下的/opt文件夹下,使用解压命令: tar -zxvf redis-3.0.4.tar.gz,解压后会出现文件夹:redis-3.0.4,进入该目录: cd redis-3.0.4
2.执行make命令: make 如果运行命令报错,找不到gcc,则需要先安装gcc。能联网时:yum install gcc-c++ ;不能联网时:打开总端命令窗口,分别执行如下命令(因为版本问题,有些命令可能不需要,如第四条命令,直接都执行一边即可):
3.第二次执行make命令,如果报错:没有Jemalloc/jemalloc.h文件或目录(第一次安装失败有残留文件 ),此时执行make distclean命令,然后再次make
4.执行make install
5.可以查看默认安装目录:usr/local/bin
redis的启动:cd到usr/local/bin目录下,执行命令:redis-server redis.conf启动redis的服务器,执行命令:redis-cli -p 6379启动客户端(可以不用加端口号,默认即为6379)
启动之后可以使用ping命令测试是否连通,如果连通会返回一个PONG
redis基础知识
1.redis是单进程,对读写等事件的象应是通过对epoll函数的包装来做到的。Redis的实际处理速度完全依赖于主进程的执行效率。而Epoll是Linux内核为处理大批量文件描述符而做了改进的epoll,是Linux下多路复用IO接口select/poll的增强版本,能够显著提高程序在大量并发连接中只有少量活跃的情况下的系统cpu利用率
2.默认16个数据库,索引从0开始,默认使用零号库
3.切换数据库命令:select 索引
4.Dbsize:查看当前数据库的key的数量
6.Flushdb:清空当前库
7.Flushall:清空所有库
redis的数据类型:String(最基本类型,是二进制安全的,一个value最多可以是512M),list,hash(类似于java中的map),set,zset
redis常见数据类型操作命令:http://redisdoc.com
启动客户端,连接服务器端,当设置了密码时,可以通过命令:auth mima来连接
String类型的练习,通过set key value 来存储字符串类型数据,使用get key来获取指定key的value
判断数据库中是否存在指定key(1表示存在,0表示不存在)
把本库中的key移动到指定库中:move key 指定库的索引值(1表示命令成功)
为指定的key设置过期时间
为指定key设置过期时间: expire key 毫秒数
查询指定key的剩余过期时间:ttl key (-2表示已过期已死,-1表示永不过期)
查看指定key是什么类型的
删除指定key:del key
在字符串后面追加制定内容:append key content
获取字符串的长度:strlen key
数据的自增/自减(值必须是数值) incr key / decr key
按指定步数自增(减) incrby(decrby) key step
获取指定区间范围内的值:getrange key start end
设置指定区间范围内的值(只需要开始索引):setrange key start
存入时并设置过期时间:setex key expire value
如果不存在该key,则设置该值,否则该命令无效:setnx key value
批量设置/批量获取::
mset k1 v1 k2 v2
mget k1 k2
msetnx k1 v1 k2 v2
先查询再设置:getset key value