Redis(二)之数据类型、常用命令以及持久化

数据类型(重点)

这里写图片描述
Key的取值:自定义,key名不要过长,否则影响使用效率;Key不要太短,最好是有意义。


Redis命令

String命令(重点)

字符串类型是Redis中最为基础、常用的数据存储类型,字符串在Redis中是二进制安全的,这便意味着该类型存入和获取的数据相同。在Redis中字符串类型的Value最多可以容纳的数据长度是512MB。

二进制安全和数据安全是没有关系的。
MySQL-关系型数据库,二进制不安全。【乱码丢失数据】
这里写图片描述
这里写图片描述

常用命令

命令功能
set key value设定key持有指定的字符串value,如果该key存在则进行覆盖操作。总是返回”OK”
如果赋予相同的key,新的value会覆盖老的value
get key获取key的value。如果与该key关联的value不是String类型,redis将返回错误信息,
因为get命令只能用于获取String value;如果该key不存在,返回(nil)。
del key删除指定key
返回值是数字类型,表示删了几条数据
getset key value先获取该key的值,然后再设置该key的值。
incr key将指定的key的value原子性的递增1。如果该key不存在,其初始值为0,在incr之后其值为1。
如果value的值不能转成整型,如hello,该操作将执行失败并返回相应的错误信息。相当于 ++i
decr key将指定的key的value原子性的递减1。如果该key不存在,其初始值为0,在incr之后其值为-1。
如果value的值不能转成整型,如hello,该操作将执行失败并返回相应的错误信息。相当于 - -i
append key value拼凑字符串。如果该key存在,则在原有的value后追加该值;
如果该key不存在,则重新创建一个key/value

String使用场景:主要用于保存json格式的字符串


Hash命令(重点)

Redis中的Hash类型可以看成具有String Key和String Value的map容器。所以该类型非常适合于存储值对象的信息。如Username、Password和Age等。如果Hash中包含很少的字段,那么该类型的数据也将仅占用很少的磁盘空间。每一个Hash可以存储4294967295个键值对。

Hash<------>{username:"张三",age:"18",sex:"man"}<------>javaBean

Hash特点:占用的磁盘空间极少

命令功能
hset key field value为指定的key设定field/value对(键值对)。
hget key field获取哈希表 key 中给定域 field 的值。
hmset key field value [field2 value2 …]设置key中的多个filed/value
hmget key filed1 filed2 …获取key中的多个filed的值
hgetall key获取key中的所有filed-vaule
del key删除整个hash
hkeys key获得所有的字段
hvals key获得所有的value
keys *查询所有的key

list命令(重点)

特点:有序、可重复(双向链表)

命令功能
lpush key values[value1 value2…]在指定的key所关联的list的头部插入所有的values,
如果该key不存在,该命令在插入的之前创建一个与该key关联的空链表,
之后再向该链表的头部插入数据。插入成功,返回元素的个数。
rpush key values[value1、value2…]在该list的尾部添加元素。
lrange key start end获取链表中从start到end的元素的值,start、end从0开始计数;
也可为负数,若为-1则表示链表尾部的元素,-2则表示倒数第二个,依次类推…
lrange key 0 -1:查询该list的所有元素
lpop key返回并弹出指定的key关联的链表中的第一个元素,即头部元素。
如果该key不存在,返回nil;若key存在,则返回链表的头部元素。
rpop key从尾部弹出元素。
llen key返回指定的key关联的链表中的元素的数量。
rpoplpush resource destination将链表中的尾部元素弹出并添加到头部。[循环操作]

使用场景:

  • 微博 TimeLine
  • 消息队列

set命令(重点)

特点:无序、不重复

命令功能
sadd key values[value1、value2…]向set中添加数据,如果该key的值已有则不会重复添加
smembers key获取set中所有的成员
sismember key member判断参数中指定的成员是否在该set中,
1表示存在,0表示不存在或者该key本身就不存在。
srem key members[member1、member2…]删除set中指定的成员
sdiff key1 key2…返回key1与key2中相差的成员,而且与key的顺序有关。即返回差集。
(属于A并且不属于B的元素构成的集合)
sinter key1 key2 key3…返回交集。(属于A且属于B的元素构成的集合)
sunion key1 key2 key3…返回并集。(属于A或者属于B的元素构成的集合)
scard key获取set中成员的数量
srandmember key随机返回set中的一个成员

使用场景:大数据集合的并集,交集,差集运算。

  • 共同好友、二度好友
  • 利用唯一性,可以统计访问网站的所有独立 IP
  • 好友推荐的时候,根据 tag 求交集,大于某个 threshold 就可以推荐

zset命令(了解)

特点:有序、不重复

  1. 有序集合用于存储键值对;
  2. 有序集合的键被称为成员member,每一个成员都是独一无二的;
  3. 有序集合的值被称为分值score,分值必须是浮点数。
命令功能
zadd key score member score2 member2 …将所有成员以及该成员的分数存放到sorted-set中。
如果该元素已经存在则会用新的分数替换原有的分数。
返回值是新加入到集合中的元素个数,不包含之前已经存在的元素。
zscore key member返回指定成员的分数
zrange key start end [withscores]获取集合中脚标为start-end的成员,[withscores]返回的成员包含其分数。
(分数由小到大排列)
zrevrange key start end [withscores]获取集合中脚标为start-end的成员,[withscores]返回的成员包含其分数。
(分数由大到小排列)
zrem key member[member…]移除集合中指定的成员,可以指定多个成员。

使用场景:排行榜


Redis通用命令(重点)

keys pattern:获取所有与pattern匹配的key,返回所有与该key匹配的keys。
通配符:

  • *表示任意0个或多个任意字符
  • ?表示任意一个字符
命令功能
keys *查询所有的key
keys ????查询4个字符的key
del key1 key2…删除指定的key
exists key判断该key是否存在,1代表存在,0代表不存在
type key获取指定key的值类型。该命令将以字符串的格式返回。
返回的字符串为string、list、set、hash和zset,如果key不存在返回none。

设置key有效/过期

命令功能
expire key设置key的生存时间,单位:秒。如果某个key过期,redis会将其删除
ttl key获取该key所剩的超时时间,如果没有设置超时,返回-1。如果返回-2表示超时不存在。

例如:用户激活。
激活邮件,激活短信。30分钟内


扩展知识(了解)

消息订阅与发布

订阅新闻,新闻发布

命令功能
subscribe channel订阅频道,例:subscribe mychat,订阅mychat这个频道
psubscribe channel*批量订阅频道,例:psubscribe s*,订阅以”s”开头的频道
publish channel content在指定的频道中发布消息,如 publish mychat “today is a newday”

例如:登录QQ时,电脑右下角有时会发来小窗口,这是Redis发送过来一段html代码,然后解析而成的窗口

多数据库

MySQL数据库可以自己用语句自定义创建
create database xxxx;

Redis也是有数据库的。 Redis已经提前创建好了。
Redis默认有16个数据库。0,1,2…….15

在Redis上所做的所有数据操作,都是默认在0号数据库上操作
数据库和数据库之间,不能共享键值对。

命令功能
select 数据库名;切换数据库
move key 1将当前库的key移植到1号库中
flushdb清空当前数据库
flushall清空Redis服务器数据

Redis事务

MySQL事务:目的为了保证数据完整性,安全。

Redis事务:目的为了进行redis语句的批量化执行。

命令功能
multi开启事务用于标记事务的开始,其后执行的命令都将被存入命令队列,
直到执行EXEC时,这些命令才会被原子的执行,类似与关系型数据库中的:begin transaction
exec提交事务(执行批量化),类似与关系型数据库中的:commit
discard事务回滚(不执行批量化操作),类似与关系型数据库中的:rollback

服务器命令

  • ping:测试连接是否存活,返回PONG则代表存活
  • quit:退出客户端
  • dbsize:返回当前数据库中key 的数目
  • info:查看redis数据

Redis持久化

内存(兔子):高效、断电数据就会消失
硬盘(乌龟):读写速度慢于内存的,断电数据依旧存在

持久化:把数据保存在硬盘上

关系型数据库MySQL持久化:

  • 任何增删改语句,都是在硬盘上做的操作。
  • 断电以后,硬盘上的数据还是存在。

非关系型数据库Redis:

  • 默认情况下,所有的增删改,数据都是在内存中进行操作。
  • 断电以后,内存中的数据不存在的。

断电以后,redis的部分数据会丢失,丢失的数据是保存在内存中的数据。

Redis存在持久化操作。

Redis有两种持久化策略:

RDB:是redis的默认持久化机制。

RDB相当于照快照。保存的是一种状态。

20G数据 —> 几kb快照

    优点:1、快照保存数据速度极快,还原数据速度极快
         2、适用于灾难备份

    缺点:1、小内存机器不适合使用。
         RDB机制符合要求就会照快照。(随时随地启动),会占用一部分系统资源(突然的),很可能因为内存不足直接宕机。(宕机后,服务器会关闭,非正常关闭,导致丢失数据)
              服务器正常关闭时 照快照
              Key满足一定条件,照快照

    适用于:内存比较充裕的计算机。

RDB何时进行照快照:

  1. 服务器正常关闭时,会照一次快照 ./bin/redis-cli shutdown
  2. key满足一定条件,会照一次快照

redis.config

save 900 1 #每900秒(15分钟)至少有1个key发生变化,则dump内存快照。
save 300 10 #每300秒(5分钟)至少有10个key发生变化,则dump内存快照
save 60 10000 #每60秒(1分钟)至少有10000个key发生变化,则dump内存快照
    key发生变化(key数据添加、修改、删除)
    例如1:12:00 – 12:15  ,有1个key发生变化,在12:15就照一次快照保存
        12:00 – 12:15  ,没有任何key发生变化,在12:15不会照快照

    例如2:12:00 – 12:05  ,有11个key发生变化,12:05就照一次快照保存
        12:00 – 12:05  ,有9个key发生变化,12:05不会照快照,12:15 会照快照

    例如3:  12:00 – 12:01  ,有15000个key发生变化,12:01就照一次快照保存
        12:00 – 12:01  ,有1000个key发生变化,12:01不会照快照,12:05会照快照
AOF: 使用日志功能保存数据操作。

AOF保存对key的增删改操作语句。

默认时AOF机制关闭的。

    优点:1、持续性占用极少量的内存资源
    缺点:1、日志文件会特别大,不适用于灾难恢复
         2、恢复效率远远低于RDB

    适用于:内存比较小的计算机

AOF操作:
只会保存导致key变化的语句

AOF配置:

  • always #每次有数据修改发生时都会写入AOF文件。比较安全,但是极为浪费效率
  • everysec #每秒钟同步一次,该策略为AOF的缺省策略。安全性低,比较节省系统资源
  • no #从不同步。高效但是数据不会被持久化。不安全

开启AOF机制:
redis.conf

appendonly yes

策略的选择:
redis.conf

# appendfsync always
appendfsync everysec
# appendfsync no
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
USB-IF高速;,经认证符合通用串行总线规范修订版 2.0 接口在 8 位模式下与 ULPI 规范修订版 1.1 兼容 工业标准 UTMI+ 低引脚接口 (ULPI) 可将 54 UTMI+ 信号转换为标准的 12 引脚链路控制器接口 54.7mA 未配置电流(典型情况)— 适用于总线供电的应用 83uA 挂起电流(典型情况)— 适用于电池供电的应用 闭锁性能超过 150 mA(每 EIA/JESD 78),Class II ESD 防护水平达 ±8kV HBM(在不使用外部保护设备的情况下) 集成了各种保护措施,在每个第三方的测试设备中均可耐受 IEC61000-4-2 ESD 测试(±8kV 接触电压和 ±15kV 空气电压) 支持用于附带 LS 设备的 FS 集线器的 FS 前导码 (UTMI+ Level 3) 支持 HS SOF 和 LS keep-alive 脉冲 包括对可选的 On-The-Go (OTG) 协议的全面支持,在 On-The-Go 附录修订版 1.0a 规范中有详细说明 支持 OTG 主机协商协议 (HNP) 和会话请求协议 (SRP) 允许主机关闭 VBUS,以便在 OTG 应用中节省电池电量 通过内部比较器支持 VBUS 电平的 OTG 监视。包括对外部 VBUS 或故障监视器的支持。 低潜伏高速接收器(最高为 43 高速时钟)允许使用带 ULPI 包装器的潜伏 UTMI 链路 用于接口保护的 STP 上的集成下拉电阻,允许在使用低速链路(针对低功率情况对软件进行了配置)的情况下,可靠地启动 Link/PHY 内置的 1.8V 调节器允许在使用单个 3.3V 电源的情况下工作 对 ID、DP 和 DM 线路到 VBUS 或接地进行内部短路保护 集成的 24MHz 晶振支持水晶操作或 24MHz 外部时钟输入 用于 480MHz 高速 USB 操作的内部 PLL 工业运行温度:-40°C 到 +85°C 符合 RoHS 的 32 引脚无铅 QFN 封装(5 x 5 毫米, 高度为 0.90 毫米)

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值