当前位置: 首页 > news >正文

通过网站如何做海外贸易阜新网络推广

通过网站如何做海外贸易,阜新网络推广,中国施工总承包100强,镇江市网站建设一、Redis入门介绍 1、什么是Redis? Redis,英文全称是Remote Dictionary Server(远程字典服务),是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。…

 一、Redis入门介绍

1、什么是Redis?

Redis,英文全称是Remote Dictionary Server(远程字典服务),是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

Redis的数据是存在内存中的。它的读写速度非常快,每秒可以处理超过10万次读写操作。因此redis被广泛应用于缓存,另外,Redis也经常用来做分布式锁。除此之外,Redis支持事务、持久化、LUA 脚本、LRU 驱动事件、多种集群方案。

Redis 的读写速度比 Mysql 快,原因: Redis 存储的是 key-values 格式的数据,时间复杂度是 O(1) ,即直接通过 key 查询对应的 value 。 而如 Mysql 数据库,底层的实现是 B+ 树,时间复杂度是 O(logn) 。

2、Redis的基本数据结构类型 

2.1、Redis有以下这五种基本类型: 

(1)String(字符串 )

String是Redis最基础的数据结构类型,它是二进制安全的,可以存储图片或者序列化的对象,值最大存储为512M。

内部编码:int(8字节长整型),embstr(小于等于39字节字符串),raw(大于39个字节字符串)。

应用场景:共享session、分布式锁,计数器、限流。

语法:

redis 127.0.0.1:6379> COMMAND KEY_NAME

 实列:

redis 127.0.0.1:6379> SET w3ckey redis 
OK 
redis 127.0.0.1:6379> GET w3ckey 
"redis"

C语言的字符串是char[]实现的,而Redis使用SDS(simple dynamic string) 封装,sds源码如下:

struct sdshdr{ unsigned int len; // 标记buf的长度 unsigned int free; //标记buf中未使用的元素个数char buf[]; // 存放元素的坑 
}

注意:SDS中,O(1)时间复杂度,就可以获取字符串长度;而C 字符串,需要遍历整个字符串,时间复杂度为O(n)。 

 SDS 结构图:

(2)Hash(哈希)

 Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。在Redis中,哈希类型是指v(值)本身又是一个键值对(k-v)结构。如果开发使用hgetall,哈希元素比较多的话,可能导致Redis阻塞,可以使用hscan。而如果只是获取部分field,建议使用hmget。

内部编码:ziplist(压缩列表) 、hashtable(哈希表)

应用场景:缓存用户信息等。

实例:

redis 127.0.0.1:6379> HMSET w3ckey name "redis tutorial" description "redis basic commands for caching" likes 20 visitors 23000
OK
redis 127.0.0.1:6379> HGETALL w3ckey1) "name"
2) "redis tutorial"
3) "description"
4) "redis basic commands for caching"
5) "likes"
6) "20"
7) "visitors"
8) "23000"

字符串和哈希类型对比如下图:

(3)List(列表)

Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)。列表(list)类型是用来存储多个有序的字符串,一个列表最多可以存储2^32-1个元素 。

内部编码:ziplist(压缩列表)、linkedlist(链表)

应用场景:消息队列,文章列表。具体参考以下:

lpush+lpop=Stack(栈)
lpush+rpop=Queue(队列)
lpsh+ltrim=Capped Collection(有限集合)
lpush+brpop=Message Queue(消息队列)

实例:

redis 127.0.0.1:6379> LPUSH w3ckey redis
(integer) 1
redis 127.0.0.1:6379> LPUSH w3ckey mongodb
(integer) 2
redis 127.0.0.1:6379> LPUSH w3ckey mysql
(integer) 3
redis 127.0.0.1:6379> LRANGE w3ckey 0 101) "mysql"
2) "mongodb"
3) "redis"

List(列表)类型的插入与弹出原理如下图:

 List(列表)缺点:链表型lists的元素定位会比较慢,而数组型lists的元素定位就会快得多。

(4)Set(集合)

Redis的Set是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。Redis 中 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。其中smembers和lrange、hgetall都属于比较重的命令,如果元素过多存在阻塞Redis的可能性,可以使用sscan来完成。

内部编码:intset(整数集合)、hashtable(哈希表)

应用场景:用户标签,生成随机数抽奖、社交需求。

实例:

redis 127.0.0.1:6379> SADD w3ckey redis
(integer) 1
redis 127.0.0.1:6379> SADD w3ckey mongodb
(integer) 1
redis 127.0.0.1:6379> SADD w3ckey mysql
(integer) 1
redis 127.0.0.1:6379> SADD w3ckey mysql
(integer) 0
redis 127.0.0.1:6379> SMEMBERS w3ckey1) "mysql"
2) "mongodb"
(5)zset(有序集合)

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

不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

有序集合的成员是唯一的,但分数(score)却可以重复。

内部编码:ziplist(压缩列表)、skiplist(跳跃表)

应用场景:排行榜,社交需求(如用户点赞)。

实例:

redis 127.0.0.1:6379> ZADD w3ckey 1 redis
(integer) 1
redis 127.0.0.1:6379> ZADD w3ckey 2 mongodb
(integer) 1
redis 127.0.0.1:6379> ZADD w3ckey 3 mysql
(integer) 1
redis 127.0.0.1:6379> ZADD w3ckey 3 mysql
(integer) 0
redis 127.0.0.1:6379> ZADD w3ckey 4 mysql
(integer) 0
redis 127.0.0.1:6379> ZRANGE w3ckey 0 10 WITHSCORES1) "redis"
2) "1"
3) "mongodb"
4) "2"
5) "mysql"
6) "4"

 2.2、三种特殊的数据结构类型:

(1)Geospatial

Geospatial属于经纬度数据类型,Redis3.2推出的,地理位置定位,用于存储地理位置信息,并对存储的信息进行操作。

相关指令:

(2)Hyperloglog

Hyperloglog属于不重复计数类型,用来做基数统计算法的数据结构,如统计网站的UV。 

例如一篇文章的浏览量;当然这种数据也可以存放到set类型中,因为set类型也是不重复的,但如果数据量很大,则存放到set中会占用大量的内存,基于此,Redis 在2.8.9 版本中更新了 Hyperloglog 数据结构专门用于存放不重复计数类型的数据,其特点是占用的内存很小且固定,存放了2^64 个不同元素的key,只需要废 12KB内存,所以,Hyperloglog是存放不重复计数类型的最佳类型。

HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。

因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像集合那样,返回输入的各个元素。

实例:

redis 127.0.0.1:6379> PFADD w3ckey "redis"1) (integer) 1redis 127.0.0.1:6379> PFADD w3ckey "mongodb"1) (integer) 1redis 127.0.0.1:6379> PFADD w3ckey "mysql"1) (integer) 1redis 127.0.0.1:6379> PFCOUNT w3ckey(integer) 3
(3)Bitmap

Bitmap属于位存储数据类型,其key值为map类型,但是其map的key只能为integer类型,value值只能为0或1。Bitmaps 用一个比特位来映射某个元素的状态,在Redis中,它的底层是基于字符串类型实现的,可以把bitmaps成作一个以比特位为单位的数组。

应用场景:打卡等

实例:

127.0.0.1:6379> setbit sign 0 1
(integer) 0
127.0.0.1:6379> setbit sign 1 0
(integer) 0
127.0.0.1:6379> setbit sign 2 1
(integer) 0
127.0.0.1:6379> setbit sign 3 0
(integer) 0
127.0.0.1:6379> setbit sign 4 1
(integer) 0
127.0.0.1:6379> setbit sign 5 1
(integer) 0
127.0.0.1:6379> setbit sign 6 1
(integer) 0
127.0.0.1:6379> getbit sign 5
(integer) 1
127.0.0.1:6379> getbit sign 3
(integer) 0
127.0.0.1:6379> getbit sign 0
(integer) 1
127.0.0.1:6379> bitcount sign
(integer) 5
127.0.0.1:6379>    

3、总结

3.1、Redis读写速度快的原因

 

3.2、Redis的数据结构及内部编码图 

 

3.3、跳跃表

(1)跳跃表是Redis特有的数据结构,就是在链表的基础上,增加多级索引提升查找效率。
(2)跳跃表支持平均 O(logN),最坏 O(N)复杂度的节点查找,还可以通过顺序性操作批量处理节点。

http://www.mmbaike.com/news/29483.html

相关文章:

  • 南阳网站建设制作企业培训考试app
  • 代做课题网站站长工具怎么用
  • 看广告赚佣金平台长沙seo优化推荐
  • 视频解析网站制作南召seo快速排名价格
  • 做投票页面什么网站好网络营销公司简介
  • 苏州网站建设建网站旺道seo软件
  • 怎么做购物网站的分类目录河南省干部任免最新公示
  • 山东平台网站建设推荐seo优化推广业务员招聘
  • 有什么电商网站做推广赚佣金的百度查一下
  • 办个网站卖什么好处360指数查询工具
  • 做网站的成本在哪五个常用的搜索引擎
  • 个人视频网站注册平台枫林seo工具
  • 北京网站建设价格天做网站推广一般多少钱
  • 网页设计与网站开发成都企业seo
  • 佛山网站建设锐艺a068360优化大师安卓手机版下载安装
  • 北京做网站周云帆关键词推广优化排名品牌
  • 做视频可以领钱的网站seo软件排行榜前十名
  • 赣榆区住房和城乡建设局网站百度快照是什么
  • 企业官网型网站建设yandex搜索引擎入口
  • 网站设计内容网络优化工程师骗局
  • 网站开发合同付款方式pc网站建设和推广
  • 如何查看一个网站是用什么程序做的网络营销相关工作岗位
  • 蒙牛企业网站建设规划书网络营销理论基础
  • 群辉可以做网站服务器吗线下推广的渠道和方法
  • 用php做企业网站的可行性销售方案
  • 免费net网站空间南昌seo代理商
  • 新闻网站模板html写文案接单平台
  • 北京网站建设公司华网天下下站长之家关键词挖掘工具
  • 站酷网如何接单百度电脑版下载安装
  • 谷歌网站怎么做排名网站流量统计查询