初步了解Redis

初步了解Redis

1.概念

Redis是用C语言开发的一个开源的高性能的键值对(key-value)数据库. 数据保存在内存. 是一种非关系型(NoSql)数据库.

2.Redis的应用场景

  • 缓存 (数据查询、短连接、新闻内容、商品内容等)
  • 任务队列 (秒杀、抢购、12306等)
  • 数据过期处理 (短信验证码)
  • 分布式集群架构中的session分离, session服务器里面
  • 应用排行榜
  • 网站访问统计

3.Redis的数据类型

redis中存储的数据是以key-value的形式存在的. 其中value支持5种数据. 在日常开发中使用比较多的有字符串(String)、哈希(hash)、字符串列表(list)、字符串集合(set)4种类型, 其中最为常见的是字符串类型.
1.字符串(String)
2.哈希(hash)
3.字符串列表(list)
4.字符串集合(set)
5.有序的字符串集合(sorted-set或者叫zset)

3.1存储字符串

一个key对应一个value, 一个键最大能存储512MB

常用命令:

命令描述
set key value设置指定 key 的值
get key获取指定 key 的值
del key删除key

例如:存储键为name 值为zs

redis:0>set name zs
"OK"
redis:0>
3.2 存储hash

redis中hash是一个键值对集合, 是一个String类型的field和value的映射表,适合用于存储对象. redis存储hash可以看成是String key 和String value的map容器. 也就是说把值看成map集合.

常用命令:

命令命令描述
hset key filed value将哈希表 key 中的字段 field 的值设为 value
hmset key field1 value1 [field2 value2]…同时将多个 field-value (字段-值)对设置到哈希表 key 中
hget key filed获取存储在哈希表中指定字段的值
hmget key filed1 filed2获取多个给定字段的值
hdel key filed1 [filed2]删除一个或多个哈希表字段
hlen key获取哈希表中字段的数量
del key删除整个hash(对象)

例如: 存储field为f1,value为v1

redis:1>hmset u1 f1 v1
"OK"
3.3 存储list

redis列表按照插入顺序排序,为有序列表. 你可以添加一个元素导列表的头部(左边)或者尾部(右边)

一个列表最多可以包含 2的32 次方- 1 个元素 (4294967295, 每个列表超过40亿个元素)。

  • ArrayList
  • 单向链表

  • 双向链表

常用命令:

命令命令描述
lpush key value1 value2…将一个或多个值插入到列表头部(左边)
rpush key value1 value2…在列表中添加一个或多个值(右边)
lpop key左边弹出一个 相当于移除第一个
rpop key右边弹出一个 相当于移除最后一个
llen key返回指定key所对应的list中元素个数

例如: 按大小顺序存储1~10的数字

redis:0>rpush list1 1 2 3 4 5 6 7 8 9 10
"10"
3.4 存储set

redis的Set是String类型的无序集合. 集合元素唯一.

常用命令:

命令命令描述
sadd key member1 [member2]向集合添加一个或多个成员
srem key member1 [member2]移除一个成员或者多个成员
smembers key返回集合中的所有成员,查看所有

应用场景: 投票,差集计算

4. Redis的通用操作和持久化

4.1 通用操作
  • keys * : 查询所有的key
  • exists key : 判断是否有指定的key 若有返回1,否则返回0
  • expire key : 设置这个key在缓存中存活时间
  • ttl key : 展示指定key的剩余时间 若返回-1: 永不过期 若返回-2: 已过期或者不存在
  • del key : 删除指定key
  • rename key : 重命名
  • type key : 判断一个key的类型
  • ping : 测试连接是否连接
4.2 多数据库性

redis默认是16个数据库, 编号是从0~15. 【默认是0号库】

  • select index:切换库
  • move key index: 把key移动到几号库(index是库的编号)
  • flushdb:清空当前数据库
  • flushall:清空当前实例下所有的数据库
4.3 Redis的持久化

redis的高性能是由于其将所有数据都存储在了内存中,为了redis在重启之后仍能保证数据不丢失,需要将数据从内存同步到硬盘中,这一过程就是持久化. redis支持两种方式的持久化,一种是RDB方式,一种是AOF方式. 这两种可以单独使用或者结合使用.

4.3.1 RDB持久化机制

RDB持久化是指在指定时间间隔内将内存中的数据集快照写入硬盘中. 这种方式是将内存中的数据以快照的方式写入到二进制文件中, 默认文件名为dump.rdb 这种方式默认开启,不需要配置.

在redis.Windows.conf配置文件中有如下配置:

其中.上面配置的是RDB方式数据持久化时机:

关键字时间(秒)key修改数量解释
save9001每900秒(15分钟)至少有1个key发生变化,则dump内存快照
save30010每300秒(5分钟)至少有10个key发生变化,则dump内存快照
save6010000每60秒(1分钟)至少有10000个key发生变化,则dump内存快照
4.3.2 AOF持久化配置

AOF持久化机制会将每一个收到的写命令都通过write函数追加到文件中,默认的文件名是appendonly.aof 这种方式默认未开启,使用时需要配置.

在redis.windows.conf配置文件中有如下配置:

将appendonly修改为yes, 但是启动redis的时候需要指定该文件,也就是意味着不能直接点击了, 需要输入命令启动:

开启aof持久化机制后,默认会在目录下产生一个appendonly.aof文件

上述配置为aof持久化的时机,解释如下:(在redis.windows.conf配置)

关键字持久化时机解释
appendfsyncalways每执行一次更新命令,持久化一次
appendfsynceverysec每秒钟持久化一次
appendfsyncno不持久化
4.3.3 RDB与AOF优缺点比较

RDB:

优点:

  • RDB 是一个非常紧凑(compact)的文件,它保存了 Redis 在某个时间点上的数据集。 这种文件非常适合用于进行备份
  • RDB 在恢复大数据集时的速度比 AOF 的恢复速度要快(因为其文件要比AOF的小)
  • RDB的性能要比AOF更好

缺点:

  • RDB的持久化不够及时,可能会存在数据丢失
  • RDB持久化时如果文件过大可能会造成服务器的阻塞,停止客户端请求

AOF:

优点:

  • AOF的持久性更加的耐久(可以每秒 或 每次操作保存一次)
  • AOF 文件有序地保存了对数据库执行的所有写入操作, 这些写入操作以 Redis 协议的格式保存, 因此 AOF 文件的内容非常容易被人读懂, 对文件进行分析(parse)也很轻松
  • AOF是增量操作

缺点:

  • 对于相同的数据集来说,AOF 文件的体积通常要大于 RDB 文件的体积

AOF:

优点:

  • AOF的持久性更加的耐久(可以每秒 或 每次操作保存一次)
  • AOF 文件有序地保存了对数据库执行的所有写入操作, 这些写入操作以 Redis 协议的格式保存, 因此 AOF 文件的内容非常容易被人读懂, 对文件进行分析(parse)也很轻松
  • AOF是增量操作

缺点:

  • 对于相同的数据集来说,AOF 文件的体积通常要大于 RDB 文件的体积
  • AOF 的速度可能会慢于 RDB
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值