Redis 基本数据类型

Posted 门虫不是虫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis 基本数据类型相关的知识,希望对你有一定的参考价值。

1、简介

  redis是一款菲关系型数据库(Not Only SQL ),是对关系型数据库做补充。这是一种基于内存的数据库,用于应对基于海量用户和海量数据前提下的数据处理问题。

  因为磁盘读/写速度比较慢的问题,一瞬间成千上万的请求到来,需要系统在极短的时间内完成成千上万次的读/写操作,极其容易造成数据库系统瘫痪,最终导致服务宕机的严重生产问题。

2、特征

  • 数据间没有必然的关联关系;
  • 内部采用单线程机制进行工作;
  • 高性能;
  • 多数据类型支持:string、hash、list、set、sorted_set和hyperLogLog;
  • 持久化支持,可以进行数据灾难恢复;

3、数据类型

  3.1 string 常见操作

#新增
set key value

#新增多个
mset key1 value1 [key2 value2]

#删除
del key

#追加值到原始值后面,不存在就新增
append key value

#读取
get key

#获取值长度
strlen key

=============扩展操作============
#对value为数值的key自增自减操
incr key //value+1
incrby key increment //指定value+increment
incrbyfloat key increment

decr key
decrby key increment

#设置key的有效期
setex key seconds value //指定秒数
psetec key milliseconds value //指定毫秒数

  3.2 list 常见操作

    简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。

===========普通操作=============
#添加、修改
lpush key value1 [value2...]
rpush ...

#移除并返回结果
lpop key    //左边删除一个
rpop key    //右边删除一个
lrem key count value    //删除指定数量的value

#获取数据
lrange key start end //获取下标start到end的值,end = -1为最后
lindex key index

#获取长度
llen key

============扩展操作=============
#阻塞式删除操作,如有有值立即执行,没有值会等timeout秒,还没有就返回(nil)
blpop key1 [key2] timeout
brpop ...

    业务场景:关注列表。。。

  3.3 hash 常见操作

    是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。

========普通操作=========
#新增
hset key field value
hmset key field1 value1 [field2 value2]

#删除key中field
hdel key field1 [field2]

#获取
hget key field 
hmget key field1 [field2]

#获取长度
hlen key

#判断field是否存在
hexists key field

========扩展操作==========
#获取key的所有field和value
hkeys key
kvals key

#值的增量操作
hincrby key field increment
hincrbyfloat key field increment

#存在field不插入,不存在插入
hsetnx key field value

    注意事项:

      • value只能存储字符串,不允许存储其他数据类型,不存在嵌套现象;
      • hash类型十分贴近对象的数据存储形式,并且可以灵活添加删除对象属性;
      • hgetall操作可以获取全部属性,如果内部field过多,遍历整体数据效率会很低,最好只查要的数据;

    业务场景:限量促销数据存储。。。

  3.4 set 常见操作

    是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。

=========普通操作==========
#新增
sadd key member1 [member2]

#删除
srem key member

#获取
smembers key

#获取数量
scard key

#判断member是否存在
sismember key member

========扩展操作========
#随机获取member
srandmember key [count] //默认1个

#随机获取member并从集合中删除
spop key [count]

#获取集合间的交、差、并集
sinter key1 [key2...] //交集
  sinterstore destination key1 [key2...]  //获取交集并存到指定集合中
sdiff key1 [key2...]  //差集
  sdiffstore destination key1 [key2...]  //获取差集并存到指定集合中
sunion key1 [key2...]  //并集
  sunionstore destination key1 [key2...]  //获取并集并存到指定集合中
#将指定数据从原始集合中移动到目标集合中
smove source destination member

    注意事项:不允许数据重复;

    应用场景:统计网站访问量、随机推荐、黑白名单。。。

  3.5 sorted_set 常见操作

    有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。

======普通操作======
#新增
zadd key score1 member1 [...]

#删除
zrem key member
zremrangebyrank key start end //包含start和end   
zremrangebyscore key min max

#获取
zrange key start end [withscores] 
zrevrange ...
zrangebyscore key min max [withscores]
zrevrangebyscore ...

#获取总数
zcard key
zcount key min max    //通过socre去统计

#交并集操作
zinterstore destination numkeys key1 [key2...] //必须指定几个集合操作
zunionstore ...

========扩展操作========
#获取数据对应的索引
zrank key member
zrevrank key member

#score值获取与修改
zscore ket member
zincrby key increment member

    业务场景:投票、评选。。。

  3.6 HyperLogLog

    在 2.8.9 版本添加了 HyperLogLog 结构。 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。

    每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。

  什么是基数?

  比如数据集 {1, 3, 5, 7, 5, 7, 8}, 那么这个数据集的基数集为 {1, 3, 5 ,7, 8}, 基数(不重复元素)为5。 基数估计就是在误差可接受的范围内,快速计算基数。

  

#新增
pfadd key element1 [element2...]

#获取基数估算值
pfcount key1 [key2...]

#合并
pfmerge destkey sourcekey1 [sourcekey2...]

4、key通用命令

#删除key
del key

#获取key类型
type key

#判断key是否存在
exists key

#设置key有效期
expire key seconds
pexpire key millisecondes 
expireat key timestamp
pexpirear key milliseconds-timestamp

#获取key有效时间
ttl key
pttl key

#切换key从时效性转为永久性
persist key

#查找key
keys pattern
    *    匹配任意数量的字符
    ?    匹配一个字符
    []   匹配范围内的字符

#修改key
rename key newkey
renamenx key newkey //仅当 newkey 不存在时,将 key 改名为 newkey 

#排序
sort key //可以对list、set和sorted set的元素进行排序,然后显示排序的结果,不影响这些类型里面存储的数据的排序,默认asc

5、数据库命令

  一共有16个数据库,0~15,默认在0号数据库

#切换数据库
select index

#数据移动数据库
move key db

#数据清除
dbsize    查看key的数量
flushbd    删除本数据库内容
flushall    删除所有数据

#其他操作
quit    退出
ping    测试服务是否连通
echo message    打印内容到控制台

 

以上是关于Redis 基本数据类型的主要内容,如果未能解决你的问题,请参考以下文章

10 基本说明

(转) Java中的负数及基本类型的转型详解

redis基本数据类型

Redis五个基本数据类型详解

003 redis的基本数据类型

Redis之基本数据类型