一、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. ASP.Net 管道模型 VS Asp.Net Core 管道 总结

    1 管道模型  1 Asp.Net Web Form管道 请求进入Asp.Net工作进程后,由进程创建HttpWorkRequest对象,封装此次请求有关的所有信息,然后进入HttpRuntime类进 ...

  2. 08- adb常用命令以及模拟器链接adb命令

    adb 命令简介 ADB即 Android debug bridge.是Android下面一个通用的调试工具. 熟练使用adb命令会大大增加开发效率,作为测试人员,熟练掌握adb,我们可以管理设备或手 ...

  3. Average Score39届亚洲赛牡丹江站A题

    题意:       A班有n个人,B班有m个人,然后现在给你n-1个A班人的成绩,和m个B班人的成绩,然后题目要求求出A班剩下的没给成绩那个人的成绩范围,要求是这个人从A班转到B班后能使A,B的平均分 ...

  4. js中return;、return true、return false;区别

    一.返回控制与函数结果 语法为:return 表达式 语句结束函数执行,返回调用函数,而且把表达式的值作为函数的结果 二.返回控制 无函数结果,语法为:return; 在大多数情况下,为事件处理函数返 ...

  5. Git(2)多人协同操作冲突

    一:多人协同操作冲突 拉取远程dev并在本地创建dev开发库,执行命令git checkout -b  dev  origin/dev  这里以同台机器不同窗口来模拟俩个用户操作同一分支同一文件(实际 ...

  6. uboot1: 启动流程和移植框架

    目录 0 环境 1 移植框架 3 执行流程 3.0 链接地址 3.1 start.S, 入口 3.2 __main 3.3 board_init_f()和init_sequence_f[] 3.4 r ...

  7. 四种方式带你层层递进解剖算法---hash表不一定适合寻找重复数据

    一.题目描述 找出数组中重复的数字 > 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次. ...

  8. UVA OJ 623 500!

    500!  In these days you can more and more often happen to see programs which perform some useful cal ...

  9. activiti知识点梳理

    一.Activiti是什么 Alfresco 软件在 2010 年 5 月17 日宣布 Activiti业务流程管理(BPM)开源项目的正式启动,其首席架构师由业务流程管理 BPM的专家 Tom Ba ...

  10. php中输出函数的区别

    isset() .empty()与is_null的区别 1.当变量未定义时,is_null() 和"参数本身"是不允许作为参数判断的,会报Notice警告错误: 2.empty , ...