一、为什么使用
解决应用服务器的cpu和内存压力
减少io的读操作,减轻io的压力
关系型数据库的扩展性不强,难以改变表结构
二、优点:
nosql数据库没有关联关系,数据结构简单,拓展表比较容易
nosql读取速度快,对较大数据处理快
三、适用场景:
数据高并发的读写
海量数据的读写
对扩展性要求高的数据
四、不适场景:
需要事务支持(非关系型数据库)
基于sql结构化查询储存,关系复杂
五、Redis结构:
Redis是一个开源的key—value型数据库,支持string、list、set、zset和hash类型数据。对这些数据的操作都是原子性的,redus为了保证效率会定期持久化数据。
六、使用场景:
配合关系型数据库做高速缓存
缓存高频次访问的数据,降低数据库io
分布式架构,做session共享
可以持久化特定数据。
利用zset类型可以存储排行榜
利用list的自然时间排序存储最新n个数据
A. 字符串
set name fx [存储一个key为name,value为fx的数据]
get name [获取一个key为nam的值,没有则返回nil]
B.哈希(Hash)
hmset student name “fuxing” age 23 height 168 weight “70kg” [ hmset key field1 value1 [field2 value2 ] ]
hset student sex “man” [在student中添加一个field-value 为 sex-“man”的键值]
C. 列表(List)
lpush fruit apple mongo [将值apple和mongo插入到列表头部
]
lrange fruit 0 -1 查看所有的数据【-1表示最后的一项】
lrem fruit -3 mango 【倒序遍历(负号),移除最多3个的值为mango的操作】
D. 集合(Set)
Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不*能出现重复的数据。*
Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
sadd sql mysql oracle sqlserver db2 [向集合 sql 中添加mysql oracle sqlserver db2 4个值]
smembers sql【查看集合sql的所有值】
srem sql mysql oracle db2【移除集合sql中的一个或多个值】
E. 有序集合(sorted set)
Redis Zscore 命令返回有序集中,成员的分数值。 如果成员元素不是有序集 key -的成员,或 key 不存在,返回 nil 。
zadd computer 3 “apple” [computer集合中添加分数值为3值为apple]
zscore computer thinkpad [查看分数值]
zrange computer 0 10[查看0 到10 范围的值]
附上一小段java代码
需要的jar包
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
package com.redis.demo;
import redis.clients.jedis.Jedis;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
public class Main {
public static void main(String[] args) {
//连接本地的 Redis 服务
Jedis jedis = new Jedis("localhost");
System.out.println("连接成功");
//查看服务是否运行
System.out.println("服务正在运行: "+jedis.ping());
System.out.println("-------------------------------------------");
//设置 redis 字符串数据
jedis.set("age", "23");
// 获取存储的数据并输出
System.out.println("redis 存储的字符串为: "+ jedis.get("age"));
System.out.println("-------------------------------------------");
jedis.lpush("status","1");
jedis.lpush("status","2");
jedis.lpush("status","3");
jedis.lpush("status","4");
List<String> list = jedis.lrange("status",0,-1);
for(String s : list){
System.out.println(s);
}
System.out.println("-------------------------------------------");
// 获取数据并输出
Set<String> keys = jedis.keys("*");
Iterator<String> it = keys.iterator() ;
while(it.hasNext()){
String key = it.next();
System.out.println(key);
}
}
}