zoukankan      html  css  js  c++  java
  • redis基础简介

    一:redis简介

    (1):摘要

    redis由使用ANSI C编写的开源,支持网络,基于内存.亦可以持久化基于键值对的非关系型数据库,从2015年6月开始,Redis的开发由Redis Labs赞助,而2013年5月至2015年6月期间,其开发由Pivotal赞助。在2013年5月之前,其开发由VMware赞助。根据月度排行网站DB-Engines.com的数据显示,Redis是最流行的键值对存储数据库。

    (2):软件获取帮助

    官方网站:https://redis.io
    
    官方各版本下载地址:http://download.redis.io/releases/
    
    Redis 中文命令参考:http://redisdoc.com
    
    中文网站1:http://redis.cn
    
    中文网站2:http://www.redis.net.cn

    (3):特点优势

    1:k、v键值存储以及数据结构存储(如列表、字典)

    2:所有的数据(包括存储数据)都是在内存中完成

    3:单线程服务(这意味着会有较多的阻塞情况)

    4:支持主从复制模式,更提供高可用主从复制模式(哨兵)

    5:丰富的编程接口支持,如Python、Golang、Java、php、Ruby、Lua、Node.js 

    6:功能丰富,除了支持多种数据结构之外,还支持事务、发布/订阅、消息队列等功能

    7:支持数据持久化(AOF、RDB)

    (4)与memcahce对比

    1:memcache不支持数据持久化 redis支持数据持久化

    2:memcache数据存储基于LRU(最近 最少使用的会被删除) redis只要服务不停止数据可以一直保持下去

    3:memcache是多线程阻塞比较小 redis是单线程阻塞比较多

    4:memcache只支持简单的k、v数据存储,而redis支持多种数据格式存储。

    二:redis安装配置

    一:安装

    # 安装
    yum install gcc -y #安装C依赖 wget http://download.redis.io/redis-stable.tar.gz #下载稳定版本 tar zxvf redis-stable.tar.gz #解压 cd redis-stable make PREFIX=/opt/app/redis install #指定目录编译,也可以不用指定 make install mkdir /etc/redis #建立配置目录 cp redis.conf /etc/redis/6379.conf # 拷贝配置文件 cp utils/redis_init_script /etc/init.d/redis #拷贝init启动脚本针对6.X系统 chmod a+x /etc/init.d/redis #添加执行权限 vi /etc/redis/6379.conf #修改配置文件: bind 0.0.0.0 #监听地址 maxmemory 4294967296 #限制最大内存(4G): daemonize yes #后台运行 ####启动与停止 /etc/init.d/redis start /etc/init.d/redis stop

    二:二进制文件说明

    redis安装完成后会有以下可执行文件(window下是exe文件)生成,下面是各个文件的作用。
    
    redis-server       #Redis服务器和Sentinel服务器,启动时候可使用--sentinel指定为哨兵
    redis-cli         #Redis命令行客户端 
    redis-benchmark      #Redis性能测试工具 
    redis-check-aof      #AOF文件修复工具 
    redis-check-dump     #RDB文件检测工具 
    redis-sentinel       #Sentinel服务器,4.0版本已经做了软链接到redis-server

    三:配置详解

    logfile
    #日志文件位置及文件名称
    
    bind 0.0.0.0
    #监听地址,可以有多个 如bind 0.0.0.0 127.0.0.1
    
    daemonize yes
    #yes启动守护进程运行,即后台运行,no表示不启用
    
    pidfile /var/run/redis.pid 
    # 当redis在后台运行的时候,Redis默认会把pid文件在在/var/run/redis.pid,也可以配置到其他地方。
    # 当运行多个redis服务时,需要指定不同的pid文件和端口
    
    port 6379
    # 指定redis运行的端口,默认是6379
    
    unixsocket 
    #sock文件位置
    
    unixsocketperm
    #sock文件权限
    
    timeout 0
    # 设置客户端连接时的超时时间,单位为秒。当客户端在这段时间内没有发出任何指令,那么关闭该连接, 0是关闭此设置
    
    loglevel debug
    # 指定日志记录级别,Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose
    
    logfile ""
    # 日志文件配置,默认值为stdout,标准输出,若后台模式会输出到/dev/null
    
    syslog-enabled
    # 是否以syslog方式记录日志,yes开启no禁用,与该配置相关配置syslog-ident 和syslog-facility local0 分别是指明syslog的ident和facility
    
    databases 16
    #配置可用的数据库个数,默认值为16,默认数据库为0,数据库范围在0-(database-1)之间
    
    always-show-logo yes #4.0以后新增配置
    #是否配置日志显示redis徽标,yes显示no不显示

    三:redis数据类型

    一:数据类型

     二:全局Key命令

     三:String数据类型

    (1)特点:

      (1):其数据结构 一个Key对应一个Value

      (2):其类似是二进制安全类型 即其可以包含任何数据 例如jpg图片或者序列化对象

      (3):最大存储值为512MB

      (4):redis整形也当做字符串处理

    (2)基本命令:

     (3)使用演示

    SET key value [EX seconds] [PX milliseconds] [NX|XX] #设置key为指定的字符串值。

    #参数:
    #EX seconds – 设置键key的过期时间,单位时秒
    #PX milliseconds – 设置键key的过期时间,单位时毫秒
    #NX – 只有键key不存在的时候才会设置key的值
    #XX – 只有键key存在的时候才会设置key的值

    get 通过key取值 key不存在会返回nil

    APPEND key value #如果 key 已经存在,并且值为字符串,那么这个命令会把 value 追加到原来值(value)的结尾。 如果 key 不存在,那么它将首先创建一个空字符串的key,再执行追加操作,这种情况 APPEND 将类似于 SET 操作。

     

    GETRANGE key start end #获取指定key值的索引开始位置和结束位置所对应的值,索引从0开始

    mget 批量获取key值

     

     mset批量设置值

     STRLEN key 获取key长度

    # 了解
    DECR key #数字类型的key自减操作,key类型不是数字则报错
    
    INCR key  #数字类型key 自加操作,与DECR相反
    
    DECRBY key decrement  #数字类型key指定减少数值
    
    INCRBY key increment   #数字类型key指定增加数值,与DECRBY相反

     四:hash数据类型

    (1)特点:

      (1):其Redis中的Hashes类型看成具有String Key和String Value的映射容器。

      (2):所以该类型非常适合于存储值对象的信息。如Username、Password和Age等。

      (3):如果Hash中包含很少的字段,那么该类型的数据也将仅占用很少的磁盘空间。每一个Hash可以存储995701749 个键值对。

      (4):Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。

    (2)基本命令:

    (3)使用演示:

    Hset  设置has key 对应的field的value

     Hmset 批量设置has key 对应的field的value

     hkeys key 获取所有的key值

     hvals key 获取所有key对应的值

     五:list数据类型

    (1)特点:

      (1)列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)

      (2)一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。

    (2)基本命令:

     (3)演示命令

    127.0.0.1:6379> rpush listone i love you
    (integer) 3
    127.0.0.1:6379> lpush listone hello my java
    (integer) 6
    127.0.0.1:6379> lrange listone 0 -1
    1) "java"
    2) "my"
    3) "hello"
    4) "i"
    5) "love"
    6) "you"
    127.0.0.1:6379> linsert listone before love zhangsan
    (integer) 7
    127.0.0.1:6379> lrange listone 0 -1
    1) "java"
    2) "my"
    3) "hello"
    4) "i"
    5) "zhangsan"
    6) "love"
    7) "you"
    127.0.0.1:6379> linsert listone after love lisi
    (integer) 8
    127.0.0.1:6379> lrange listone 0 -1
    1) "java"
    2) "my"
    3) "hello"
    4) "i"
    5) "zhangsan"
    6) "love"
    7) "lisi"
    8) "you"
    127.0.0.1:6379> lpop listone
    "java"
    127.0.0.1:6379> rpop listone
    "you"
    127.0.0.1:6379> lrange listone 0 -1
    1) "my"
    2) "hello"
    3) "i"
    4) "zhangsan"
    5) "love"
    6) "lisi"
    127.0.0.1:6379> lrem listone 1 my
    (integer) 1
    127.0.0.1:6379> lrange listone 0 -1
    1) "hello"
    2) "i"
    3) "zhangsan"
    4) "love"
    5) "lisi"

    六:Set数据类型

    (1)特点:

      (1)Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。

      (2)Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。

      (3)集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

    (2)基本命令

    集合内操作

     集合间操作

     (3)演示命令

    集合内操作

    127.0.0.1:6379> sadd setone java pyhton c c++
    (integer) 4
    127.0.0.1:6379> smembers setone
    1) "c++"
    2) "c"
    3) "pyhton"
    4) "java"
    127.0.0.1:6379> srem setone c
    (integer) 1
    127.0.0.1:6379> smembers setone
    1) "c++"
    2) "pyhton"
    3) "java"
    127.0.0.1:6379> scard setone
    (integer) 3
    127.0.0.1:6379> sismember setone java
    (integer) 1
    127.0.0.1:6379> srandmember setone 2
    1) "c++"
    2) "pyhton"
    127.0.0.1:6379> spop setone 
    "pyhton"
    127.0.0.1:6379> smembers setone
    1) "c++"
    2) "java"
    127.0.0.1:6379> sadd settwo  1 2 3 4 5 6
    (integer) 6
    127.0.0.1:6379> sadd setthree  a b c 3 4 e 2
    (integer) 7
    127.0.0.1:6379> sdiff settwo setthree
    1) "1"
    2) "5"
    3) "6"
    127.0.0.1:6379> sinter settwo setthree
    1) "2"
    2) "3"
    3) "4"
    127.0.0.1:6379> sunion settwo setthree
     1) "5"
     2) "6"
     3) "4"
     4) "b"
     5) "2"
     6) "1"
     7) "a"
     8) "e"
     9) "c"
    10) "3"

    七:Zset数据类型

    (1)特点:

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

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

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

      (4)集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 

    (2)基本命令:

     (3)命令演示

    127.0.0.1:6379> zadd zsetone 10 java
    (integer) 1
    127.0.0.1:6379> zadd zsetone 20 pyhton
    (integer) 1
    127.0.0.1:6379> zadd zsetone 30 c
    (integer) 1
    127.0.0.1:6379> zadd zsetone 40 php
    (integer) 1
    127.0.0.1:6379> zscore zsetone c
    "30"
    127.0.0.1:6379> zcard zsetone
    (integer) 4
    127.0.0.1:6379> zrangebyscore zsetone 10 30
    1) "java"
    2) "pyhton"
    3) "c"
  • 相关阅读:
    SPOJ
    hdu1298(字典树)
    hdu1247(字典树)
    hdu1075(字典树)
    Redisson教程
    Redisson官方文档
    Springboot 防止XSS攻击,包含解决RequestBody 的Json 格式参数
    防止XSS脚本注入-前端vue、后端springboot
    在Intellij IDEA中使用Debug
    使用Hibernate-Validator优雅的校验参数
  • 原文地址:https://www.cnblogs.com/SR-Program/p/12416966.html
Copyright © 2011-2022 走看看