Redis学习

造就Redis高性能的三个因素

1、纯内存访问,Redis将所有数据放在内存中,内存的响应时间大约为100纳秒,这是Redis达到每秒万级别访问的重要基础;

2、非阻塞I/O,Redis使用epoll作为I/O多路复用技术的实现,在加上Redis自身的事件处理模型将epoll中的链接、读写、关闭都转换为事件,不在网络I/O上浪费过多的时间;

3、单线程避免了线程切换和竞态产生的消耗。

redis数据结构

redis是key-value的数据结构,每条数据都是⼀个键值对

键:类型是字符串,键不能重复

值:类型分为五种:字符串string、哈希hash、列表list、集合set、有序集合zset

Redis持久化是什么?Redis有哪几种持久化方式?优缺点是什么?

持久化就是把内存的数据写到磁盘中去,防止服务宕机了内存数据丢失。

Redis 提供了两种持久化方式:RDB(默认) 和AOF

比较:

1、aof文件比rdb更新频率高,优先使用aof还原数据。

2、aof比rdb更安全也更大

3、rdb性能比aof好

4、如果两个都配了优先加载AOF

主从

master用来写数据,slave用来读数据,经统计:网站的读写比率是10:1

通过主从配置可以实现:读写分离,负载均衡,数据备份,降低服务器压力,提升速度

配置主:可写可读

配置从:只可读

集群

一主可以多从,如果同时的访问量过大(1000w)或自然灾害,主服务肯定就会挂掉,极其危险。因而,大公司都会有很多的服务器(华东地区、华南地区、、)

搭建集群至少要3台主机,3台从

哨兵模式,秒开技术

redis cluster要点

1、redis cluster特点:去中心化、去中间件,集群中的每个节点(node)都是平等的关系,每个节点都保存各⾃的数据和整个集群的状态。每个节点都和其他所有节点连接,而且这些连接保持活跃,这样就保证了我们只需要连接集群中的任意⼀个节点,就可以获取到其他节点的数据。

2、redis cluster 数据分配:采用哈希槽 (hash slot)分配数据,redis cluster 默认有16384 个slot,通过CRC16算法计算数据所属slot,具体算法就是:CRC16(key) % 16384

3、主从:Redis 集群会把数据存在⼀个 master 节点,然后在这个 master 和其对应的salve 之间进⾏数据同步。当读取数据时,也根据⼀致性哈希算法到对应的 master 节点获取数据。只有当⼀个master 挂掉之后,才会启动⼀个对应的 salve节点,充当master。

注:必须要3个或以上的主节点,否则在创建集群时会失败,并且当存活的主节点数⼩于总节点数的⼀半时,整个集群就⽆法提供服务了

Redis常用方法
string
命令 解释
get key 获取key的值
set key v 设置key的值
del key 删除key(应用于所有类型)
incr key 将储存的值加上1
decr key 将储存的值减去1
incrby key amout 加上整数amount
decrby key amout 减去整数amount
incrbybyfloat key amout 加上浮点数amount字符串二进制
append key v 将值追加到key当前储存值的末尾
getrange key start end 获取下标start到end的字符串
setrange key offset v 将字符串看做二进制位串,并将位串中偏移量为offset的二进制位的值
getbit key offset 将字符串看做是二进制位串值为1的二进制位的数量,如果给定了可选的start偏移量和end偏移量,那么只对偏移量指定范围的二进制位进行统计
bitop operation dest-key key-name [key-name …] 对一个或多个二进制位串进行 并and,或 or,异或XOR,非NOT 在内的任意一种安位运算符操作(bitwise operation),并将计算的结果放到dest -key里面
list
命令 解释
rpush key [v…] 将一个或多个加入列表右端
lpush key [v…] 将一个或多个加入列表左端
rpop key 移除并返回最右端的元素
lpop key 移除并返回列表最左端的元素
lindex key size 返回下标(偏移量)为size的元素
lrange key start end 返回从start 到end的元素 包含start和end
ltrim key start end 只保留从start 到end的元素 包含start和end
hash
命令 解释
hmget hkey key… 获取多个值
hmset hkey key v… 为多个key设置值
hdel hkey key… 删除多个值并返回
hlen hkey 返回总数量
hexists hkey key 检查key是否存在在散列中
hkeys hkey 获取散列中所有key
hvals hkey 获取三列中所有值
hgetall hkey 获取散列
hincrby hkey key increment 为key的值上加上整数increment
hincrbyfloat hkey key increment 为key的值上加上浮点数increment
set
命令 解释
sadd key item … 添加多个,返回新添加的个数(已存在的不算)
srem key item… 从集合移除多个元素 ,返回被移除元素的数量
sismember key item 检查元素item是否在集合中
scard key 返回集合总数
smembers key 返回所有元素
srandmember key cout 随机返回cout个元素 cout为正整数 随机元素不重复 相反可能会出现重复
spop key 随机的移除一个元素 并返回已删除的元素
smove key1 key2 item 如果key1中包含item 移除key1中的item 添加到key2中,成功返回1 失败返回0
差运算 sdiffstore newkey key key1… 将存在于key集合但是不存在key1…集合的其他元素 放到newkey里面(咬掉一口剩下的)
交运算 sinter key… 返回所有集合的交集(返回我们都有的的)
交运算 sinterstore newkey key… 返回多个集合的交集生成集合newkey
并运算 sunion key… (返回我们不重复的所有元素 )
并运算 sunion newkey key… 结果放到newkey中
zset
命令 解释
zadd key score member … 添加多个
zerm key memer… 移除多个
zcard key 返回所有成员
zincrby key incremnet member 将member成员的分值加上increment
zcount key min max 返回分值在 min和max中间的排名
zrank key member 返回成员member在集合中的排名
zscore key member 返回member的分值
zrange key start stop 返回 介于两者之间的成员

 

posted @ 2021-02-04 22:48  涛子17180  阅读(48)  评论(0编辑  收藏  举报