Redis浅谈

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_38334410/article/details/79160441

1.Redis介绍

Reis是一个开源(BSD许可)的,内存中的数据结构存储系统,他可以用作数据库,缓存和消息中间件.
它支持多种类型的数据结构,如字符串(String),散列(hashes),列表(lists), 集合(sets),有序集合(sorted sets)与范围查询,bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。

2.Redis特点

  • Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
  • Redis不仅仅支持简单的key-value类型的数据类型,同时还提供list,set,zset,hash等数据结构的存储。
  • Redis支持数据的备份,即master-slave模式的数据备份
    • Key-Value、Cache、Persistence。

3.Redis能干什么 ?

  1. 内存储存和持久化:redis支持一步将内存中的数据写到硬盘上,同时不影响继续服务
  2. 取最新N个数据的操作,如:可以将最新的10条评论的ID放在Redis的List集合里面。
  3. 模拟类似于HttpSession这种需要设定过期时间的功能
  4. 发布、订阅消息系统。
  5. 定时器、计数器。

4.Redis安装与启动

安装:
- 解压; tar -zxvf redis的压缩包
- cd redis目录
- make
- make PREFIX=/root/training/redis install (这步会把redis安装到root/training/redis的目录下)

redis的核心文件:redis.conf,后面介绍
在执行完安装后,会生成可执行文件:
- redis-benchmark : Redis提供的一个压力测试工具
- redis-check-aof : Redis提供的一个检查AOF的日志工具
- redis-check-dump: Redis提供的检查RDB文件的工具
- redis-cli: 客户端
- redis-sentinel: Redis的哨兵, 实现Redis HA(Redis版本必须是 >= 2.4)
- redis-server: 服务端
启动:
将默认的redis.conf拷贝到自己定义好的一个路径下,比如/myconf。
用vi redis.conf ,将里面:
daemonize no : Redis是否以后台方式启动,改成yes
启动是: Redis-server /myconf/redis.conf
连通测试: Redis-cli (默认端口:6379,在改变了端口时,要Redis-cli -p 端口号)
连接后的形式:

127.0.0.1:6379> 

5.Redis操作

基础知识:
默认16个数据库,类似数组下表从零开始,初始默认使用零号库.
select: 命令切换数据库
dbsize: 查看当前数据库的key数量
flushdb: 清空当前库
flushall:通杀全部库
统一密码管理:16个数据库都是同样密码,要嘛全部连接上,要嘛全不连接不上.

6.Redis的五大数据类型

String:
string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。
string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。
string类型是Redis最基本的数据类型,一个redis中字符串value最多可以是512M

Hash(哈希):
Redis Hash是一个键值对集合。
Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
类似Java里面的Map

举例:
set key1 "hello world"
get key1
apped key1 "****"
get key1
----------
mset: 设置多个key-value
      mset key2 "abcd" key3 "xyz"
mget: 获取多个值
      mget key2 key3
incr, decr 自增和自减
      set key4 10
      incr key 4
      decr key4

2.Redis列表(list)
- index: 按照索引下标获得元素(从上倒下)
- lrem key 删除N个value
- ltrim key 开始index 结束index, 截取指定范围的值后再赋值给key
- rpoplpush 源列表 目的列表
- linsert key before/after 值 1 值 2

举例:
lpus lrange lpop  ---->左:链表的头部
    lpush list1 11 22 33 44 55
    lrange list1 0 2
    lrange list 0 -1 表示列出所有的元素
    lpop list1 从链表的头部取出一个值
rpush rpop ----> 右: 链表的尾部
    rpush list2 11 22 33 44 55
    rpop list2

3.哈希表

举例:
hset hget
    hset hashkey1 name Curry
    hset hashkey2 age 10
hmset hmget: 保存用户信息
    hmset user001 name Curry age 10 gender male
    hmset user002 name wangwu age 20 gender male
    hmget user001 name age gender
hgetall: 获取所有的信息
    hgetall user001

4.无序集合
- scard 获取集合里面的元素个数
- srem key value 删除集合中元素
- strandmember key 某个整数(随机出几个数)
- spop key 随机出栈
- smove key1 key2 在key1里某个值 作用是将key1里的某个值赋给key2

无序,不可重复的集合
sadd smembers
    sadd setkey1 11 22 33 44 55
    sadd setkey2 33 44 55 66 77 88
    smembers 列出集合中的成员:
    smembers setkey1
sdiif sinter sunion
    sdiif 差集
    sinter 交集
    sunion 并集

5.有序集合
- zrangebyscore key 开始score 结束score
- zrem key 某score下对应的value值,作用是删除元素
- zcard/zcount key score 区间、zrank key value 值,作用是获得下标值
- zscore key 对应值,获得分数
- zrevrank key value 值, 作用是逆序获得下标值
- zrevrangebyscore key 结束score 开始score

有序集合可以重复的集合, 根据一个score来进行排序
zadd zrange zrangebyscore
    zadd key score1 member1 score2 member2
    zadd chinese 90 Tom 92 Mary 82 Mike
    zrange chinese 0 100
    zrange chinese 0 100 withscores
zrevrange zrevrangebyscore
    zrevrange chinese 0 100
    zrevrangebyscore chinese 0 100 withscores

7. Redis 的持久化

  1. Redis.conf配置文件的介绍
    1.1 参数说明
    RDB:默认快照, 持久化方式每隔一段时间,自动把数据生成内存的Dump文件
    daemonize no: Redis 默认不是守护进程的方式运行, 可以通过该配置项修改, 使用Yes启用守护进程
    port 6379: 指定Redis监听端口,默认端口为6379,作者在自己的一篇博文中解释了为什么选用6379作为默认端口,因为6379在手机按键上MERZ对应的号码,而MERZ取自意大利歌女Alessia Merz的名字
    bind 127.0.0.1 : 绑定主机的名字
    timeout 300 : 当客户端闲置多长时间后关闭连接,如果指定为0 ,表示关闭该功能
    databases 16 : 设置数据库的数量,默认数据库为0,可以使用SELECT 命令在连接上指定数据库id
    指定在多长时间内,有多少次更新,操作,就将数据同步到数据文件,可以多少个条件配合
save<seconds><changes>

Redis默认配置文件中提供三个条件:
save 900 1 在15分钟内,有1的value发生变化,就执行RDB
save 300 10 在5分钟内,有10的value发生变化,就执行RDB
save 60 10000 在5分钟内,有10000的value发生变化,就执行RDB
rdbcompression yes :指定存储至本地数据库时是否压缩数据,默认yes,Redis采用LZF压缩,若果节省CPU,可以关闭该选项,但会导致数据库文件变的很大.
dbfilename dump.rdb: RDB的文件名: 默认是dump.rdb
dir./:指定本地数据库存放目录
AOF: 持久化方式了记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据
appendonly no: 默认是no(禁用),指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为 redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。
更新日志的条件:
appendfsync always 每隔操作都记录日志
appendfsync everysec (默认,慢,安全) 没秒操作都操作
appendfsync no 表示操作系统会进行数据缓存同步到磁盘中(快)
no-appendfsync-on-rewrite yes 生成rdb的时候,是否不写入aof
auto-AOF-rewrite-min-size 64mb aof发生重写的最小文件的大小
auto-AOF-rewrite-percentage 100 aof文件比上次重写时,超过的百分比

RDB与AOF总结:
RDB持久化能够在指定的时间间隔对数据进行快照存储.AOF持久化的方式记录每次对服务器写的操作,当服务器重启的时候回重新执行这些命令.来恢复原始数据,AOF命令redis的协议追加保存每次写的操作到文件的末尾.RDB还能对AOF文件进行后台重写,是的AOF文件的体积不至于过大.
只做缓存:如果你希望你的数据在服务器运行的时候存在,你也可以不使用任何持久化方式
同时开启二中方式:
在这种情况下,当redis重启的时候会优先载入AOF文件来恢复原始数据,因为通常情况下AOF文件保存的数据要比RDB文件保存到 数据更完整.
RDD的数据不实时,同时使用两者时服务器重启也只会找到AOF文件.
在运用中,最好不要只用AOF,因为RDB更适用于备份数据库(AOF不断变化不好备份),快速重启,AOF存在bug.
8. Redis 事物
1.Redis事物实际上不是真正的事物,而是一组操作,放入一组队列中,一起执行.
2.Redis 事物命令:
discard :取消事物(回滚事物)
exec: 执行所有事物(提交事物)
multi: 标记一个事物块的开始(事物开启)
watch: 监视一个或多个key
9. Redis的消息日志
消息的类型: Queue: 队列 (点对点)
Topic: 主题 (广播)
消息的发布与订阅,适合做在聊天
public: 发布消息
格式: publish channel 名称 “消息内容”
subscribe: 订阅消息
格式: subscribe channel 名称
psubscribe: 使用统配符定义消息
格式: psubscribe channel * 名称

10. Redis 集群
作用:
- 主从备份,防止主句宕机
- 读写分离,分担master的任务
- 任务分离,如从服分别分担备份工作与计算工作

1.主从结构: 读写分离
2.主节点: 写数据
从节点: 读数据
3.集群的架构: 2钟
(*) 星型模型
读写分离:从主节点写入数据,从节点读取数据
任务分离:主节点不负责产生rdb和aof,从节点负责产生rdb和aof
(*) 先行模型
11. Redis的HA(哨兵机制)
主从结构:存在单点故障的问题
Redis的HA:版本Redis2.4+,实现了HA的机制:哨兵Sentinel

sentinel monitor mymaster 192.168.157.112 6379 1
别名 主节点IP 端口 启动几个哨兵

sentinel auth-pass
配置连接主节点密码

sentinel down-after-milliseconds mymaster 30000
表示多少秒内,哨兵没有收到主节点的心跳,就认为主节点死掉,就进行切换

sentinel parallel-syncs mymaster 1
选出新的主节点后,同时允许多少个从节点连接,这个值一定不能太大

sentinel failover-timeout mymaster 180000
失败切换的时候,最大允许时间

12. Redis的代理分片
- Twemproxy 是一种代理分片机制,由 Twitter 开源。
- Twemproxy 作为代理,可接受来自多个程序的访问,按照路由规
则,转发给后台的各个 Redis 服务器,再原路返回。该方案很好
的解决了单个 Redis 实例承载能力的问题。

阅读更多

没有更多推荐了,返回首页