4.Redis数据类型

redis的基本数据类型

string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)

string类型

赋值语法:
set   key_name   value(string的存储赋值)
setnx  key_name  value ((解决分布式锁方案之一)检查是否key键是否存在,不存在则赋值,存在不赋值,返回 0)

在这里插入图片描述

取值语法:
get  key_name (取出key_name对应的值)
getrange key  start  end  (用于获取存储在指定 key字符串中的子字符串,字符串的截取范围由start和end决定(包括start和and))
getbit key offset  (对于key存储的字符串的值,获取指定偏移量上的位(bit))
getset语法:getset key name value (指定key的值,并返回key的旧值,当key不存在时就返回nil)
strlen key (获取key的长度)

在这里插入图片描述

删除语法:
del key_name (删除指定的key,如果存在,返回数值类型)
批量写:mset k1 v1 k2 v2 ...
批量度:mget k1 k2 k3 ...

在这里插入图片描述

自增自减:
incr  key_name: (incr命令将key中存储的数字值增加1,如果key不存在那么key的值就会初始化为0,然后在执行incr操作)

自增: incrby key_name: (增量值incrby将key中存储的数字加上指定的增量值)
自减:decr  key_name  或者   decrby key_name
(注意这些key对应的必须是数字类型的字符串,否则会出错)

字符串拼接:append  key_name value
addend 命令用于为指定的key追加至魔纹i,如果不存在就为他赋值

字符串长度:strlen key

在这里插入图片描述

string的应用场景

  1. string通常用于郝村字符串或者json字数串数据
  2. 因string是二进制安全的,所以完全可以吧一个图片文件的内容作为字符串来存储
  3. 计数器(常规key-value缓存应用,常规计数:微博数、粉丝

incr等指令本身就具有原子操作特性。所以我们可以完全利用redis的incr。incrby。decr。decrby等的指令来实现原子计数的效果。加入在某种场景下有三个客户端同时读取了mynum的值(值为2),然后对其同时进行了加1的操作,那么mynum的值最后一定是5
不少网站都是利用redis这个特性来实=实现业务统计的计数需

hash类型

简介

hash类型是string类型的field和value的映射表,或者说是string集合,hash特别适用于存储对象,相比较而言,将一个对象存储在hash类型中要比存储在string类型占用更少的内存空间
Redis中每个hash可以存储2的32次方-1 个键值对(40多亿)

hash常用命令

赋值语法:
hset key field  value ;(为指定的key设定FILe/value)
hmset  key  fild value:(同时将多个field-value设置到hash中)

取值语法:
hget  key  filed : (获取函数式中的值,根据Filed得到value)
hmget 可以filed[fied1] :(获取key中所有给定的字段的值)
hgetall  key :(返回hash表中所有的字段和值)

hkeys key:获取所有哈希表中的字段
hlen key :获取哈希表中字段的数量

在这里插入图片描述

删除语法:
hdel key field[field2] :删除一个或者多个哈希表字段

其他语法:
hsetnx  key fedle value :只有在字段filed不存在时,设置hash表的值
hincrby  key  filed increment:为哈斯表key中指定的证书值上加上增量increment
hincrbyfloat  key filed increment :为哈希表key中的我桩顶标高字段浮点数值加上增量increment
hexists key  field :查看哈希表中指定的字段是否存在

应用场景

hash应用场景:

  1. 常用语储存一个对象
  2. 为什么不用string存储对象?
hash是一种接近关系型数据库的一种数据类型,可以将数据库的一条记录或者程序中一个对象转换成hashmap存放到redis中

总结:redis所提供的的hash很好的解决了对象的存储问题,Rides的hash实际是内部存储的value为一个hashmap,并提供了直接存储map的接口。

list 类型

list是一个链表结构的集合,其主要功能有push、pop、获取元素等,更详细的说,list是一个双端链表的结构,我们可以通过想过的操作进行集合的头部或者尾部的添加和删除元素,list的设计非常的荞麦哦,既可以作为栈、又可以作为队列,满足绝大多数的需求。

常用命令

赋值:
lpush  key  value [value2] :(将一个或者多个值插入到头部(从左侧添加))
rpush  key  value [value2] :(在列表中添加一个或者多个值(从右侧添加))
lpushx key  value :将一个值插入到已经存在的列表的头部,如果不存在,操作无效
rpushx key  value :将一个值插入到已经存在的列表的尾部,如果不存在,操作无效

取值:
llen key: 获取列表的长度
lindex kye  index :通过下标获取列表中的元素
lrange  key  start  stop :获取列表指定范围的元素

在这里插入图片描述

 删除语法:
 lpop key  :移出并获取列表的第一个元素(左侧元素)
 rpop key  :移出并获取列表的最后一个元素(右侧元素)
 
 blpop key [key2]  timeout  :移出并获取列表的第一个元素,如果列表没有元素会阻塞队列直到等待超时或者发现可弹出队列
 
 ltrim  key  start  stop  :对一个列表进行裁剪,就是说,让列表只保留指定区间的元素,不在指定区间的将被删除
 
 修改命令:
 lset key  index   value :通过索引设置列表元素的值
 linsert  key before/after  world  value :在列表的原色钱或者后插入原色  描述:将值value插入到列表key中,位于world之前或者之后
 
 高级语言:
 rpoplpush  sorce  destinationichu iebiao  :移除列表的最后一个元素,并将该元素添加到另一个列表返回
 实例:
       rpoplpush  a1   a2:a1的最后元素移到a2的左侧 

HaperLogLog 类型

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

在redis中每个HyperLoglog键只需花费12kb的内存,就可以计算接近2的64次方个不同元素的基数
但是因为HyperLoglog只会根据输入的元素来计算基数,而不会存储元素本身,所以HyperLoglog不能像集合那样,返回元素的各个值。

为什么需要HyperLoglog?

如果统计一亿个数据的基数值,就需要很大的内存,但是HyperLoglog很好的解决了这个问题。

 常用命令:
 pfadd  key  element [element]:添加指定元素到HyperLoglog中
 pfcount  key  [key] :返回给定HyperLoglog 的基数值
 pfmerge destkey  sourcekey [sourcekey]:将多个sourcekey合并为一个sourcekey

在这里插入图片描述

应用场景

基数不大,数据量不大就用不上,会有点大材小用浪费空间
有局限性,就是只能计算基数数量,而没办法得到具体的内容是什么

统计注册ip数
统计每日访问ip数
统计在线用户数
统计真实文章阅读数

总结

HyperLoglog是一种算法,不是redis独有,redis对于HyperLoglog的存储进行了优化,在基数较小的时候,他的存储空间使用稀疏矩阵存储,空间占用很小。

原创文章 153 获赞 71 访问量 4万+

猜你喜欢

转载自blog.csdn.net/mzc_love/article/details/105748647
今日推荐