【Redis】数据类型

目录

一些学习的网址:

全局命令:

数据结构和内部编码

一、字符串(String)

常用命令:

不常用命令:

内部编码:

典型应用场景:

二、哈希

命令

内部编码

三、列表(List)

命令:

内部编码:

使用场景

四、集合(Set)

命令:

内部编码

五、有序集合

命令:

内部编码

使用场景


Redis简介:

一些学习的网址:

菜鸟教程:http://www.runoob.com/redis/redis-hashes.html

Redis命令参考文档:http://redisdoc.com/

《Redis开发与运维》    链接:https://pan.baidu.com/s/1gX_P9OxAIH6VgS7J6p9_5g     提取码:af1a 
 

全局命令:

查看所有键值:keys *

这个命令会遍历所有键,时间复杂度为O(n),Redis保存大量键是,线上环境禁止使用。

键总数:dbsize

不会遍历所有键,而是直接获取Redis内置的键总数变量,时间复杂度为O(1)

检查键是否存在:exists key

如果存在返回1,不存在返回0。

删除键:del key [key ...]

返回值为删除键的个数

键过期:expire key seconds

Redis支持对键添加过期时间,当超过过期时间后,会自动删除键。

expire hello 10 (给hello这个键设置10秒的过期时间)

用于查看剩余过期时间:ttl key

用于查看剩余过期时间,有三种返回值:

  大于等于0的整数:键剩余过期时间

  -1:键没有设置过期时间

  -2:键不存在

键的数据结构类型:type key

数据结构和内部编码

redis有五种数据结构

一、字符串(String)

所有键都是字符串类型

字符串类型的值实际可以是字符串(简单字符串、复杂的字符串(JSON、XML)、数字(整型、浮点数),二进制(图片、音频、视频),最大不能超过512MB。

常用命令:

set key value

get key

批量设置值:mset key [key ...]

批量获取值:mget key [key ...]

计数:incr key

用于对值做自增操作,返回结果为:

  •   值不是整数,返回错误;
  •   值是整数,返回自增后的结果;
  •   键不存在,按照值为0自增,返回结果为1;

自增自减:

incrby(自增指定数字):

  incrby key increment

decrby(自减指定数字)

  decrby key decrement 

incrbyfloat(自增浮点数)

  incrbyfloat key increment

不常用命令:

append key value  可以向字符串尾部追加值

strlent key 字符串长度

getset key value   设置并返回原值

setrange key offeset value  设置指定位置的字符

getrange key start end 获取部分字符串

内部编码:

object encoding key  // 查看内部编码

字符串类型编码有3种:

  1. int:8个字节的长整型
  2. embstr:小于等于39个字节的字符串
  3. raw:大于39个字节的字符串

Redis会根据当前值的类型和长度决定使用哪种内部编码实现。

典型应用场景:

缓存功能:

该函数用于获取用户的基础信息

首先从Redis获取用户信息

如果没有从Redis获取到用户信息,需要从Mysql中进行获取,并将结果回写到Redis,添加1小时过期时间

计数

例如视频播放数

共享session

使用Redis将用户的Session进行集中管理,在这种模式下保证Redis是高可用和可扩展的,每次用户更新或者查询登录信息都是从Redis中集中获取。

限速

限制用户每分钟获取验证码的频率

二、哈希

命令

设置值:hset key field value 

获取值:hget key field

删除field: hdel key field [field ...]

返回结果为删除field成功的个数

计算field个数:hlen key

批量设置field-value:hmset key field value[field value ...]

批量获取field-value:hmget key field [field...]

判断field是否存在:hexists key field

获取所有field:hkeys key

获取所有value:hvals key

获取所有field-value:hgetall key

内部编码

  • ziplist(压缩列表):当哈希类型元素个数小于hash-max-ziplist-entries配置(默认512个),同时所有值都小于hash-max-ziplist-value配置(默认64个字节)时,Redis会使用ziplist作为哈希的内部实现

  ziplist使用更加紧凑的结构实现多个元素的连续存储,所以在节省内存方面比hashtable更加优秀。

  • hashtable(哈希表):当哈希类型无法满足ziplist的条件时,Redis会使用hashtable作为哈希的内部实现。

  因为此时ziplist的读写效率会下降,而hashtable的读写时间复杂度为O(1)。

三、列表(List)

用来存储多个有序的字符串

  • 列表中的元素时有序的
  • 列表中元素时可以重复的

命令:

添加

从右边插入元素: rpush key value[value ...]

从左到右获取列表的所有元素:lrange key 0 -1

从左边插入元素:lpush key value[value ...]

向某个元素前或者后插入元素:linsert key before|after pivot value

查找

获取指定范围内的元素:lrange key start end

lrange操作会获取列表指定索引范围所有的元素。索引下标有两个特点:第一:索引下标从左到右分别是0到N-1,但是从右到左分别是-1到-N。第二:lrange中的end选项包含了自身,这个和很多编程语言不包含end不太相同。

获取列表指定索引下标的元素:lindex key index

获取列表长度:llen key

删除

从列表左侧弹出元素:lpop key 

从列表右侧弹出元素:rpop key

删除指定元素:lrem key count value

      count >0,从左到右,删除最多count个元素

      count<0,从右到左,删除最多count绝对值个元素

      count=0,删除所有

按照索引范围修剪列表:ltrim key start end

修改

lset key index newValue

阻塞操作

blpop brpop

内部编码:

  • ziplist(压缩列表):当哈希类型元素个数小于hash-max-ziplist-entries配置(默认512个)

    同时所有值都小于hash-max-ziplist-value配置(默认64个字节)时,Redis会使用ziplist作为哈希的内部实现。

  • linkedlist(链表):当列表类型无法满足ziplist的条件时,Redis会使用linkedlist作为列表的内部实现。

使用场景

消息队列、文章列表

四、集合(Set)

保存多个字符串元素,不允许有重复元素,元素时无序的。

 

命令:

添加元素:sadd key element[element...]

删除元素:srem key element[element...]

计算元素个数:scard key

判断元素是否在集合中:sismember key element 

随机从集合返回指定个数元素:srandmember key [count]

    count是可选参数,如果不写默认为1

从集合随机弹出元素:spop key 

获取所有元素:smembers myset

集合间操作

求多个集合的交集:sinter key [key...]

求多个集合的并集:suinon key [key...]

求多个集合的差集:sdiff key [key...]

内部编码

  • intset(整数集合):当集合中的元素都是整数且元素个数小于set-max-intset-entries配置(默认512个)时,

    Redis会选用intset来作为集合内部实现,从而减少内存的使用。

  • hashtable(哈希表):当集合类型无法满足intset的条件时,Redis会使用hashtable作为集合的内部实现。

五、有序集合

给每个元素设置一个分数(score)作为排序的依据。

元素不能重复,但score可以重复。

命令:

添加:zadd key score member[score member...]

计算成员个数:zcard key

计算某个成员分数:zscore key member

计算成员排名:

zrank key member  从低到高

zrevrank key member  从高到低

删除成员:zrem key member[member...]

增加成员的分数:zincrby key increment member

返回指定排名范围的成员:

zrange key start end [withscores]

zrevrange key start end [withscores]

返回指定分数范围的成员:

zrangebyscore key min max [withscores] [limit offset count]

zrevrangebyscore key min max [withscores] [limit offset count]

返回指定分数范围成员个数:zcount key min max

内部编码

  • ziplist(压缩列表):当有序集合的元素个数小于zset-max-ziplist-entries配置(默认128个)

    同时每个元素的值小于zset-max-ziplist-value配置(默认64个字节)时,Redis会用ziplist来作为有序集合的内部实现,ziplist可以有效减少内存使用。

  • skiplist(跳跃表):当ziplist条件不满足时,有序集合会使用skiplist作为内部实现,因为此时zip的读写效率会下降。

使用场景

排行榜系统

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值