Linux-初识redis

Linux-初识redis实验环境:Centos7.3yum安装redis:清空/etc/yum.repos.d/目录下的所有文件下载阿里云yum源wget-O/etc/yum.repos.d/CentOS-Base.repohttp://mirrors.aliyun.com/repo/Centos-7.re

大家好,欢迎来到IT知识分享网。Linux-初识redis

实验环境:

Centos7.3

yum安装redis:

清空/etc/yum.repos.d/目录下的所有文件

下载阿里云yum源

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

yum clean all

yum makecache

yum -y install epel-release

yum -y install redis

 

编译安装:

上传软件包redis-5.0.8.tar.gz到服务器:

       tar xf redis-5.0.8.tar.gz -C /usr/local/

       cd /usr/local/redis-5.0.8

       make -j 4

       make install

手动添加服务启动脚本:

vim /usr/lib/systemd/system/redis.service

       [Unit]

Description=Redis persistent key-value database

After=network.target

After=network-online.target

Wants=network-online.target

 

[Service]

ExecStart=/usr/bin/redis-server /etc/redis.conf –supervised systemd

ExecStop=/usr/libexec/redis-shutdown

Type=notify

User=redis

Group=redis

RuntimeDirectory=redis

RuntimeDirectoryMode=0755

 

[Install]

WantedBy=multi-user.target

添加服务关闭脚本:

       #!/bin/bash

#

# Wrapper to close properly redis and sentinel

test x”$REDIS_DEBUG” != x && set -x

 

REDIS_CLI=/usr/bin/redis-cli

 

# Retrieve service name

SERVICE_NAME=”$1″

if [ -z “$SERVICE_NAME” ]; then

   SERVICE_NAME=redis

fi

 

# Get the proper config file based on service name

CONFIG_FILE=”/etc/$SERVICE_NAME.conf”

 

# Use awk to retrieve host, port from config file

HOST=`awk ‘/^[[:blank:]]*bind/ { print $2 }’ $CONFIG_FILE | tail -n1`

PORT=`awk ‘/^[[:blank:]]*port/ { print $2 }’ $CONFIG_FILE | tail -n1`

PASS=`awk ‘/^[[:blank:]]*requirepass/ { print $2 }’ $CONFIG_FILE | tail -n1`

SOCK=`awk ‘/^[[:blank:]]*unixsocket\s/ { print $2 }’ $CONFIG_FILE | tail -n1`

 

# Just in case, use default host, port

HOST=${HOST:-127.0.0.1}

if [ “$SERVICE_NAME” = redis ]; then

    PORT=${PORT:-6379}

else

    PORT=${PORT:-26739}

fi

 

# Setup additional parameters

# e.g password-protected redis instances

[ -z “$PASS”  ] || ADDITIONAL_PARAMS=”-a $PASS”

 

# shutdown the service properly

if [ -e “$SOCK” ] ; then

        $REDIS_CLI -s $SOCK $ADDITIONAL_PARAMS shutdown

else

        $REDIS_CLI -h $HOST -p $PORT $ADDITIONAL_PARAMS shutdown

fi

# useradd -r redis -s /sbin/nologin          //创建redis用户

# systemctl daemon-reload              //重新加加载Unit文件

# systemctl start redis               //启动redis

 

 

常用命令:

 

redis获取帮助:

127.0.0.1:6379> help          //获取使用帮助

To get help about Redis commands type:

      “help @<group>” to get a list of commands in <group>

      “help <command>” for help on <command>

      “help <tab>” to get a list of possible help topics

      “quit” to exit

 

说明:redis的help命令非常强大,因为redis支持众多的数据结构,每一种数据结构当中都支持N种操作,因此需要使用 help @group方式来获取某一种数据结构所支持的操作

 

例:获取字符串组所支持有那些操作

127.0.0.1:6379> help @string

 

127.0.0.1:6379> help APPEND   //获取单个命令的使用方法

APPEND key value              //命令方法

summary: Append a value to a key

since: 2.0.0            //说明此命令在哪个版本中引入的

group: string        //该命令所属哪一个组

 

查看都有哪些组:

127.0.0.1:6379> help TAB键,每敲一次轮换一个,带有@则为一个组,不带@则为命令使用

 

切换库(名称空间):

       127.0.0.1:6379> select 1             //表示切换到1号库中,默认为0号库,共16个,0-15

       OK

       127.0.0.1:6379[1]>

13.3.4  键的遵循:

可以使用ASCII字符

键的长度不要过长,键的长度越长则消耗的空间越多

在同一个库中(名称空间),键的名称不得重复,如果复制键的名称,实际上是修改键中的值

在不同的库中(名称空间),键的同一个名称可以重复

键可以实现自动过期

 

13.3.5  Strings的操作:

127.0.0.1:6379> help set

SET key value [EX seconds] [PX milliseconds] [NX|XX]   //命令 键 值 [EX 过期时间,单位秒]

summary: Set the string value of a key

since: 1.0.0

group: string

 

NX:如果一个键不存在,才创建并设定值,否则不允许设定

XX:如果一个键存在则设置建的值,如果不存在则不创建并不设置其值

 

例:

127.0.0.1:6379> set cjk lzll

OK

 

127.0.0.1:6379> set cjk aaa NX

(nil)        //反回提示一个没能执行的操作

 

127.0.0.1:6379> get cjk

“lzll”

 

127.0.0.1:6379> set foo abc XX

(nil)

 

定义一个键并设置过期时间为60秒

127.0.0.1:6379> set fda abc EX 60

OK

 

获取键中的值:

127.0.0.1:6379> help get

GET key

summary: Get the value of a key

since: 1.0.0

group: string

 

例:

127.0.0.1:6379> get cjk

“lzll”

 

添加键中的值(在原有键中附加值的内容):

127.0.0.1:6379> append cjk fda

(integer) 7

127.0.0.1:6379> get cjk

“lzllfda”

 

获取指定键中的值的字符串的长度:

127.0.0.1:6379> strlen cjk

(integer) 7

 

定义整数值:

127.0.0.1:6379> set fda 0           //整数值为0

OK

 

增加键中的整数值:

127.0.0.1:6379> incr fda

(integer) 1

127.0.0.1:6379> incr fda

(integer) 2

127.0.0.1:6379> incr fda

(integer) 3

127.0.0.1:6379> incr fda

(integer) 4

127.0.0.1:6379> get fda

“4”

注:incr命令只能对整数使用

 

删除键:

127.0.0.1:6379> del fda

(integer) 1

127.0.0.1:6379> get fda

(nil)

 

13.3.6  列表的操作:

键指向一个列表,而列表可以理解为是一个字符串的容器,列表是有众多元素组成的集合,可以在键所指向的列表中附加一个值

LPUSH    //在键所指向的列表前面插入一个值(左边加入)

       RPUSH   //在键所指向的列表后面附加一个值(右边加入)

       LPOP      //在键所指向的列表前面弹出一个值(左边弹出)

       RPOP     //在键所指向的列表后面弹出一个值(右边弹出)

       LINDEX  //根据索引获取值,指明索引位置进行获取对应的值

       LSET       //用于修改指定索引的值为指定的值

 

例:

       127.0.0.1:6379> help @list

       LSET key index value

       summary: Set the value of an element in a list by its index

       since: 1.0.0

                    

       指定一个新的列表,在帮助中并没产明哪个命令用于创建一个新的列表,实际上创建一个新的列表使用LPUSH或RPUSH都可以

 

例:

       127.0.0.1:6379> lpush ll cjk        //ll为列表名称,cjk为值(索引)

       (integer) 1

 

获取列表中的值:需要指明索引位置进行获取对应的值

       127.0.0.1:6379> lindex ll 0         //第一个索引则为0

       “cjk”

 

在原有的列表中的左侧加入一个值:

       127.0.0.1:6379> lpush ll fda

       (integer) 2

 

       127.0.0.1:6379> lindex ll 0

       “fda”

 

       127.0.0.1:6379> lindex ll 1

       “cjk”

 

在原有的列表中的右侧加入一个值

       127.0.0.1:6379> rpush ll lzll

       (integer) 3

 

       127.0.0.1:6379> lindex ll 2

       “lzll”

 

       127.0.0.1:6379> lindex ll 1

       “cjk”

 

       127.0.0.1:6379> lindex ll 0

       “fda”

 

修改一个已有的列表中的值:

       127.0.0.1:6379> lset ll 0 abc

       OK

 

       127.0.0.1:6379> lindex ll 0

       “abc”

 

查看列表中的值的数量

       127.0.0.1:6379> llen ll

       (integer) 3

 

在已有的列表中右侧弹出(删除)一个值

       127.0.0.1:6379> rpop ll

       “lzll”

 

在已有的列表中左侧弹出(删除)一个值

       127.0.0.1:6379> lpop ll

       “abc”

       127.0.0.1:6379> lpop ll

       “cjk”

       127.0.0.1:6379> lpop ll

       (nil)

 

redis命令选项:

 

[root@xuegod63 ~]# redis-cli -h

       选项:

       -h <hostname>    指定主机IP

       -p <port>             指定端口socket文件进行通信

       -s <socket>     指定socket文件,如果客户端和服务端都在同一台主机,可以指定socket文件进行通信

       -a <password>   指定认证密码

       -r <repeat>     连接成功后指定运行的命令N次

       -i <interval>   连接成功后每个命令执行完成等待时间,使用-i选项指定

       -n <db>              

 

       [root@xuegod63 ~]# redis-cli -h 192.168.1.63        //连接redis,默认不启用密码认证

或:

       [root@xuegod63 ~]# redis-cli    //使用redis-cli直接连接,默认连接是127.0.0.1 IP

       127.0.0.1:6379> exit    //退出连接

 

 

配置文件详解:

       daemonize no             //表示redis并不会运行成为一个守护进程,如果需要运行成为一个守护进程,则把no,改为yes即可,如果使用服务脚本启动,即使daemonize为no,也会运行为一个守护进程

       port 6379             //监听端口:6379/tcp

       tcp-backlog 511           //指定tcp-backlog的长度

              说明:任何的tcp服务都有可能使用到tcp-backlog功能,backlog是一个等待队列,比如:redis的并发很高时,redis有可能运行不过来时,就连接本地缓存等队列都满了以后,就会使用额外的存储地方,把新来的请求暂存下来,而这个位置则称为backlog

       bind 127.0.0.1              //监听的地址,默认监听在127.0.0.1地址上,可以指定为0.0.0.0地址,或某个特定的地址,或可以指定多个,使用空格分隔即可

       # unixsocket /tmp/redis.sock            //指定使用sock文件通信及sock文件位置,如果服务端和客户都在同一台主机上,建议打开此项,基于sock方式通信可以直接在内存中交换,数据不用再经过TCP/TP协议栈进行封装、拆封

       # unixsocketperm 700                //定义sock文件的访问权限

       timeout 0             //表示当客户端连接成功后,空闲(非活跃、或没有任何数据交互)多长时间则连接超时,0表示不启用此功能

       tcp-keepalive 0            //定义是否启用tcp-keepalive功能

       loglevel notice             //定义日志级别

       logfile /var/log/redis/redis.log        //定义日志文件

       databases 16        //定义redis默认有多少个databases,但是在分布式中,只能使用一个

 

       #### SNAPSHOTTING  ####         //定义RDB的持久化相关

       save <seconds> <changes>       //使用save指令,并指定每隔多少秒,如果发生多大变化,进行存储

       示例:

       save 900 1            //表示在900秒(15分钟内),如果至少有1个键发生改变,则做一次快照(持久化)

       save 300 10          //表示在300秒(5分钟内),如果至少有10个键发生改变,则做一次快照(持久化)

       save 60 10000       //表示在60秒(1分钟内),如果至少有10000个键发生改变,则做一次快照(持久化)

       save “”          //如果redis中的数据不需做持久化,只是作为缓存,则可以使用此方式关闭持久化功能

 

      ######## REPLICATION ####### //配置主从相关

       # slaveof <masterip> <masterport>        //此项不启用时,则为主,如果启动则为从,但是需要指明主服务器的IP,端口

       # masterauth <master-password>     //如果主服务设置了密码认证,那么从的则需要启用此项并指明主的认证密码

       slave-read-only yes            //定义从服务对主服务是否为只读(仅复制)

 

       ##### LIMITS #####                 //定义与连接和资源限制相关的配置

       # maxclients 10000                    //定义最大连接限制(并发数)

       # maxmemory <bytes>             //定义使用主机上的最大内存,默认此项关闭,表示最大将使用主机上的最大可用内存

 

认证和删库:

 

 认证实现方法:

       (1) vim /etc/redis.conf

       # requirepass foobared              //启用此项,并指定密码即可

       requirepass PASSWORD

 

例:

       # vim /etc/redis.conf

       requirepass kill

 

       (1) redis.conf

       # requirepass foobared              //启用此项,并指定密码即可

       requirepass PASSWORD

 

例:

       # vim /etc/redis.conf

       requirepass kill

 

       # redis-cli

       127.0.0.1:6379> select 1

       (error) NOAUTH Authentication required.

 

       127.0.0.1:6379> auth kill

       OK

 

       127.0.0.1:6379> select 1

       OK

       127.0.0.1:6379[1]>

 

清空数据库:

       FLUSHDB:删除当前选择的数据库所有key

       FLUSHALL:清空所有库

 

       127.0.0.1:6379> flushdb

       OK

 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/32540.html

(0)
上一篇 2023-11-26 22:15
下一篇 2023-11-27 20:33

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信