大家好,欢迎来到IT知识分享网。
实验环境:
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