redis简易操作复习

目录


Nosql

Nosql即Not-OnlySQL(泛指非关系型数据库),作为关系型数据库的补充

特征

  • 可扩容,可伸缩
  • 大数据量下高性能
  • 灵活的数据类型
  • 高可用

常见Nosql数据库

  • Redis
  • memcache
  • HBase
  • MongDB

Redis入门

概念

Redis是用C语言开发的一个开源的高性能键值对数据库

特征

  • 数据见没有必然的关联方式
  • 内部采用单线程机制进行工作
  • 高性能
  • 多种数据类型支持
    • 字符串类型 String
    • 列表类型 list
    • 散列类型 hash
    • 集合类型 set
    • 有序集合类型 sorted_set
    • 持久化支持.可以进行数据灾难恢复

应用

  • 为热点数据加速查询
  • 任务队列
  • 即时信息查询
  • 时效性信息控制
  • 分布式数据功效
  • 消息队列
  • 分布式锁

基本操作

  • set [key] [value] 存
  • get [key] 取

Redis数据类型

业务数据特殊性

  • 作为缓存使用
    • 原始业务功能设计
    • 运营平台监控到的突发高频访问数据
    • 高频复杂的统计数据
  • 附加功能
    • 系统功能优化或升级

String

redis数据存储格式

  • redis自身是一个Map,期中所有的数据都是采用key:value的形式存储
  • 数据类型值得是存储的数据的类型,也就是value部分的类型,key部分用原都是字符串

String类型

  • 存储的数据
    • 单个数据,最简单的数据存储类型,也是最常用的数据存储类型
  • 存储数据的格式
    • 一个存储空间保存一个数据
  • 存储内容
    • 通常使用字符串,如果字符串以整数的形式展示,可以作为数字操作使用

String类型基本操作

  • 添加/修改
    • set key value
    • mset key1 value1 key2 value2 …
  • 获取数据
    • get key
    • get key1 key2 …
  • 删除数据
    • del key
  • 获取数据字符个数(字符串长度)
    • strlen key
  • 追加信息到原始信息后部(原始信息存在就追加,否则新建)
    • append key value

String类型数据的扩展操作

作为数值操作

  • 设置数值数据增加指定范围的值
    • incr key
    • incrby key [increment]
    • incrbyfloat key [increment]
  • 设置数据减少指定范围的值
    • decr key
    • decrby key [increment]

String作为数值操作

  • String在redis内部存储默认就是一个字符串,当遇到增减类型的操作incr decr时会转成数值型进行计算
  • redis所有的操作都是原子性的,采用单线程处理所有业务,命令是一个一个执行的,因此无需考虑并发带来的数据影响
    • 按照数值进行操作的数据,如果原市数据不能转成数值,或超越了redis数值上线范围,将报错 Long.MAX_VALUE

设置指定生命周期

  • 设置数据具有指定的生命周期
    • setex set seconds value 秒
    • psetex key milliseconds value 毫秒

String类型数据操作注意事项

  • 数据最大存储量
    • 512m
  • 数值计算最大范围
    • java中的long的最大值
  • 命名规范
    • 表名:主键名:主键值:字段值

Hash

一个存储空间保存多个键值对数据

基本操作

  • 添加/修改数据

    • hset key field value
    • hmset key field1 value2 field2 value2 …
  • 获取数据

    • hget key field
    • hmget key1 field1 key2 field2 …
    • hgetall key
  • 删除数据

    • hdel key field1 field2 …
  • 获取哈希表中是否存在指定字段

    • hexists key field
  • 获取哈希表中字段的数量

    • hlen key

扩展操作

  • 获取哈希表中左右的字段名或字段值
    • hkeys key
    • hvals key
  • 设置指定字段的数值数据增加指定范围的值
    • hincrkey key field increment
    • hincrbyfloat key field increment
  • 如果有值就取消操作,没有就设置
    • hsetnx key field value

注意事项

  • hash类型下的value只能存储字符串,不允许存储其他数据类型,不存在嵌*象.
  • 每个hash可以存储232-1个键值对
  • hash类型设计初衷不是为了存储大量对象而设计的,切记不可滥用,更不可将hash作为对象列表使用
  • hgetall操作可以获取全部属性,如果内部field过多,便利整体数据效率就很低,有可能成为数据访问瓶颈

List

存储多个数据,并对数据进入存储空间的顺序进行区分(双向链表)

基本操作

  • 添加/修改数据
    • lpush key value1 value2 …
    • rpush key value1 value2…
  • 获取数据
    • lrange key start stop
    • lindex key index
  • 获取长度
    • llen key
  • 获取并移除数据
    • lpop key
    • rpop key
  • 删除数据
    • lrem key count value

扩展操作

  • 规定时间内获取并移除数据
    • blpop key seconds
    • blpop key1 key2 … seconds

注意事项

  • list保存的数据都是String类型的,数据总容量是有限的,最多232-1个元素

  • list具有索引的概念,但是操作数据时通常以队列的形式进行入队出队操作,或以栈的形式进行入栈出栈操作

  • 获取全部数据操作结束做因设置为-1

  • list可以对数据进行分页操作,通常第一页的信息来自于list,第2页及更多信息通过数据库的形式加载

Set

存储大量的数据,在查询方面提供更高的效率

基本操作

  • 添加数据
    • sadd key member1 member2 …
  • 获取全部数据
    • smembers key
  • 删除数据
    • srem key member1 member2 …
  • 获取集合数据总量
    • scard key
  • 判断集合中是否包含指定数据
    • seismember key member

扩展操作

  • 随机获取集合中指定数量的数据

    • srandmember key count
  • 随机获取集合中某个数据,并将该数据移除集合

    • spop key
  • 求两个集合的交、并、差集

    • sinter key1 key2
    • sunion key1 key2
    • sdiff key1 key2
  • 求两个集合的交、并、差集并存储到指定集合中

    • sinterstore destination key1 key2
    • sunionstore destination key1 key2
    • sdiffstore destination key1 key2
  • 将指定数据从原市集合中移动到目标集合中

    • smove source destination member

注意事项

  • set类型不允许数据重复,如果添加的数据在set‘中已经存在,将会报错
  • set虽然与hash的存储结构相同,但是无法启用hash中存储值的空间

sorted_set

保存可排序的数据

基本操作

  • 添加数据

    • zadd key score1 member1 score2 member2 …
  • 获取全部数据

    • zrange key start stop [withscores]
    • zrevrange key start stop [withscores]
  • 删除数据

    • zrem key member1 member2 …
  • 按条件获取数据

    • zrangebyscore key min max [withscores] [limit]
    • zrevrangebyscore key min max [withscores]
  • 按条件删除数据

    • zremrangebyrank key start stop
    • zremrangebyscore key min max
  • 获取集合数据总量

    • zcard key
    • zcount key min max
  • 集合交、并操作

    • zinterstore destination numkeys key1 key2 [max/min…]
    • zunionstore destination numkeys key1 key2 [max/min…]

扩展操作

  • 获取数据对应的索引(排名)
    • zrank key member
    • zrevrank key member
  • score值获取与修改
    • zscore key member
    • zincrby key increment member

注意事项

  • score保存的数据存储空间是64位
  • score保存的数据也可以是一个双精度的double值,基于双精度浮点数的特征,可能会丢失精度
  • sorted_set底层还是基于set结构的,因此数据不能重复,如果重复添加相同的数据,score值将被覆盖

Key的通用操作

key是一个字符串,通过key获取redis中保存的数据

基本操作

  • 删除指定key
    • del key
  • 判断key是否存在
    • exists key
  • 获取key的类型
    • type key

扩展操作

  • 为指定key设置有效期

    • expire key seconds
    • pexpire key milliseconds
    • expire key timestamp 时间戳
    • pexpire key milliseconds-timestamp
  • 获取key的有效时间

    • ttl key
    • pttl key
  • 切换key从时效性转换为永久性

    • persist key
  • 查询key

    • keys pattern

      pattern:

      • *任意数量的任意符号
      • ?匹配一个任意符号
      • []匹配一个指定符号

其他操作

  • 为key改名
    • rename key newkey 如果存在会覆盖
    • renamex key newkey 如果不存在就改名
  • 对所有key排序
    • sort
  • 其他通用操作
    • help @

数据库通用指令

  • redis为每个服务器提供16个数据库,编号0~15
  • 每个数据库之间的数据相互独立

基本操作

  • 切换数据库 默认0
    • select index
  • 其他操作
    • quit 关闭退出
    • ping 测试连通
    • echo message

其他操作

  • 数据移动
    • move key db 必须保证目标数据库没有
  • 数据清除
    • flushdb 删除当前库
    • flushall 删除全部库
  • 查询多少key
    • dbsize
上一篇:Redis


下一篇:基于pytorch的电影推荐系统