Redis知识整理
概念
关系型数据库:底层需要算法来维持表与表,数据与数据之间 一对一,一对多,多对多的关系。所以开销大,性能相对低。
关系型数据库代表:Mysql,oracle
NoSql(非关系型数据库):只是关心数据的存取,不用关心数据与数据之间的关联关系,所以相对①性能高②应对海量数据和高并发的存取③易扩展
非关系型数据库代表:
- 键值对存储(key-value):redis
- 列存储:HBase
- 文档数据库:mongodb
官方给出的测试数据:
redis读的速度能达到11万次/秒
redis写的速度能达到81000次/秒
Redis应用场景:
缓存
任务队列
网站访问统计
数据过期处理(可以精确到毫秒)
应用排行榜
分布式集群架构中Session的分离
Redis安装:
redis是C语言开发的,需要依赖gcc环境
安装环境依赖:yum install gcc-c++
tar -zxvf redis-3.0.7.tar.gz
cd
make(编译)
make PREFIX=/usr/local/redis install(安装)
安装完成后,在/usr/local/redis/bin 下有几个可执行文件
redis-benchmark -----性能测试工具
redis-check-aof -----AOF文件修复工具
redis-check-dump -----RDB文件检查工具(快照持久化文件)
redis-cli -----命令行客户端
redis-server -----redis服务器启动命令
redis启动需要配置一个配置文件,可以修改端口号等信息
cp redis.conf /usr/local/redis
Redis后端启动
修改redis.conf 里面的 daemonize yes
启动时指定配置文件
cd /usr/local/redis
./bin/redis-server ./redis.conf
ps -ef | grep -i redis (查看redis进程)
关闭redis
①kill -9 PID (不建议)
②./bin/redis-cli shutdown (正常关闭,数据保存)
Linux开放6379端口
/sbin/iptables -I INPUT -p tcp --dport 6379-j ACCEPT
/etc/rc.d/init.d/iptables save
用Jedis连接Redis
jedis是redis官方首选的连接redis的开发包
jedis github地址:https://github.com/xetorthio/jedis
关于java里面用jedis连接redis网上代码比较多此处省略。(也可以用jedis连接池连接)
Redis五种数据类型:
字符串(String)常用
哈希(hash)常用
字符串列表(list)
字符串集合(set)
有序字符串集合(sorted set)
key的定义:①不要太长②不要太短③要有统一命名规范
字符串(String):
①二进制安全的,存入和获取的数据相同
②value最多可以容纳的数据长度是 512M
哈希(hash):(适合存 值对象的信息,比如 用户名,密码,年龄)
①String key 和 String Value 的map容器
②每一个Hash可以存储4294967295个键值对
字符串列表(list):
ArrayList使用数组方式
LinkedList使用双向链表方式
字符串集合(set):
①和list类型不同的是,set集合不允许出现重复元素
②set可以包含的最大元素数量是4294967295
有序字符串集合(sorted set):(应用场景 排行榜)
①sorted-set和set区别
②sorted-set的成员在集合中是有序的(按分数从小到大排序)
③每一个元素都对应一个分数,分数是可以重复的。
一个redis实例默认有16个数据库,默认使用的是0号数据库
Redis持久化(Redis高性能的原因是,所有的数据都存在内存当中)
两种持久化方式:
①RDB方式(默认支持,不需要配置。在指定时间间隔内将内存中的数据集快照写入磁盘)
②AOF方式(以日志方式记录redis的每一次操作,redis启动的时候读取该文件,保证数据完整性)
③无持久化(把redis当缓存用)
④同时使用RDB方式和AOF方式
RDB方式
在 redis.conf里面
save 900 1 (每900秒,至少有一个key,进行一次持久化)
save 300 10
save 60 10000
AOF方式