Redis数据库的安装与基础操作

### Redis数据库

  • Redis简介

    • Redis (Remote Dictionary Server)是用C语言编写的开源数据库,可以将数据放入内存,也可以持久化存储到磁盘
    • Redis不同于传统关系型数据库,以key-value的形式存储数据,value可以为string字符串、list列表、set集合、sorted sets有序集合、hash哈希等多种类型
    • Redis早期由意大利人Salvatore Sanfilippo开发(网名antirez),2010年作者受雇于VMWARE,2013年由子公司Pivotal Software支持,从2015年起,由Redis实验室支持其开发工作
    • Redis将数据放置与内存,性能优越,官方给的测试结果:读取数据速度是110000次/s,写入速度为81000次/s
    • Redis开源免费,提供多种编程语言接口,包括主流的:java,python,php,c#等几十种编程语言,遵从BSD协定
  • 适用于:

    • 缓冲高并发读写的实时数据
    • 网站最新信息列表,用户点击计数器,各类信息的实时排名
  • 不适用于:

    • 对事务要求高的业务
    • 需要使用SQL的业务场景
  • Redis的安装

    • 下载安装包

      官网源码包下载

      pkgs download rpm包下载

    • 上传安装包至服务器

      image-20191210135652054

    • 安装依赖及redis软件

      image-20191210135744263

    • 相关文件位置

      • 配置文件位置:/etc/redis.conf
      • 数据文件位置:/var/lib/redis
      • 默认日志文件位置:/var/log/redis/redis.log
    • 修改配置文,允许远程连接

      image-20191210140006638

      image-20191210140051029

    • 启动服务

      image-20191210140150813

    • 关闭服务

      image-20191210140222017

    • 本地连接redis

      image-20191210140306597

    • 远程连接

      image-20191210141753913

      redis-cli -h 192.168.10.40
      

      image-20191210141816662

      redis-cli -h 192.168.10.40 -p 6379
      
    • 使用图形化工具连接redis

      下载地址-收费

      安装后打开并进行连接

      image-20191210142637829

      image-20191210142701727

      默认开启16个库,可以在配置文件中使用参数databases指定默认开启的库的数量

  • redis中常用数据类型

    • strings

      • value值是字符串
    • Lists

      • value值是一系列string字符串的列,按照插入的顺序排列
    • Sets

      • value值是一系列string字符串元素的集合,不能有重复值,不排序
    • Sorted sets

      • value值是一系列string字符串元素的集合,但是集合中的每个元素都关联一个浮点数值,叫做score,集合元素按照score排序,比较容易实现范围查找,如:列出集合元素中的前10或后10名
    • Hashes

      • value值是多个键值对(field:value),键值对由field和其对应的value组成类似于编程语言中的hash数组
  • redis中的key

    • redis的key用来定位数据,可以想象成引用数据的标签
    • key在当前数据库中不能有重值(默认16个数据库,数据库可以想象成分类目录,一般情况一个业务系统的数据放在一个数据库中)
    • key的名字不宜过长(超过1024),否则影响性能
    • key最多可以存512M
  • String 字符串

    image-20191210144532399

    set mykey values #设置key为mykey,value为values的键值对
     get mykey #获取mykey对应的value值
    
    • incr 递增 incrby 指定递增步长

      image-20191210145119451

    • decr 递减 decrby 指定递减步长

      image-20191210145238183

    • mset 一次性为多个key赋值,mget 一次性获取多个key的值

      image-20191210145402047

    • del 删除键值对,可同时删除多个

      image-20191210145449846

    • exists 判断指定的key是否存在,存在返回1,不存在返回0

      image-20191210145546127

    • type 查看指定key对应的value的数据类型

      image-20191210145657167

    • expire 设置key过期时长(单位:秒),ttl 查看剩余生命周期(单位:秒),超过设置时长后会自动清除指定的key

      image-20191210145807089

  • Lists 列表

    • lpush 从左侧添加元素到列表中(新添加的元素位于列表首部)

      image-20191210150100692

      image-20191210161421350

    • lrange 从左侧显示列表中的元素

      image-20191210150721592

      lrange mylist 0 -1 #显示列表中的元素 从0到-1,-1为最后一位
      
    • llen 获得列表中元素的个数

      image-20191210151535811

    • rpush 从右侧添加元素到列表(新添加的元素位于列表尾部)

      image-20191210151814888

      image-20191210152254396

    • rpop 删除右侧一个元素(尾部删除)

      image-20191210152401092

    • lpop 删除左侧一个元素(首部删除)
      image-20191210152537977

    • linsert 将元素插入指定位置(after位于指定元素后,defore位于指定元素前)

      image-20191210152906378

      image-20191210153618469

    • lset 修改指定位置元素的值(坐标从0开始)

      image-20191210154022516

    • lrem 删除指定的value

      image-20191210154644852

      image-20191210154722049

      image-20191210154750939

      lrem mylist1 0 "a"
      lrem mylist1 1 "c"
      lrem mylist1 -1 "hello"
      #格式:lrem key count value
      #count 
      	#为0 删除所有value
      	#大于0 从左删除count个value(从首部)
      	#小于0 从右删除count个value(从尾部)
      
    • ltrim保留指定范围内的元素,其他的删除

      image-20191210155227254

  • Sets 集合

    • sadd设置key对应的value集合

      image-20191210161400308

    • smembers 查看指定key的集合中的成员

      image-20191210161545987

      注:集合成员不会按照插入的顺序显示

    • sismember 查看指定元素是否属于指定的集合,1为真,0为假

      image-20191210161922024

    • sinter查看多个集合的交集

      image-20191210162121934

    • sdiff 查看多个集合中的差集

      image-20191210162231316

      注:顺序不同差集也不相同,那个集合在前显示那个集合中有而其他集合中不存在的元素

    • sunion 查看多个集合的合集

      image-20191210162440824

    • scard 查看集合中元素的个数

      image-20191210162522121

  • Sorted sets 有序集合

    • zadd 设置key对应的value的有序集合

      image-20191210163934997

       zadd myzset 1 a 2 b 3 c
       #格式:zadd key [NX|XX] [CH] [INCR] score member [score member ...]
       #排序按照score从小到大排序,当score相同时比较member
      
    • 查看集合中的元素

      image-20191210164628367

    • 显示集合中的元素及score

      image-20191210170106028

    • zrevrange显示有序集合的元素(score从大到小)

      image-20191210170221754

      image-20191210170238129

    • 修改score值

      image-20191210170459778

  • hashes 哈希

    • hmset 将多个field与value的键值对写入到指定key中,Redis 中每个 hash 可以存储 2的32次方-1个键值对(40多亿)

      image-20191210171406922

      hmset users:10 uid 15 uname zhangsan password 1234 birth 1990-10-10 
      #语法格式:hmset key field value [field value ...]
      
    • hget 获取指定key中指定field对应的value

      image-20191210171614397

    • hmget 获取指定key中指定的多个field对应的value

      image-20191210185836474

    • hgetall 获取指定key中所有field和value键值对数据

      image-20191210185941987

    • hlen 获取指定key中所有field和value键值对的数量

      image-20191210190119108

    • hkeys 获取指定key中所有field数据

      image-20191210190239580

    • hvals 获取指定key中所有field对应value数据

      image-20191210190315094

    • hdel 删除指定key中多个field及其对应value数据

      image-20191210190433951

    • hset 修改key中一个field对应的值

      image-20191210190524351

    • hmset 修改key中一个field或多个field对应的值

      image-20191210190710545

  • 其他常用命令

    • flushdb清空当前数据库的所有值(慎用)

      image-20191210190820544

    • select 切换数据库

      image-20191210190854114

      注:端口号后中括号内的数值标识了当前所处的数据库

    • scan 查看当前数据库中所有的key

      image-20191210192924418

      image-20191210193400440

      scan 0
      scan 0 match * count 3
      scan 3 match * count 3
      #语法格式 scan cursor [MATH pattern] [COUNT count]
      #cursor 游标
      #SCAN命令是一个基于游标的迭代器
      #游标为 0 时,服务器将开始一次新的迭代, 返回值为 0 的游标时, 表示迭代已结束
      #可以使用返回的游标作为继续下一次迭代显示的游标
      #MATH 匹配模式 * 匹配所有
      #count 指定显示的数量
      
posted @ 2019-12-10 20:00  MirL  阅读(566)  评论(0编辑  收藏  举报