一、Redis概述及安装

  1、概述:

    1.1、Redis是一个开源的key - value存储系统。

    1.2、和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set -- 有序集合)和hash(哈希类型)。

    1.3、这些数据类型都支持push/pop、add/remove以及取交集、并集、和差集等更丰富的操作,而且这些操作都是原子性的。

    1.4、Redis支持各种不同形式的排序

    1.5、与Memcached一样,为了保证效率,数据都是缓存在内存中

    1.6、Redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件。

  2、应用场景

    2.1、配合关系型数据库做高速缓存。

      2.1.1、高频次、热门访问的数据,降低IO操作。

      2.1.2、分布式架构,做session共享。

    2.2、多样数据结构存储持久化数据。

  3、安装

    3.1、下载

      3.1.1、前往Redis官网:https://redis.io/

      3.1.2、点击下载链接

        

    3.2、安装

      3.2.1、Linux系统下安装gcc

        

      3.2.2、把下好的压缩包上传至/opt目录下、并解压

        

      3.2.3、进入解压好的文件夹 进行编译

        

      3.2.4、进行安装

        

          安装好的文件在/usr/local/bin目录下

    3.3、安装目录下(/usr/local/bin)内容简介

      3.3.1、redis-benchmark:性能测试工具

      3.3.2、 redis-check-aof:修复有问题的AOF文件,后面rdb和aof具体讲述

      3.3.3、 redis-sentinel:Redis集群使用

      3.3.4、 redis-server:Redis服务启动程序

      3.3.5、 redis-cli:客户端操作工具

  4、启动

    4.1、前台启动:关闭窗口后就不再继续运行

        

      

    4.2、后台启动

      4.2.1、把/opt/redis 6.2.4中的redis.conf复制到/etc下面。

      4.2.2、进入/etc目录,使用vim编辑器打开redis.conf配置文件。更改daemonize属性值为yes。

      4.2.3、使用redis-server /etc/redis.conf 命令后台启动redis。

      4.2.4、可使用进程编号结束运行。

  5、Redis相关介绍    

    5.1、Redis默认有16个数据库,即 0号库 ~ 15号库。

    5.2、使用select <dbid>来切换数据库。

    5.3、同一密码管理,所有库的密码相同。

    5.4、dbsize查看当前库key的数量

    5.5、flushdb清空当前库,flushall清空所有库。

    5.6、Redis底层是使用单线程+多路IO复用的方式

  6、对于Redis键的操作

    6.1、keys *  :查看当前库所有的key。

      

    6.2、exists key  :判断某个key是否存在。

      

    6.3、type key  :查看key的类型。

      

    6.4、del key  :删除指定key的数据。

      

    6.5、unlink key  :根据key非阻塞删除(异步操作)。

      

    6.6、expire key s :给key设置s秒的过期时间。

      

    6.7、ttl key  :查看key的剩余过期时间。

      

    6.8、select 库编号  :切换数据库。

      

    6.9、dbsize  :查看当前数据库的key的数量。

      

    6.10、fiushdb  :清空当前数据库。

      

    6.11、flushall  :清空所有数据库。

二、常用五大数据类型

  1、String:Redis字符串

    1.1、简介

      1.1.1、String是Redis最基本的类型,你可以理解为与Memcached一模一样的类型,一个key对应一个value。

      1.1.2、String类型是二进制安全的。意味着Redis的String可以包含任何数据。

      1.1.3、String类型是Redis最基本的数据类型,一个字符串value最多可以是512M。

    1.2、常用命令

      1.2.1、set <key> <value>添加或更新键值对。

        

          当key已存在时会更新对应key的value

        

      1.2.2、setnx <key> <value> 当数据库中key不存在时可以将key-value添加到数据库

        

      1.2.3、get <key>查询对应key的值。

        

      1.2.4、append  <key> <value>将给定的value追加原值的末尾

        

      1.2.5、strlen <key> 获取值得长度

        

      1.2.6、incr <key>  将key中存储的数字值增1,只能操作数字,如果为空新增值为1。

        

      1.2.7、decr <key> 将key中存储的数字值减1,只能操作数字,如果为空新增值为-1。

        

      1.2.8、incrby <key> <num>将key中的值增加指定量。

        

      1.2.9、incrby <key> <num>将key中的值减去指定量。

        

      1.2.10、mset <key1> <value1> <key2> <value2>······   同时设置一个或多个key-value。

        

      1.2.11、mget <key1> <key2> <key3>······同时获取一个或多个value。

        

      1.2.12、msetnx<key1> <value1> <key2> <value2>······   同时设置一个或多个key-value,只有所有key都不存在时才能存储成功。

        

        具有原子性,有一个失败则都失败。

        

      1.2.13、getrange <key> <起始位置> <结束位置>  获取key对应value指定位置的值(闭区间)

        

      1.2.14、setrange <key> <起始位置> <value>用value覆写起始位置后的值(索引从0开始)。

        

      1.2.15、setex <key> <过期时间> <value> 设置值得同时设置过期时间,单位秒。

        

      1.2.16、getset <key> <value>以新换旧,设置新值同时获取旧值

        

    1.3、数据结构

      String的数据结构为简单动态字符串(Simple Dynamic String)。是可以修改的字符串,内部结构实现类似Java的ArrayList,采用预分配冗余空间的方式来减少内存分配。                     

     内部为当前字符串实际分配的空间capacity一般要高于实际字符串长度len。当字符串长度小于1M时,扩容都是加倍现有的空间,如果超过1M,扩容一次只会扩容1M的空间。需要注意的是字符串最大长度为512M。

  2、List:Redis列表

    2.1、简介:

      2.1.1、特点:单间多值。

      2.1.2、Redis列表是简单的字符串列表,按照插入时的顺序排序。可以选择从列表的头部或尾部添加。

      2.1.3、它的底层实际是个双向链表,对两端的操作性能很高,通过索引操作中间索引性能较差。

        

    2.2、常用命令

      2.2.1、lpush/rpush <key> <value1> <value2> <value3>·······   从左边或右边插入一个或多个值。

        

      2.2.2、lpop/rpop <key> 从左边或右边取出一个值。值在键在,值光键亡

        

      2.2.3、rpoplpush <key1> <key2> 从key1列表右边吐出一个值,插到key2列表左边。

        

      2.2.4、lrange <key> <start> <stop>按照下标获得元素(从左到右)。(-1代表右边第一个)

        常规用法上方已有操作

        获取全部内内容:

        

      2.2.5、lindex <key> <index> 根据索引获取元素(从左至右)。

        

      2.2.6、llen <key> 获取列表长度

        

      2.2.7、linsert<key> before/after <value> <newvalue>  在value 前 / 后 插入newvalue

        

      2.2.8、lrem <key> <n> <value>从左边删除n个value(从左至右)。

        

      2.2.9、lset <key> <index> <value>将下标为index的值替换为value

        

    2.3、数据结构

      List的数据结构为快速链表。

      首先在列表元素比较少的时候使用一块连续的内存存储,这个结构是zipList,即压缩链表。

      它将所有的元素紧挨着存储在一起,分配的是一块连续的内存。

      当数据量比较多的时候,才会改为quickList。

      因为普通的链表需要的附加指针空间太大,会比较浪费空间。比如这个列表里存的只是int类型的数据,结构上还需要两个而外的指针prev和next。

      

      Redis将链表和zipList结合起来组成了quickList。也就是将多个zipList使用双向指针串起来使用。这样既满足了快速插入性能,又不会出现太大的空间冗余。

  3、Set:Redis集合

    3.1、简介:

        Redis set对外提供的功能与list类似,是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,有不希望出现重复数据时,set是一个很好地选择。并且set提供了判断某个成员是否在一个set集合内的重要接口,这也是list所不能提供的。

        Redis的set是String类型的无序集合它的底层其实是一个value为null的hash表,所以添加,删除,查找的复杂度都是O(1)

    3.2、常用命令

      3.2.1、sadd <key> <value1><value2>······将一个或多个元素加入到集合中,若该集合中已存在某个元素则该重复元素会被忽略。

        

      3.2.2、smembers <key>取出该集合的所有值。

        

      3.2.3、sismember <key> <value> 判断集合中是否包含指定元素,有返回1,没有则返回0。

        

      3.2.4、scard <key> 返回该集合的元素个数。

        

      3.2.5、srem <key> <value1> <value2> ······删除集合中的元素 

        

      3.2.6、spop <key> 从集合中随机弹出一个元素。

        

      3.2.7、srandmember <key> <n> 随机从该集合中取出n个值,但不会从集合中删除。

        

      3.2.8、smove <source> <destination> <value>  把集合中的一个元素移动到另一个集合中

        

      3.2.9、sinter <key1> <key2>返回两个集合的交集

        

      3.2.10、sunion <key1> <key2>返回两个集合的并集

        

      3.2.11、sdiff <key1> <key2>返回两个集合的差集。即key1中有但key2中没有的。

        

    3.3、数据结构

      Set数据结构是dict字典,使用哈希表实现的。

      类似于Java中的HashSet内部实现使用的是HashMap,只不过所有的value都指向同一个对象。

      Redis的set结构也是一样,它的内部使用的是hash结构,所有的value指向同一个内部值。

  4、Hash:Redis哈希

    4.1、简介:

      Redis Hash是一个键值对集合。

      RedisHash是一个String类型的fildvalue的映射表,适合用于存储对象信息。

      类似Java里的Map<String , Object>。

      

    4.2、常用命令

      4.2.1、hset <key> <field> <value> 给key集合中的field赋值value。

        

      4.2.2、hget<key><field>从key中取出field对应的值。

        

      4.2.3、hmset <key> <field1> <value1> <field2> <value2>·······批量设置hash的值。

        

      4.2.4、hexists<key><field>查看哈希表key中给定域field是否存在。

        

      4.2.5、hkeys <key>列出该集合的所有field。

        

      4.2.6、hvals <key>列出该集合的所有value。

        

      4.2.7、hincrby <key> <field> <increment> 给key中的field对应的value加上指定值。

        

      4.2.8、hsetnx <key> <field> <value> 给key集合中的field赋值value,只有field不存在时才能添加成功。

        

    4.3、数据结构

      Hash类型对应的数据结构是两种,zipList(压缩列表),hashTable(哈希表)。当field-value长度较短,且个数较少时使用zipList,否则使用hashTable。

  5、Zset:Redis有序集合

    5.1、简介:

      zset与普通集合set相似,是一个没有重复元素的字符串集合。

      不同之处是有序集合的每个成员都关联了一个评分,这个评分按照从低到高的方式排列集合成员。集合的成员是唯一的,但是评分是可以重复的

    5.2、常用操作  

      5.2.1、zadd <key> <score1> <value1> <score2> <value2>·······将一个或多个member元素及其score值加入到key中。

        

      5.2.2、zrange <key> <start> <stop> 返回有序集合中下标在start和stop之间的元素

        

      5.2.3、zrangebyscore <key> <min> <max>返回有序集合中score值介于min和max之间的成员,按score递增的方式排列。

        

      5.2.4、zrevrangebyscore <key> <min> <max>返回有序集合中score值介于min和max之间的成员,按score递递减的方式排列。

        

      5.2.5、zincrby <key> <increment> <value> 为元素的score加上增量。

        

      5.2.6、zrem <key> <value> 删除该集合下指定的元素。

        

      5.2.7、zcount<key> <min> <max>统计该集合分数区间元素个数。

        

      5.2.8、zrank <key> <value> 返回该值在集合中的排名。(从小到大排)

        

    5.3、数据结构

      zset底层使用了两个数据结构

      (1)、hash,hash的作用就是关联value和权重score,保障元素value的唯一性,可以通过value找到相应的score值。

      (2)、跳跃表,跳跃表的目的在于给元素value排序,根据score的范围获取元素列表。

搞定Redis(一)Redis的安装和五大基本数据类型的更多相关文章

  1. 搞定 ElasticSearch系列一 下载安装

    一.安装jdk 二.安装ElasticSearch 1.ElasticSearch下载地址: 2: 配置ElasticSearch 3:启动ElasticSearch 4: 安装ElasticSear ...

  2. 一文搞定全场景K3s离线安装

    作者简介 王海龙,Rancher中国社区技术经理,负责Rancher中国技术社区的维护和运营.拥有6年的云计算领域经验,经历了OpenStack到Kubernetes的技术变革,无论底层操作系统Lin ...

  3. Android7.0无需FileProvide搞定URI拍照、应用安装问题

    根据官方文档,从Android7.0版本开始 使用URI打开或安装文件需要单独在应用里配置了,问了度娘,有好多版本的结果,个人认为最靠谱的就是下边这个方法,只需在application的oncreat ...

  4. 【redis】-- redis的持久化(作为数据库)

    目录 1.RDB rdb持久化的方式 rdb方式的优点: aof的优点 3.持久化的其他特性 日志重写 工作原理 rdb和aof混合使用 redis是一个基于内存的数据库,故在redis正在运行的数据 ...

  5. 分分钟搞定Redis编译安装

    1.  依赖包安装 yum -y install cpp binutils glibc glibc-kernheaders glibc-common glibc-devel gcc make gcc- ...

  6. 一篇博客搞定redis基础

    redis简介 redis 一款高性能key-value数据库,实际上多用作缓存队列或者消息分发(celery),但是最常常被用来做缓存. redis安装 源码安装 $ wget http://dow ...

  7. 读完这篇文章,就基本搞定了Redis数据库

    简单来说Redis就是一个数据库,不过与传统的数据库不同的是Redis的数据是存在内存中的,所以存写速度非常快,因此Redis被广泛应用于缓存方向. 另外,Redis也经常用来做分布式锁.Redis提 ...

  8. 一篇文章搞定redis

    Redis 简介 Redis 是完全开源免费的,遵守 BSD 协议,是一个高性能的 key - value 数据库 Redis 与 其他 key - value 缓存产品有以下三个特点: Redis ...

  9. 【Redis】Redis基础 - Redis安装启动测试

    Redis基本 - 安装 文章目录 Redis基本 - 安装 Linux下安装Redis Docker 方式 Github 源码编译方式 直接安装方式 Windows下Redis安装 记录 - Red ...

随机推荐

  1. DPAPI机制学习

    0x00 前言 ​绝大多数应用程序都有数据加密保护的需求,存储和保护私密信息最安全的方式就是每次需要加密或解密时都从用户那里得到密码,使用后再丢弃.这种方式每次处理信息时都需要用户输入口令,对于绝大多 ...

  2. spring boot最新版使用几个坑解决

    <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent ...

  3. 【ElasticSearch】ElasticSearch集群扫盲

    Cluster 集群 ⼀个 Elasticsearch 集群由⼀个或多个节点(Node)组成,每个集群都有⼀个共同的集群名称作为标识.   Node节点 ⼀个 Elasticsearch 实例即⼀个 ...

  4. 【swagger】 swagger-ui的升级版swagger-bootstrap-ui

    swagger-bootstrap-ui是基于swagger-ui做了一些优化拓展: swagger-ui的界面: swagger-bootstrap-ui界面: 相比于原生的swagger-ui , ...

  5. 【Scrapy(一)】 Scrapy爬虫的基础执行流程

    安装scrapy模块 : pip install scrapy  创建scrapy项目 1.scrapy startprojecty 项目名称  注意:如果创建失败,可以先卸载原有的scrapy模块, ...

  6. 基于三层交换机的VRRP技术--MSTP、VRRP的综合运用

    MSTP (多生成树) 每个VLAN或者几个VLAN拥有一颗生成树,基于实例的生成树.instance 1.instance 2 每个实例拥有一颗生成树.MSTP可以实现多VLAN 的负载分担,可以实 ...

  7. 【译】android的审计和hacking工具

    原文:Best Android Tools For Security Audit and Hacking android系统占移动市场份额的80%且有恶意软件,这是一个问题.Hacker会对手机恶意操 ...

  8. WPF小经验

    Binding.IsAsync当属性值填充好后,与该属性绑定的界面才会开始加载(属性绑定优于控件加载) private IList<string> _list; public IList& ...

  9. HackingLab基础关

    目录 1:Key在哪里? 2:再加密一次你就得到key啦~ 3:猜猜这是经过了多少次加密? 4:据说MD5加密很安全,真的是么? 5:种族歧视 6:HAHA浏览器 7:key究竟在哪里呢? 8:key ...

  10. 阿里面试官用HashMap把我问倒了

    本人是一名大三学生,最近在找暑期实习,其中也面试过两次阿里,一次菜鸟网络部门.一次网商银行部门,当然我都失败了,同时也让我印象很深刻,因此记录了其中一些面试心得,我觉得这个问题很值得分享,因此分享给大 ...