Redis简介

作者: 唯死撑尔 | 来源:发表于2019-07-12 20:02 被阅读0次

    1.Redis简介

    1.2.Redis是什么

    Redis是一个开源的,使用ANSI C 编写,高性能的Key-Value的NoSQL数据库。

    1.2.Redis特点

    (1)基于内存
    (2)可持久化数据
    (3)具有丰富的数据结构类型,适应非关系型数据的存储需求
    (4)支持绝大多数主流开发语言,如C、C++、Java、Python、R、JavaScript等。
    (5)支持集群模式,高效、稳定。

    1.3数据模型(重点)

    (1)键值对形式。
    (2)Redis的数据结构类型,指的就是Redis值的结构类型。

    image.png

    1.4.Redis作用

    (1)本质是数据库,能存储数据。
    Redis能灵活处理非关系型数据的读、写问题,是对MySQL等关系型数据库的补充。
    新浪微博就是使用Redis集群做数据库。
    (2)缓存数据。
    所谓缓存,就是将数据加载到内存中后直接使用,而不是每次都通过IO流从磁盘上读取。好处:读写效率高。
    而Redis则是将数据直接存储在内存中,只有当内存空间不足时,将部分数据持久化到磁盘????

    2.Redis安装

    2.1.说明

    本课程是在Linux上安装Redis。
    而Redis官方只提供了源码,并没有提供经过编译之后的安装包。
    因此,安装Redis,要先编译、后安装。(即源码安装方式)

    2.2.redis安装步骤

    1)、下载,上传到Linux服务器,并解压
    2)、预编译(实际上是检查编译环境的过程)
    进入目录: cd /opt/soft/redis-3.2.9/deps/jemalloc
    执行预编译 ./configure
    在预编译的过程中,会检测安装redis所需的相关依赖,依次安装即可。
    (a)缺少c编译环境 yum -y install gcc-c++
    预编译不是必须的步骤,它只是在检查编译过程中需要的环境是否满足。
    通常源码包中,都有一个可执行的configure脚本,这个脚本执行预编译的脚本。但是有一些源码包中,没有该文件,可以省略预编译步骤。
    3)、编译 进入/opt/soft/redis-3.2.9/src
    make
    4)、安装 进入/opt/soft/redis-3.2.9/src
    make install
    5)、启动redis服务端(指定配置文件)
    拷贝redis.conf文件到/etc 目录下,方便管理。
    cp /opt/soft/redis-3.2.9/redis.conf /etc/
    /usr/local/bin/redis-server /etc/redis.conf

    image.png

    6)、启动redis客户端,登陆 /usr/local/bin/redis-cli

    image.png

    7)、安装成功

    2.3.redis.conf常用配置说明

    2.3.1.requirepass foobar

    给redis设置密码

    image.png

    在客户端使用auth命令,验证密码。

    image.png

    2.3.2.databases 16

    Redis默认有16个数据库,寻址角标从0开始。
    默认连接db0

    image.png

    客户端使用select命令,切换数据库

    image.png

    2.3.3.port 6379

    指定redis的服务端口,默认6379.

    image.png

    2.3.4.daemonize no

    image.png

    Redis默认关闭后台进程模式,该成yes,redis服务在后台启动。

    2.3.5.loglevel notice(了解)

    image.png

    2.3.6.logfile “ ”

    Redis日志输出目录,默认不输出日志到文件。

    image.png

    2.3.7.dbfilename dump.rdb、dir ./

    指定数据持久化的文件名及目录。

    image.png

    2.4.将redis添加为系统服务

    2.4.1.第一步:开启后台模式

    修改配置文件,将daemonize改为yes

    2.4.2.第二步:创建shell脚本

    说明:Linux系统服务,在/etc/init.d目录下创建redis脚本

    ###########################
    #chkconfig: 2345 10 90
    #description: Start and Stop redis
    PATH=/usr/local/bin:/sbin:/usr/bin:/bin
       
    REDISPORT=6379
    EXEC=/usr/local/bin/redis-server
    REDIS_CLI=/usr/local/bin/redis-cli
       
    PIDFILE=/var/run/redis_6379.pid
    CONF="/etc/redis.conf"
    PASSWORD=$(cat $CONF|grep '^\s*requirepass'|awk '{print $2}'|sed 's/"//g')
       
    case "$1" in
        start)
            if [ -f $PIDFILE ]
            then
                    echo "$PIDFILE exists, process is already running or crashed"
            else
                    echo "Starting Redis server..."
                    $EXEC $CONF
            fi
            if [ "$?"="0" ] 
            then
                  echo "Redis is running..."
            fi
            ;;
        stop)
            if [ ! -f $PIDFILE ]
            then
                    echo "$PIDFILE does not exist, process is not running"
            else
                    PID=$(cat $PIDFILE)
                    echo "Stopping ..."
    if [ -z $PASSWORD ]
    then 
        $CLIEXEC -p $REDISPORT shutdown
    else
        $CLIEXEC -a $PASSWORD -p $REDISPORT shutdown
    fi
                    #$REDIS_CLI -p $REDISPORT SHUTDOWN
                    while [ -x ${PIDFILE} ]
                   do
                        echo "Waiting for Redis to shutdown ..."
                        sleep 1
                    done
                    echo "Redis stopped"
            fi
            ;;
       restart|force-reload)
            ${0} stop
            ${0} start
            ;;
      *)
        echo "Usage: /etc/init.d/redis {start|stop|restart|force-reload}" >&2
            exit 1
    esac
    ##############################
    

    2.4.3.第三步:添加shell脚本可执行权限

    [root@node0927 ~]chmod +x /etc/init.d/redis
    

    2.4.4.第四步:添加Redis开机启动

    [root@node0927 ~]chkconfig redis on
    

    [root@node0927 ~]chkconfig redis on

    3.Redis的键key

    3.1.key的类型

    redis的key 值是二进制安全的,这意味着可以用任何二进制序列作为key值,从形如”foo”的简单字符串到一个JPEG文件的内容都可以。
    空字符串也是有效key值。
    redis建议使用字符串做为key的类型

    127.0.0.1:6379> set user:id:1:username lisi 
    
    OK 
    
    127.0.0.1:6379> set user:id:1:password 111111
    
    OK 
    
    127.0.0.1:6379> set user:id:1:email [<u>lisi</u><u>@</u><u>163.com</u>](mailto:lisi@163.com)
    
    OK 
    
    127.0.0.1:6379> keys user:id:1* #查找有几个属性
    
    1) "user:id:1:password" 
    
    2) "user:id:1:username" 
    
    3) "user:id:1:email" 
    
    127.0.0.1:6379>
    
    

    2.2.key取值规范

    (1)键值不需要太长,消耗内存,在数据中查找这类键值的计算成本较高
    (2)键值不宜过短,可读性较差,通常建议见名知意。

    3.2.1.取值举例

    将如下数据库表中的数据,转换为redis的key-value存储

    id    username    password    email
    1     lisi         111111     lisi@163.com
    
    127.0.0.1:6379> set user:id:1:username lisi      
    OK
    127.0.0.1:6379> set user:id:1:password 111111
    OK
    127.0.0.1:6379> set user:id:1:email lisi@163.com
    OK
    127.0.0.1:6379> keys user:id:1* #查找有几个属性
    1) "user:id:1:password"
    2) "user:id:1:username"
    3) "user:id:1:email"
    127.0.0.1:6379>
    

    3.3.Key命令

    **exists**** key**  
    
    检查给定key是否存在。
    
    **del**** key**
    
    **删除一个key**
    
    **del key1 key2 key3****  删除多个key**
    
    **keys**** pattern**** (模糊查找)**
    
    查找所有符合给定模式 pattern 的key 。
    
    keys * 匹配数据库中所有key 。
    
    keys n?me 匹配name、neme、nfme 等。
    
    keys n* 匹配name、neme、naaaaame等。
    
    keys n[ae]me 只能匹配 name、neme。
    
    **expire** **key** **seconds**
    
    **指定key的过期时间。**
    
    **新添加的key,如果没有指定过期时间,则会一直保存。**
    
    **可以对一个已经带有生存时间的key执行**[**EXPIRE**](#expire)**命令,新指定的生存时间会取代旧的生存时间。**
    
    **ttl** **key   (time to live)**
    
    **查看某个key的剩余过期时间,返回值:**
    
    **-2 表示这个key已经过期,删除掉**
    
    **-1 表示没有设置过期时间**
    
    **其它 表示剩余的生存时间,单位为秒。**
    
    **rename**
    
    **语法格式:rename**** key newkey**
    
    将 key 改名为newkey 。
    
    当 key 和newkey 相同,或者key 不存在时,返回一个错误。
    
    当 newkey 已经存在时,[<u>RENAME</u>](#rename) 命令将覆盖旧值。
    
    **type** key
    
    查看key对应的value的数据结构类型。
    
    **其它key命令见redis帮助文档   ****http://doc.redisfans.com/**
    
    

    3.Redis的值value(数据结构类型)

    Redis的数据结构类型,指的就是redis的值value的类型;
    Redis常用的数据结构类型:string、list、set、sortedSet、hash

    4.4.string类型

        string类型是redis最常用的数据结构类型,存储的值为字符串。
    

    4.4.1.String相关命令

    set key value 
    设置一个key,值为value,类型为String类型;如果这个key已经存在,则更新这个key的值。
    返回值
    1 表示成功
    0 表示失败
    
    setnx key value
    如果这个key不存在,则设置一个key,值为value;如果key存在,则不做更新。
    返回值
    1 表示成功
    0 表示失败
    
    get key
    获取key对应的value值;如果key不存在,则返回nil
    
    
    mget key1 key2 key3
    一次获取多个key的值,如果对应key不存在,则对应返回nil。
    
    incr key
    将 key 中储存的数字值增一,然后返回。
    如果这个key不存在,那么key的值会先被初始化为0,然后再执行INCR
    操作。
        如果这个key对应的value值,不能表示数字,则会返回一个错误。
    incrby key increment
        将key增加指定的步长值。
    decr key
    将 key 中储存的数字值减一,然后返回。
    如果这个key不存在,那么key的值会先被初始化为0,然后再执行INCR操作。
    如果这个key对应的value值,不能表示数字,则会返回一个错误。
    
    Redis的key是单线程模式,这就意味一瞬间只有一个线程能够持有这个key,所以可以使用redis解决部分涉及线程安全的业务。比如,在初级时候通过多线程模拟卖票,使用加锁的方式,保证只有一个线程能够持有锁,进行买票业务。
    
    decrby key decrement
    将key减少对应的步长值。
    
    append key value
    如果key已经存在,则将value追加到这个key原先的value值的末尾。
        如果这个key不存在,则执行set操作。
    
    127.0.0.1:6379> help @string 查看string类型的帮助文档
    127.0.0.1:6379> help set   查看set命令的帮助文档
    

    相关文章

      网友评论

        本文标题:Redis简介

        本文链接:https://www.haomeiwen.com/subject/rqtukctx.html