redis重要知识点
- redis是一种高级的key:value存储系统,其中value支持五种数据类型:
- 1.字符串(strings)
- 2.字符串列表(lists)
- 3.字符串集合(sets)
- 4.有序字符串集合(sorted sets)
- 5.哈希(hashes)
- 而关于key,有几个点要提醒大家:
- 1.key不要太长,尽量不要超过1024字节,这不仅消耗内存,而且会降低查找的效率;
- 2.key也不要太短,太短的话,key的可读性会降低;
- 另外,我们还可以通过字符串类型进行数值操作:
- 复制代码代码如下:
- 127.0.0.1:6379> set mynum "2"
- OK
- 127.0.0.1:6379> get mynum
- "2"
- 127.0.0.1:6379> incr mynum
- (integer) 3
- 127.0.0.1:6379> get mynum
- "3"
- 看,在遇到数值操作时,redis会将字符串类型转换成数值。
- 由于INCR等指令本身就具有原子操作的特性,所以我们完全可以利用redis的INCR、INCRBY、DECR、DECRBY等指令来实现原子计数的效果,假如,
- 在某种场景下有3个客户端同时读取了mynum的值(值为2),然后对其同时进行了加1的操作,那么
- ,最后mynum的值一定是5。不少网站都利用redis的这个特性来实现业务上的统计计数需求。
- redis的另一个重要的数据结构叫做lists,翻译成中文叫做“列表”。
- 首先要明确一点,redis中的lists在底层实现上并不是数组,而是链表,也就是说对于一个具有上百万个元素的lists来说,在头部和尾部插入一个新元素,其时间复杂度是常数级别的,比如用LPUSH在10个元素的lists头部插入新元素,和在上千万元素的lists头部插入新元素的速度应该是相同的。
- 虽然lists有这样的优势,但同样有其弊端,那就是,链表型lists的元素定位会比较慢,而数组型lists的元素定位就会快得多。
- lists的常用操作包括LPUSH、RPUSH、LRANGE等。我们可以用LPUSH在lists的左侧插入一个新元素,用RPUSH在lists的右侧插入一个新元素,用LRANGE命令从lists中指定一个范围来提取元素。我们来看几个例子:
- 复制代码代码如下:
- //新建一个list叫做mylist,并在列表头部插入元素"1"
- 127.0.0.1:6379> lpush mylist "1"
- //返回当前mylist中的元素个数
- (integer) 1
- //在mylist右侧插入元素"2"
- 127.0.0.1:6379> rpush mylist "2"
- (integer) 2
- //在mylist左侧插入元素"0"
- 127.0.0.1:6379> lpush mylist "0"
- (integer) 3
- //列出mylist中从编号0到编号1的元素
- 127.0.0.1:6379> lrange mylist 0 1
- 1) "0"
- 2) "1"
- //列出mylist中从编号0到倒数第一个元素
- 127.0.0.1:6379> lrange mylist 0 -1
- 1) "0"
- 2) "1"
- 3) "2"
- lists的应用相当广泛,随便举几个例子:
- 1.我们可以利用lists来实现一个消息队列,而且可以确保先后顺序,不必像MySQL那样还需要通过ORDER BY来进行排序。
- 2.利用LRANGE还可以很方便的实现分页的功能。
- 3.在博客系统中,每片博文的评论也可以存入一个单独的list中。
- 【redis数据结构 – 集合】
- redis的集合,是一种无序的集合,集合中的元素没有先后顺序。
- 集合相关的操作也很丰富,如添加新元素、删除已有元素、取交集、取并集、取差集等。我们来看例子:
- 复制代码代码如下:
- //向集合myset中加入一个新元素"one"
- 127.0.0.1:6379> sadd myset "one"
- (integer) 1
- 127.0.0.1:6379> sadd myset "two"
- (integer) 1
- //列出集合myset中的所有元素
- 127.0.0.1:6379> smembers myset
- 1) "one"
- 2) "two"
- //判断元素1是否在集合myset中,返回1表示存在
- 127.0.0.1:6379> sismember myset "one"
- (integer) 1
- //判断元素3是否在集合myset中,返回0表示不存在
- 127.0.0.1:6379> sismember myset "three"
- (integer) 0
- //新建一个新的集合yourset
- 127.0.0.1:6379> sadd yourset "1"
- (integer) 1
- 127.0.0.1:6379> sadd yourset "2"
- (integer) 1
- 127.0.0.1:6379> smembers yourset
- 1) "1"
- 2) "2"
- //对两个集合求并集
- 127.0.0.1:6379> sunion myset yourset
- 1) "1"
- 2) "one"
- 3) "2"
- 4) "two"
- 对于集合的使用,也有一些常见的方式,比如,QQ有一个社交功能叫做“好友标签”,大家可以给你的好友贴标签,比如“大美女”、“土豪”、“欧巴”等等,这时就可以使用redis的集合来实现,把每一个用户的标签都存储在一个集合之中。
- 【redis数据结构 – 有序集合】
- redis不但提供了无需集合(sets),还很体贴的提供了有序集合(sorted sets)。有序集合中的每个元素都关联一个序号(score),这便是排序的依据。
- 很多时候,我们都将redis中的有序集合叫做zsets,这是因为在redis中,有序集合相关的操作指令都是以z开头的,比如zrange、zadd、zrevrange、zrangebyscore等等
- 老规矩,我们来看几个生动的例子:
- //新增一个有序集合myzset,并加入一个元素baidu.com,给它赋予的序号是1:
- 复制代码代码如下:
- 127.0.0.1:6379> zadd myzset 1 baidu.com
- (integer) 1
- //向myzset中新增一个元素360.com,赋予它的序号是3
- 127.0.0.1:6379> zadd myzset 3 360.com
- (integer) 1
- //向myzset中新增一个元素google.com,赋予它的序号是2
- 127.0.0.1:6379> zadd myzset 2 google.com
- (integer) 1
- //列出myzset的所有元素,同时列出其序号,可以看出myzset已经是有序的了。
- 127.0.0.1:6379> zrange myzset 0 -1 with scores
- 1) "baidu.com"
- 2) "1"
- 3) "google.com"
- 4) "2"
- 5) "360.com"
- 6) "3"
- //只列出myzset的元素
- 127.0.0.1:6379> zrange myzset 0 -1
- 1) "baidu.com"
- 2) "google.com"
- 3) "360.com"
- 127.0.0.1:6379> zrange myzset 0 -1 withscores
- 1) "souhu"
- 2) "2"
- 3) "alili"
- 4) "3"
- 5) "baidu"
- 6) "10"
- 127.0.0.1:6379> zrange myzset 0 -1 with scores
- (error) ERR syntax error
- 127.0.0.1:6379> zrange myzset 0 -1 withscores
- 1) "souhu"
- 2) "2"
- 3) "alili"
- 4) "3"
- 5) "baidu"
- 6) "10"
- 【redis数据结构 – 哈希】
- 最后要给大家介绍的是hashes,即哈希。哈希是从redis-2.0.0版本之后才有的数据结构。
- hashes存的是字符串和字符串值之间的映射,比如一个用户要存储其全名、姓氏、年龄等等,就很适合使用哈希。
- 我们来看一个例子:
- 复制代码代码如下:
- //建立哈希,并赋值
- 127.0.0.1:6379> HMSET user:001 username antirez password P1pp0 age 34
- OK
- //列出哈希的内容
- 127.0.0.1:6379> HGETALL user:001
- 1) "username"
- 2) "antirez"
- 3) "password"
- 4) "P1pp0"
- 5) "age"
- 6) "34"
- //更改哈希中的某一个值
- 127.0.0.1:6379> HSET user:001 password 12345
- (integer) 0
- //再次列出哈希的内容
- 127.0.0.1:6379> HGETALL user:001
- 1) "username"
- 2) "antirez"
- 3) "password"
- 4) "12345"
- 5) "age"
- 6) "34"
- 127.0.0.1:6379> hmset user username imp pwd 1234 age 15
- OK
- 127.0.0.1:6379> hgetall user
- 1) "username"
- 2) "imp"
- 3) "pwd"
- 4) "1234"
- 5) "age"
- 6) "15"
- 127.0.0.1:6379>
- 创建分支
- git brach -b imp
- 切换分支
- git checkout master
- 切换到master分支 合并dev
- git merge dev
- 删除分支
- git brach -d imp
- //由于Direct方式的kafka和Spark Streaming的集成方式中采用的api是低级封装的api(low lever api),此时消费者的offet,由自己保管,不再是zookeeper,
- // 同时还可以自己指定从哪个offet开始消费 ,指定消费的topic以及对应每个分区,开始消费的offset
- val fromOffsets:Map[TopicAndPartition, Long] = Map(
- TopicAndPartition("test1",0) -> 0,
- TopicAndPartition("test1",1) -> 100,
- TopicAndPartition("test1",2) -> 200,
- TopicAndPartition("test1",3) -> 300
- )
redis重要知识点的更多相关文章
- Redis基础知识点面试手册
Redis基础知识点面试手册 基础 概述 数据类型 STRING LIST SET HASH ZSET(SORTEDSET) 数据结构 字典 跳跃表 使用场景 会话缓存 缓存 计数器 查找表 消息队列 ...
- Redis这些知识点,是必须知道的!
Redis是一个开源(BSD许可)的内存数据结构存储,可作为数据库,缓存和消息队列.相比Memcached它支持更多的数据结构,如string(字符串),hash(哈希),list(链表),set(集 ...
- redis相关知识点
redis 的相关知识点 启动 启动代码 redis-cli -a 密码 通用命令 expire: 设置有效期 expire name 10 key key * 相关数据类型 String set:添 ...
- Redis【知识点】批量删除指定Key
Redis中有删除单条数据的命令DEL但是他没有批量删除多条数据的方法,那我们怎么去批量删除多条数据呢! 第一种方式 /work/app/redis/bin/redis-cli -a youpassw ...
- Redis的知识点总结~Linux系统操作~
Redis_启动后杂项基础 Redis一共16个数据库 SELECT[0~15] 来切换数据库 命令起效返回1 不起效返回0 或者nil 或者error 异常... DBSIZE 查询数据的数 KEY ...
- redis 相关知识点
(1)什么是redis? Redis 是一个基于内存的高性能key-value数据库. (有空再补充,有理解错误或不足欢迎指正) (2)Reids的特点 Redis本质上是一个Key-Value类型的 ...
- Redis 入门知识点
1.Redis简介 1.1.简介 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis 与其他 key - value 缓存产品有以下三个特点: Redi ...
- Redis哨兵知识点总结
1.Redis哨兵介绍 sentinal,中文名是哨兵 A.哨兵是redis集群架构中非常重要的一个组件,主要功能如下 集群监控,负责监控redis master和slave进程是否正常工作 消息通知 ...
- Redis 基础知识点总结
关系型数据库 VS 非关系型数据库(NoSQL) 关系型数据库 我们过去使用的 mysql.Oracle 都属于关系型数据库.关系型数据库的特点是数据表之间可以存在联系,表内每列数据也存在关联,同时支 ...
随机推荐
- 【2019年04月03日】A股最便宜的股票
太钢不锈(SZ000825) - 当前便宜指数:161.66 - 滚动扣非市盈率PE:4.62 - 滚动市净率PB:1.03 - 动态年化股息收益率:4.53% - 太钢不锈(SZ000825)的历史 ...
- vscode切换界面布局
调整vscode的控制面板位置 鼠标操作 view>Appearance>Toggle Panel Position 调整控制面板在界面底部 或者界面右侧 2.编辑区分布 鼠标操作 v ...
- 编译lua动态库
编译动态库,静态库参考https://blog.csdn.net/yzf279533105/article/details/77586747 centos默认安装了lua5.1,使用rpm删除,yum ...
- Elasticsearch学习之图解Elasticsearch中的_source、_all、store和index属性
转自 : https://blog.csdn.net/napoay/article/details/62233031 1. 概述 Elasticsearch中有几个关键属性容易混淆,很多人搞不清楚_s ...
- 【转载】C++中替代sprintf的std::ostringstream输出流详解
一.简单介绍 ostringstream是C++的一个字符集操作模板类,定义在sstream.h头文件中.ostringstream类通常用于执行C风格的串流的输出操作,格式化字符串,避免申请大量的缓 ...
- SpringBoot入坑-配置文件使用
经过上一篇的介绍,相信小伙伴们已经按奈不住内心对springboot的向往,本篇我将继续向小伙伴介绍springboot配置文件的配置,已经全局配置参数如何使用,好了下面开始我们今天的内容介绍. 我们 ...
- vim 撤销 回退操作
在vi中按u可以撤销一次操作 u 撤销上一步的操作Ctrl+r 恢复上一步被撤销的操作 注意:如果你输入“u”两次,你的文本恢复原样,那应该是你的Vim被配置在Vi兼容模式了.重做如果你撤销得太多 ...
- M - 非诚勿扰 优先队列
来源 作为2013年699万应届毕业生中的一员,由于宏观经济的不景气,小明在毕业当天就华丽丽地失业了! 经历了千难万苦的求职过程,小明特别能理解毕业生的就业之难,所以,他现在准备创建一家专门针对IT人 ...
- linux的基本操作(shell 脚本的基础知识)
shell 脚本的基础知识 日常的linux系统管理工作中必不可少的就是shell脚本,如果不会写shell脚本,那么你就不算一个合格的管理员.目前很多单位在招聘linux系统管理员时,shell脚本 ...
- 剑指offer——python【第2题】替换空格
题目描述 请实现一个函数,将一个字符串中的每个空格替换成“%20”. 例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 理解 很容易想到用pytho ...