redis基础

redis

NoSQL特点

1.方便扩展,数据之间没有关系很好扩展

2.高性能(Redis 一秒写8万次,读取11万,NoSQL的缓存记录集是一种细粒度的缓存,新能比较高)

3.数据类型多样型(不需要事先设计数据库,随取随用)

NoSQL的四大分类

KV键值对:redis

典型应用场景

文档型数据库(bson格式和json 格式): MongoDB
列存储数据库: HBase 分布式文件系统
图关系数据库: InfoGrid,Neo4j
分类Examples举例典型应用场景数据模型优点缺点
键值(key-value)[3]Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB内容缓存,主要用于处理大量数据的高访问负载,也用于一些日志系统等等。[3]Key 指向 Value 的键值对,通常用hash table来实现[3]查找速度快数据无结构化,通常只被当作字符串或者二进制数据[3]
列存储数据库[3]Cassandra, HBase, Riak分布式的文件系统以列簇式存储,将同一列数据存在一起查找速度快,可扩展性强,更容易进行分布式扩展功能相对局限
文档型数据库[3]CouchDB, MongoDbWeb应用(与Key-Value类似,Value是结构化的,不同的是数据库能够了解Value的内容)Key-Value对应的键值对,Value为结构化数据数据结构要求不严格,表结构可变,不需要像关系型数据库一样需要预先定义表结构查询性能不高,而且缺乏统一的查询语法。
图形(Graph)数据库[3]Neo4J, InfoGrid, Infinite Graph社交网络,推荐系统等。专注于构建关系图谱图结构利用图结构相关算法。比如最短路径寻址,N度关系查找等很多时候需要对整个图做计算才能得出需要的信息,而且这种结构不太好做分布式的集群方案。[3]

Redis(Remote Dictionary Server ),即远程字典服务。

Redis 特点

1.持久化(rdb、aof)

2.效率高,可用于高速缓存

3.发布与订阅系统

4.地图信息分析

5.计时器、计数器

Redis 基础

Redis默认有16个数据库

select 1 // 选择1数据库 
flushdb //清除当前数据库
flushall //清除所有的数据库
keys * //查看所有的key
exists key //判断当前的key是否存在
move key //移除当前的Key
expire key 10 //设置key的过期时间
ttl key //查看当前key的剩余时间
type key //查看当前key的类型


Redis 是单线程的,将所有的数据全部放在内存中,所以说使用单线程去操作效率是最高的,多线程的话会造成CPU的上下文切换,对于内存来说没有上下文切换效率就是最高的。

Redis 的五大数据类型

1.String(字符串)

set key //设置值
get key //获取值
append key "ddd" //追加字符
getrange key 0 3 //截取字符串[0,3]
setrange key 2 xxx //替换指定位置开始的字符串
setex key 30 "hello" //设置key过期时间
setnx (set if not exist)//不存在在设置
mset k1 v1 k2 v2 //设置多个值
mget k1 k2 //获取多个值
mssetnx k1 v2 k4 v4 //是一个原子操作,要么成功,要么失败

2.List

list 可以当做栈、队列、阻塞队列

lpush list xxx  //将一个值插入列表头部
rpush list xxx //将一个值插入列表尾部
lrange list 0 -1 //取出所有的值
lrange list 0 1 //通过区间获取值
lpop list //从左边移除第一个元素
rpop list //从右边移除最后一个元素
lindex list 1 //获取第二个值
llen list //获取列表的长度
lrem list 1 one //移除list指定个数的值
ltrim list 1 2 //通过下标截取指定长度
rpoplpush list(原来的列表) mylist(新列表) //移除最后一个元素并添加到新的列表
exists list //判断列表是否存在
lset list 0 item //根据索引更新数据
linsert list before "xxx" "value"//在xxx前面插入value
linsert list after "xxx" "value"//在xxx后面插入value

3.Set

sadd set "xxxx" //set集合中添加元素
smembers  set hello  //获取集中所有元素
sismembers  set hello  //判断一个值是不是在set集合中
scard set //获取set集合中元素的个数
srem set hello //移除set中的元素
spop  set //随机移除set 中的元素
smove set(原集合) set1(新集合) hello //移动指定元素到另一个集合中
sdiff key key2 //两个集合的差集
sinter key key2 //交集
sunion key key2 //并集

4.Hash

hset hash filed hello //给hash 里面添加一个具体的值 
hget hash filed  //获取hash 里面的值
hset hash filed hello filed2 hello2//添加多个值
hgetall hash //获取hash里面的所有值
hdel hash filed //删除指定的key 对应的值
hlen hash //获取hash 的长度
hexists hash filed//判断hash 中的值是否存在
hkeys hash //获取所有的Key
hcals hash //获取所有的值

5.Zset(有序集合)

zadd set 1 one //添加一个值
zadd set 1 one 2 two //添加多个值
zrange set 0 -1 //获取所有的值
zrangbyscore  salary -inf +inf //排序从最小值到最大值排序
zrangbyscore  salary -inf +inf withscores//排序从最小值到最大值排序 带成绩的
zrem salary xiaoming //移除指定元素
zcard salary //获取集合个数

Redis事务的概念:

Redis 事务的本质是一组命令的集合。事务支持一次执行多个命令,一个事务中所有命令都会被序列化。在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会插入到事务执行命令序列中。

总结说:redis事务就是一次性、顺序性、排他性的执行一个队列中的一系列命令。

Redis事务没有隔离级别的概念:

批量操作在发送 EXEC 命令前被放入队列缓存,并不会被实际执行,也就不存在事务内的查询要看到事务里的更新,事务外查询不能看到。
Redis不保证原子性:

Redis中,单条命令是原子性执行的,但事务不保证原子性,且没有回滚。事务中任意命令执行失败,其余的命令仍会被执行。

Redis事务的三个阶段:

  • 开始事务
  • 命令入队
  • 执行事务

Redis事务相关命令:

watch key1 key2 … : 监视一或多个key,如果在事务执行之前,被监视的key被其他命令改动,则事务被打断 ( 类似乐观锁 )

multi : 标记一个事务块的开始( queued )

exec : 执行所有事务块的命令 ( 一旦执行exec后,之前加的监控锁都会被取消掉 )

discard : 取消事务,放弃事务块中的所有命令

unwatch : 取消watch对所有key的监控

Redis主从复制

主从复制数据复制是单向的只能由主节点到从节点。

主从复制的作用:
  1. 数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。

  2. 故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。

  3. 负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。

  4. 读写分离:可以用于实现读写分离,主库写、从库读,读写分离不仅可以提高服务器的负载能力,同时可根据需求的变化,改变从库的数量;

  5. 高可用基石:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。

    redis 集群搭建
    方法一(使用命令是暂时的)
    info replication //产看当前redis的信息
    修改 redis.conf、port(端口)pid(后台进程文件)、 logfile(日志)、dump.rdb  
    默认情况redis都是主节点,一般情况只配置丛机就可以了
    slaveof ip 端口 //配置从节点
    方法二(修改配置文件是永久的)
    redis.config  
    replicaof  ip(主节点ip) port(主节点端口)
    masterauth 密码 //主机有密码则添加密码
    
    主从复制复制原理

    1.增量复制:主节点继续将新收集到的修改命令,将其存盘并加载到内存中

    2.全量复制:从节点接收到主节点的整个数据文件,完成一次同步

    宕机后手动配置主机
    slaveof no one // 如果主机断开了连接,让自己变为主节点,如果主机恢复需要重新配置
    
    哨兵模式(Sentinel)

    哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。

    img

哨兵的作用

1.通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服务器。

2.当哨兵监测到master宕机,会自动将slave切换成master,然后通过发布订阅模式通知其他的从服务器,修改配置文件,让它们切换主机。

sentinel.conf

port  26379 //端口
dir /tmp //工作目录
 
sentinel moitor myredis(主机名称) ip 端口  1(主机宕机,丛机投票)//配置哨兵
redis-sentinel sentinel.conf //启动哨兵
//如果主机恢复,只能归并到新主机下,成为丛机。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值