Redis:非关系型数据库
关系型数据库和非关系型数据库的区别
Hbase,数据 是非关系型
业务数据,数仓 是关系型
非关系没有数据结构,数据没有约束
简介
Redis是一个开源的 内存中的数据结构存储系统
作用: 数据库 缓存 消息中间件
支持多种数据结构
什么是Nosql,有哪些Nosql
Redis的特点
过期时间可以设置到毫秒
访问快
持久化机制
集群模式
支持丰富数据类型
Redis用来做 实时 存储的比较多
安装
1 下载安装包
官网地址:https://redis.io/
下载地址:http://download.redis.io/releases/redis-4.0.14.tar.gz
2 安装c语言环境
因为:Redic是基于C语言开发出来的又要安装在linux系统下
yum install gcc-c++
3 将redis的源码包上传到linux系统并解压
tar -zxvf redis-4.0.14.tar.gz -C /usr/local/
4 进入Redis 包,执行make命令编译源码
make
5 安装
make install PREFIX=/usr/local/redis
linux命令
c 集群
–raw 在可显示中文
–csv 查看csv格式的文件
–a 设密码
/password vi里查找命令
idea项目套项目pox可以继承
APi
集群链接
new jedisPool(“qianfeng01”,6379)创建连接池
jedisPool。getResource
Redis 启动和关闭等基础命令
前端启动:./redis-server
关闭:ctrl + c
后端启动 :cp redis.conf /usr/local/redis/bin
修改redis.conf
daemonize yes 即后端启动
password 设置
默认客户端设置为本节点
启动redis 服务:./redis-server redis.conf
关闭:./redis-cli shutdown
查看进程:ps -ef | grep red
强制关闭:kill xxx
API
Hash 散列
List 列表
Set 集合
Zset 有序结合
String 字符串
添加
jedis。set
RedisAPI类型操作练习
/*
#### RedisAPI类型操作练习
Hash 散列
List 队列
set 集合
Zset 有序结合
String 字符串
*/
object RedisAPI类型操作练习 {
def main(args: Array[String]): Unit = {
//实例连接对象
val jedis = new Jedis("qianfeng01", 6379)
//密码认证
jedis.auth("123456")
//清空数据库
//jedis.flushDB()
/*
字符串String练习
增删改查
*/
//添加
// println(jedis.set("陈冠希", "张柏芝"))//放回ok
//追加 如果key不存在创建新的key
//println(jedis.append("陈冠希", "谢霆锋"))//返回value长度
//获取
//println(jedis.get("陈冠希"))
//自增自减
//println(jedis.incr("count")) //元素加一
// println(jedis.incrBy("count", 10)) //元素加10
// println(jedis.incrByFloat("avg", 10.8)) //元素加浮点数
// println(jedis.decr("count")) //元素减一
// println(jedis.decrBy("count", 5)) //元素减5
//查询字符串长度范围 类似截取
//println(jedis.getrange("陈冠希", 0, 1))
//替换 返回的是修改的字符数的long类型,且修改类型无限制
//println(jedis.setrange("count", 0, "123456"))
//println(jedis.get("count"))
//获取长度 也是long类型
//println(jedis.strlen("count"))
//设置多个key 返回ok
//println(jedis.mset("age", "20", "name", "张三"))
//获取多个key 返回List[String]
// println(jedis.mget("age", "name"))
//先获取再设置,修改value,并返回之前的value
// println(jedis.getSet("count", "邪门白虎"))
/*
集合操作set
*/
//添加元素
//jedis.sadd("hobbys","玩","睡觉","旅游","打游戏","吃")
//查询 集合元素个数
//println(jedis.scard("hobbys"))
//交集差集 sinter sdiff
//获取集合元素
// println(jedis.smembers("hobbys"))
//随机获取N个元素集合
//println(jedis.srandmember("hobbys", 3))
//删除
//jedis.srem("hobbys","睡觉")
//迭代元素
// val scan = new ScanParams()
// scan.`match`("打*")
// val rs = jedis.sscan("hobbys", "0", scan)
// println(rs.getResult)
/*
有序集合操作
排序规则:根据score排序,值越大,排名越靠后
*/
//添加
// jedis.zadd("price",1,"1")
// jedis.zadd("price",5,"10")
// jedis.zadd("price",2,"1.8")
// jedis.zadd("price",6,"100")
// jedis.zadd("price",10,"99")
// jedis.zadd("price",8,"五百")
//获取元素
// println(jedis.zrange("price", 0, -1))
//获取指定分值范围内元素数据,score的范围内的元素个数
// println(jedis.zcount("price", 1, 4))
//新增(插入)
//jedis.zincrby("price",6.8,"6")
//排名(确定当前值在排名中的索引)
// println(jedis.zrank("price", "100"))
//删除
//jedis.zrem("price","五百")
//获取score的value
// println(jedis.zscore("price", "100"))
/**
* List 队列
*/
//添加
// jedis.lpush("users","ww","ss","oo","tt")
// //jedis.rpush
// //h获取长度
// println(jedis.llen("users"))
//
// //获取元素
// println(jedis.lrange("users", 0, -1))
//
// //删除
// jedis.lrem("user",1,"zz")
//
// //往头部插入一个元素,但是注意Key一定要存在
// jedis.lpushx("users","zz")
// jedis.rpushx("users","mm")
//
// //修改
// jedis.lset("users",0,"jj")
//
// //获取指定元素
// println(jedis.lindex("users", 0))
// println(jedis.lrange("users", 0, -1))
/**
hash 散列
*/
//添加
jedis.hset("user","name","zhangsan")
jedis.hset("user","age","18")
//h获取key的值
println(jedis.hget("user", "name"))
//获取所有值
println(jedis.hexists("user", "age"))
//判断
println(jedis.hexists("user", "age"))
//获取长度
jedis.hlen("user")
//追加数据
jedis.hincrBy("user","age",10)
//删除
println(jedis.hdel("user", "name"))
//获取所有value的值
println(jedis.hvals("user"))
//关闭释放资源
jedis.close()
}
}
单机连接
public class 单机连接Redis {
public static void main(String[] args) {
Jedis jedis = new Jedis("qianfeng01", 6379);
jedis.auth("123456");
String set = jedis.set("s1", "hahaha");
System.out.println(set);
String get = jedis.get("s1");
System.out.println(get);
String ping = jedis.ping();
System.out.println(ping);
jedis.close();
}
}
连接池连接
object 连接池 {
def main(args: Array[String]): Unit = {
//配置连接池的参数
val config = new GenericObjectPoolConfig
config.setMaxTotal(10)//最大连接数
config.setMaxIdle(5) //最大空闲连接
config.setMinIdle(0) //最小空闲连接
//创建连接池
val pool = new JedisPool(config,
"qianfeng01", //redis的节点
6379, //redis的端口
10000, //连接超时时间
"123456", //redis的密码
0)
//创建Jedis实例
val jedis = pool.getResource
//测试
jedis.auth("123456")
jedis.set("吴奇隆","刘诗诗")
println(jedis.get("吴奇隆"))
println(jedis.ping())
//关闭连接池
jedis.close()
}
}
连接池连接java版
public class 连接池连接Redis {
public static void main(String[] args) {
//配置连接参数
//创建连接池
JedisPool pool = new JedisPool("node02", 6379);
//通过pool获取Jedis实力
Jedis jedis = pool.getResource();
//写入数据
jedis.set("s2","hehehe");
//查询数据
String s2 = jedis.get("s2");
//关闭jedis
jedis.close();
//关闭jedispool
pool.close();
}
}