关于学习慕课网Redis的一些总结

慕课网Redis入门
1.NoSQL的概述
NoSQL: Not only SQL 非关系型数据库
作用:
解决高并发读写(数据库读写操作频繁)
解决海量数据的高效率存储和访问
解决高可扩展性和高可用性

NoSQL数据库的四大分类:
键值存储、列存储、文档数据库(MongoDB 查询性能不高)、图形数据库

NoSQL的特点:
易扩展
灵活的数据模型
大数据量,高性能的存储
高可用

2.Redis的概述:
高性能的键值对数据库,支持的键值数据类型:
字符串类型,散列类型,列表类型,集合类型,有序集合类型

Redis的应用场景:
缓存 任务队列 网站访问的统计 数据过期的处理
分布式集群架构中的session分离

3.Redis的安装
搭建环境:
虚拟机、Linux系统、SSH客户端(SecureCRT7.3,SecureFX 7.3)

Redis Windows:
Jedis:redis 连接的基本操作
jedis介绍:支持多种语言 Jedis是redis官方首选的java客户端开发包
Jedis的使用:在项目中导入jedis的jar包 导入
代码使用方法:
//1.初始化 设置IP地址和端口
Jedis jedis=new Jedis(“192.168.32.130”,6379);
//1.保存数据
jedis.set(“name”,:“imooc”);
//2.获取数据
String str=jedis.get(“name”);
System.out.println(str);
//3.释放资源
jedis.close();

使用连接池的方式连接
//1.获得连接池的配置对象
JedisPoolConfig config=new JedisPoolConfig();
//2.设置最大连接数
config.setMaxTotal(30);
//3.设置最大空闲连接数
config.setMaxIdle(10);
//4.获取连接池
JedisPool jedisPool =new JedisPool(config,“192.168.30.132”,6379);
//5.获得核心对象
Jedis jedis =null;
try{
//通过连接池获得连接
jedis =jedisPool.getSource();
//设置数据
jedis.set(“name”,“Tom”);
//获取数据
String value=jedis.get(“name”);
System.out.println(value);
}catch(Exception e){
e.printStackTrace();
}finally{
//释放资源
if(jedis !=null){
jedis.close();
}
if(jedisPool!=null){
jedisPool.close();
}
}

Redis的数据结构:
1.字符串(String)
2.哈希(hash)
3.字符串列表(list)
3.字符串合集(set)
4.有序字符串集合(sorted set)

key定义注意点: 不要过长、 不要过短 、有统一的命名规范
一、存储String的常用命令:
1.赋值: set “key” “value” 如: set name jack
2.取值: get “key” 如:get name
3.获取值 设定值: getset “key” “value”
4.删除 : del “key”
5.数值的增减: incr num :若num无初始值,将初始值设为0 再加一,如果num为非Integer型的值 则报错; 减: decr num 若有初始值 则减一
6.以规定的数值加减:incrby decrby
如: incrby num 3 decrby num 5
7.向数字后面拼凑字符串 在已存在的字符串后面加上值 如: append num 5
此时若num的值是3,append num 5后为:“35” 若num无初值 则该操作为将num赋值为后面的值

二、存储Hash:
String Key 和String value 的容器 适合存储对象等键值对的数据
存储哈希的常用命令:
1.存储: hset myhash username jack
hset myhash age 18
存储key的多个值:
hset myhash2 username rose age 21
2.获取:hget myhash username 获取key的一个值
hmget myhash username age 获取key 的多个值
hgetall myhash 获取key的所有值
3.删除:hdel myhash username age 删除key的多个值
4.增加:hincrby myhash age 5 (增加数字) ----> age=25
5.判断是否存在:hexists myhash username 返回1 则存在
6.获取属性的长度: hlen mybash
7.获取所有的key:hkeys mybash
8.获取所有的values: hvalues mybash

三、存储List
四、存储set
五、存储sorted set…

Redis 的keys通用操作
1.keys * 所有的keys
2.keys my?: 查询所有的my开头的key
3.del my1 my2 my3 :删除多个key
4.exists my1 判断是否存在my1
5.rename company newcompany 重命名一个key
6.type newcompany:返回key的类型 如:String ,List ,Hash等

Redis的特性

速度快 持久化 多种数据结构 支持多种编辑语言 功能丰富 简单 主从复制(主服务器以及从服务器 主服务器数据可以同步到从服务器上) 高可用、分布式
16个数据库 多数据库
1.select 选择数据库 :select 1
2.move “key” 1:将"key" 移动到1号数据库

3.事务处理:
使用multi exec discard 处理事务
①multi: 开启事务 后面的执行命令都会被放在后面执行命令队列里面 未提交之前其他操作不可 访问 multi开启—>操作
②exec:相当于commit()提交操作
③discard: 在multi后 如果未提交 使用discard 将执行事务回滚
特性:多数据库、事务

Redis的持久化
定义:把数据从内存上同步到硬盘上
持久化的方式(缓存机制):
RDB持久化:
在指定的时间内将内存中的快照及数据写入到磁盘
AOF持久化:
以日志的方式记录服务器的操作
无持久化
RDB持久化和AOF持久化相结合

RDB方式:定时备份(利于文件备份):
优势:灾难恢复 性能最大化(开始持久化时,唯一做的是分叉出一些进程,通过进程实现持久化) 定时持久化
缺点:在定时持久化之前服务器宕机出错 利用子进程协助如果数据集大时需要停止服务器一段时间 在最大限度避免数据的丢失情况下不适用

配置:打开vim redis.conf,在该配置文件的一百多行左右出现如下配置

900秒 至少一个key发生变化 保存一个快照 持久化一次
300秒 至少10个key发生变化 保存快照
600秒 至少有10000key发生变化 保存快照

AOF方式:
优势一:带来更高的数据安全性
方案:①每秒同步(异步,高效率,若在这一秒中服务器宕机了这一秒保存的数据就直接丢失了)、
②每修改同步(同步持久化,每发生数据变化硬盘中的数据都会立即发生变化,缺点是效率低但安全性高)
采用append方式(追加),对数据库之前的数据不会产生影响
③不同步

优势二:AOF包含一个格式清晰,便于理解的日志文件用于记录所有的修改操作,根据这个文件完成数据重建,便于操作
区别:AOF运行效率低于RDB

AOF配置: 打开redis.conf(vim redis.conf)
将redis.conf文件里面的appendonly no 变为 appendonly yes,此时会生成一个文件appendonly.aof

同步策略的改变:

之后 停掉redis ./bin/redis-cli shutdown
重启redis:
若执行了flashall操作(清空数据库),可以关闭redis后打开appendonly.aof文件找到flushall操作,将flushall操作删除。删除掉过后重连客户端之前的删除的操作就又恢复了。

Redis的典型应用场景:
缓存系统 (cache和storage)
计数器
消息队列系统
排行榜
社交网络
实时系统

一.Redis的安装:
安装后的文件、工具:
redis-server: redis服务器
redis-cli: redis命令行客户端
redis-benchmark: 对redis做一些基准测试
redis-check-aof: AOF文件修复工具
redis-check-dump: RDB文件检查工具

二.Redis三种启动方法:
最简启动
动态参数启动(修改参数启动)
配置文件启动方式(文件存储参数启动)

三.Redis常用配置:
(Redis默认端口:6379)
daemonize:是否是守护进程
port:redis对外端口号
logfile:redis系统日志
dir:Redis工作目录

四.Redis的通用命令
通用命令:keys(见上,一般不在生产环境中使用)
del key [key …] (删除key)
dbsize(对所有键值信息的统计)
expire key second(设置key在second秒过后过期)
persist key(去掉key的过期时间)
ttl key(查看到过期时还剩的剩余时间)
exists key(查看key是否存在)
type key(返回key的类型------>String ,Hash,List,sorted set,set)
注:Redis使用的是单线程 一次执行一条命令 实际上,Redis并不是单线程

五.Redis中的数据结构---->字符串(对上面内容的补充)
1.字符串键值对结构 key-value
注:value可以是二进制 大小限制在512M
2.应用场景:缓存 计数器 分布式锁等等
3.使用的一些操作命令:
①incr、decr、incrby、decrby(见上)
incrbyfloat getrange setrange(字符串的浮点数的增加,以及设定范围的修改)
②set key value
#不管key是否存在,都设置

③setnx key value
#key不存在,才设置(相当于添加)

④set key value xx
#key存在,才设置(相当于更新)

⑤mget和mset
mget key1,key2,key3 批量获取key 原子操作
mset Key1,key2 批量设置key

⑥getset strlen

getset key newvalue
#set key newvalue并返回旧的value

append key value
#将value追加到旧的value

strlen key
#返回value的长度

六.Redis中的数据结构---->哈希
哈希的键值对结构:key filed(属性) value(值)
user name Damon
操作见上
其他的一些命令:
hgetall key
#返回hash key对应的所有的field和value

hvals key
#返回hash key对应所有的field的value

hkeys key
#返回hash key对应的所有的field

七.Redis中的数据结构---->列表(List)
特点:有序 可以重复 左右两边可以弹出插入
结构:key elements
user:1:message a b c d e f g h i j k l m
API:
rpush:从列表的右端插入值(1-N个)
eg: rpush listkey a b c
lpush: 从列表的左端插入值(1-N)
eg: lpush listkey c b a
linsert:在list指定的值前后插入newValue
eg: linsert key before|after value newValue
lpop:从列表左侧弹出一个item(删除)
eg:lpop listkey
rpop:从列表右侧弹出一个item(删除)
eg:rpop listkey
lrem:根据count值从列表删除所有value相等的项
eg:lrem key count value
ltrim:按照索引范围修剪列表
eg:ltrim listkey start end
lrange:获取列表指定索引范围内所有的item
eg:lrange key start end(包含end)
lindex:获取列表指定索引的index
eg:lindex listkey 4
llen:获取列表的长度
eg: llen key
lset:设置列表指定索引值为newValue
eg: lset listkey value newValue

八.Redis中的数据结构---->集合(set)
结构: key values
类似于高中的集合(不能有重复元素)
sadd srem:向集合key添加element(如果存在则添加失败)
eg:sadd key element
srem key element:将集合中key中的element移除掉
eg:srem key element
scard:计算集合大小
eg: scard key
sismember:判断value是否在集合中
eg:sismember key value =1
srandmember:从集合中随机挑count个元素
eg:srandmember key count=his
spop:从集合中随机弹出一个元素
eg:spop key=sports
smembers:获取集合中的所有元素(注:返回元素是无序的)
eg:smembers key
sdiff:差集
eg: sdiff user:1:follow user:2:follow
sinter:交集
eg:sinter user:1:follow user:2:follow
sunion:并集
eg:sunion user:1:follow user:2:follow

九.Redis中的数据结构---->有序集合(Zset)
key (score element)
user:ranking 95 kris
特点:有序 value为score和element两项 无重复元素

zadd:添加score和element
eg:zadd key score element(可以是多对)
zrem:删除元素
eg:zrem key element(可以是多个)
zscore:返回元素的分数
eg:zscore key element
zincrby:增加或减少元素的分数
eg:zincrby key increScore element
zcard:返回元素的总个数
eg:zcard key
zrank:返回元素的分数排名
eg:zrank key element
zrange:返回指定索引范围内的升序元素[分值]
eg:zrange key start end [WITHSCORES]

十.Redis中的慢查询(slowlog):
慢查询生命周期:

说明:慢查询发生在第三阶段 客户端超时不一定慢查询,但慢查询是客户端超时的一个原因
两个配置:1.slowlog-max-len
先进先出队列
固定长度(slowlog的长度)
保存在内存内

2.slowlog-log-slower-than

慢查询阈值(单位:微秒)
slowlog-log-slower-than=0,记录所有命令
slowlog-log-slower-than<0,不记录任何命令

3.配置方法
。。。

慢查询的命令:1.slowlog get[n]:获取慢查询队列
2.slowlog len:获取慢查询队列的长度
3.slowlogreset:清空慢查询队列

运维经验:
slowlog-max-len不要设置过大 ,默认10ms,通常设置1ms
slow-log-slower-than不要设置过小,通常设置在1000左右
定期持久化慢查询
理解命令的生命周期

十一.Redis的流水线(pipeline)

n次事件=n次网络时间+n次命令时间
1次pipeline(n条命令)=1次网络时间+n次命令时间

使用建议:
1.注意每次pipiline携带的数据量
2.pipeline每次只能作用在一个redis节点上
3.M操作与pipeline的区别

十二.Redis的发布订阅功能
角色:发布者 订阅者 频道
模型:

注:在实现发布订阅功能时,在发布者发布消息后订阅者再订阅则不能看到之前的消息

API:publish
演示:redis>publish sohu:tv “hello world”
subscribe
演示:redis> subscribe sohu:tv
unsubscribe
演示:redis>unsubscribe sohu:tv

十三.Redis的主从复制
1.一主一从
redis有master节点(主节点)和slave节点(从节点)

主从复制达到了一个备份的功能,避免服务器宕机出现的问题

2.一主多从

总结:
1.一个master可以有多个slave
2.一个slave只能有一个master
3.数据流是单向的,master到slave

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值