一.NoSQL
not only sql 非关系型数据库
二.为什么需要NoSQL?
Web1.0 无法互动的网站 web2.0用户可以
Web2.0出现的问题(1)高并发读写 (2)海量数据的高效率存储和访问
(3)高可扩展性和高可用性
三.主流NoSQL产品:
mongoDB,redis,neo4j
四.NoSQL数据库四大分类:
(1)键值存储(2)列存储(3)文档数据库(mongoDB)(4)图形数据库
五.redis支持的键值数据类型:
(1)字符串类型(2)散列类型(3)列表类型(4)集合类型(5)有序集合类型
六.应用场景:
(1)缓存 (2)任务队列 (3)网站访问统计(4)数据过期处理(5)分布式集群架构中session分离
七.安装
(1)安装gcc:yum install gcc-c++
(2)下载redis的源码包,上传到linux服务器,解压源码包
(3)Make 编译
(4)make install PREFIX=/usr/local/redis 安装
八.启动redis
1.前端启动模式
/usr/local/redis/bin/redis-server
默认是前端启动模式,端口是6379
2.后端启动
从redis的源码目录中复制redis.conf到redis的安装目录。
修改配置文件
[root@bogon bin]# ./redis-server redis.conf
九.Jedis
1.介绍
jedis是redis官方首选的java客户端开发包
2.入门程序
@Test
public void demo2(){
//1.获得数据库连接池对象
JedisPoolConfig config = new JedisPoolConfig();
//2.设置最大连接数
config.setMaxTotal(30);
//3.设置最大空闲连接数-->连接池饱和状态最多20个连接数
config.setMaxIdle(10);
//4.获得连接池
JedisPool jedisPool = new JedisPool(config, "47.94.148.93", 6379);
//5.获得核心对象
Jedis jedis = null;
try {
//6.通过连接池获得连接
jedis = jedisPool.getResource();
//7.设置参数
jedis.set("name","张三");
//8.获得参数
System.out.println(jedis.get("name"));
}catch (Exception e){
e.printStackTrace();
}finally {
if(jedis!=null){
jedis.close();
}
if(jedisPool!=null){
jedisPool.close();
}
}
}
3.redis数据结构
(1)String
set company zhada //创建
get company //根据key获取value
getset company baidu //获取value并设置
del person //删除
incr num //数字自增1
incrby num 5 //数字加5
append num 5 //追加5 eg:num为5 append 5后为55
(2)hash
hset myhash username kaka //添加键值对
hget myhash username //根据建查值
hgetall myhash //获取所有键值对
hkeys myhash //获取所有键
hvalues myhash //获取所有值
hdel myhash usrname age //删除指定键值对
del myhash //删除所有键值对
hlen myhash //获取键值对个数
(3)list
lpush mylist a b c //从集合左侧开始插入数据
rpush mylist abc //从右侧开始添加
lrange mylist 0 -1 //c b a 查看
lpop mylist //弹出第一个元素
rpop mylist //尾部弹出
llen mylist //元素个数
lset mylist 3 kaka //设置第三个位置的元素为kaka
linsert mylist before kaka mu //在kaka元素前添加mu
(4)set(不可重复)
sadd myset a b c //添加元素
srem myset b //删除元素
smembers myset //列出所有元素
sismember myset a //判断是否在集合中
sinter myset myset2 //取交集
sunion myset myset2 //取并集
srandmember myset //随机取集合中的元素
(5)zset(sorted-set)
zadd mysort 70 zs 80 ls 90 ww //添加元素
zccore mysort ls //查询lsui应的值
zrange mysort 0 -1 //从小到大显示
zrevrange 0 -1 //从大到小显示
4.通用操作
keys * //查看所有的key
keys my* //操卡逊my开头的key
rename company newcompany //重命名company
expire company 1000 //设置超时时间1000秒
type company //查看类型
十.redis特性
1.多数据库
一个redis实例最多可提供16个数据库,下标0-15,客户端默认连接0 号数据库
move myset 1 //把myset移到一号数据库
selsct 1 //选择一号数据库
2.事务
multi //开启事务
exec //提交事务
discard //回滚事务
十.redis持久化
1.RDB持久化(Redis DataBase 快照形式)
RDB是在某个时间点将数据写入一个临时文件,持久化结束后,用这个临时文件替换上次持久化的文件,
达到数据恢复。 (特定时间替换)
2.AOF持久化(append only file)
将“操作 + 数据”以格式化指令的方式追加到操作日志文件的尾部。并且是立即追加(1S)