redis学习指南

时间:2023-03-09 19:24:13
redis学习指南

一、redis安装

# 安装最新版

yum install -y epel-release vim atop htop net-tools git wget gcc-c++

yum clean all

yum maakecache

wget -P /usr/local/src http://download.redis.io/releases/redis-5.0.3.tar.gz

cd /usr/local/src && tar zxvf redis-5.0.3.tar.gz

cdredis-5.0.3 && maake

mkdir-p/usr/local/redis/etc

cdsrc &&makeinstallPREFIX=/usr/local/redis

cd../ &&mvredis.conf /usr/local/redis/etc

sed-i's@daemonize no@daemonize yes@g'/usr/local/redis/etc/redis.conf

echo'export PATH=/usr/local/redis/bin:$PATH'>> /etc/profile

source/etc/profile

# 配置开机启动

vim /etc/systemd/system/redis-server.service

-------------------------------------start----------------------------------------

[Unit]

Description=The redis-server Process Manager

After=syslog.target network.target

[Service]

Type=simple

PIDFile=/var/run/redis_6379.pid

ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf

ExecReload=/bin/kill -USR2 $MAINPID

ExecStop=/bin/kill -SIGINT $MAINPID

[Install]

WantedBy=multi-user.target

---------------------------------------end-------------------------------------------

systemctl enable redis-server

systemctl start redis-server

二、redis数据类型

# redis string

redis 设置字符串

127.0.0.1:6379>setmykey abc

OK

127.0.0.1:6379>getmykey

"abc"

EX seconds − 设置指定的到期时间(以秒为单位)。

PX milliseconds-设置指定的到期时间(以毫秒为单位)。

NX-仅在键不存在时设置键。

XX-只有在键已存在时才设置

# redis 加法计算

set a100

incr a

(intege)101

incr a

(integer)102

incrby a 100

(integer)202

incr 每次加1

incrby 加法运算

# redis 创建数组

mset a10 b10 c10

mget a b c

1)"10"

2)"10"

3)"10"

# redis 列表

rpush mylist A

(integer)1

rpush mylist B

(integer)2

lpush mylist first

(integer)3

lrange mylist0-1

1)"first"

2)"A"

3)"B"

del mylist

rpush mylist a

rpush mylist b

lpush mylist c

lrange mylist0-1

1)"c"

2)"a"

3)"b"

lpop mylist

"c"

lrange mylist0-1

1)"a"

2)"b"

rpop mylist

"b"

lrange mylist0-1

1)"a"

rpush 插入一个新的列表在尾部

lpush 插入一个新的列表在首部

lrange 检索0第一个-1最后一个

del 删除列表

lpop 从前将列表中元素剔除

rpop 从后将列表中元素剔除

redis 不存储空列表,当列表中元素被删除后,自动删除空列表

# redis hashes

hmset user:a usernam sb birth10verfile1

hget user:a username

"sb"

hget user:a birth

"10"

hgetall user:a

1)"username"

2)"sb"

3)"birth"

4)"10"

5)"verfile"

6)"1"

hmget user:a username birth c

1)"sb"

2)"10"

3) (nil)

hincrby user:a birth10

(integet)20

redis hashes 字符串和字符字段之间的映射,展现对象的完美数据类型

hmset 设置多域的hash表

hgetall 获取指定key的所有信息

hget 获取单域的信息

hmget 获取多域的信息,返回为数组

hincrby hash字符加法运算

# redis 集合

set为无序集合,不包含相同的元素,支持不通集合合并,交集,找出不同的元素

sadd myset a b c

(integer)3

smembers myset

1)"a"

2)"b"

3)"c"

sismember myset1

(integer)1

sismember myset0

(integer)0

sismember myset a

(integer)1

sismember mys3

(integer)0

sadd 创建无序集合

smember 查看集合

sismember 匹配集合名称,内容及个数,成功返回为1,失败返回为0

有序集合,集合的成员唯一,前面有参数用来排序,访问速度快,提高性能

zadd hackers1"a"2"b"3"c"

(integer)1

zrange hackers0-1

1)"a"

2)"b"

3)"c"

zrevrange hackers0-1

1)"c"

2)"b"

3)"a"

zrange hackers0-1withscores

1)"a"

2)"1"

3)"b"

4)"2"

5)"c"

6)"3"

zadd 创建有序集合,集合名称必须为两位以上包含两位,需要加上序号参数

zrange 正序查看集合

zrevrange 倒序查看集合

withscores  返回参数记录值

三、redis常用命令

# exists and del

setmykey a

OK

exists mykey

(integer)1

del mykey

(integer)1

exits mykey

(integer)0

exists 判断key是否存在,存在返回为1,不存在返回为0,del删除key

# type and keys

setmykey a

OK

type mykey

string

keys my*

1)"myset"

2)"mykey"

type  返回key的类型

keys my* 返回匹配的key列表

# randomkey and clear

randomkey 随机获得一个已经存在的key

clear清除界面

# rename and renamenx

rename oldname newname 改key的名字,新建如果存在将会被替换

renamenx oldname newname 改key的名字,新建如果存在将会失败

dbsize 返回当前数据库key的总数

# 限制key的生存时间

setmykey a

expire mykey10

getkey

"a"

getkey

(nil)

expire 设置key 的过期时间

ttl key  查询key的过期时间

flushdb  清除当前数据库中所有的键

flushall 清除所有数据库中的所有键

# redis 设置命令

configgetrequirepass (查看密码)

configsetrequirepass123

auth123

configget*max-*-xxx*  查询数据最大数量

config resetstat  重置数据统计

# info 查看信息

1、server:redis server常规信息

2、clients:client 连接信息

3、memory:内存信息

4、persistence:rdb and aof 相关信息

5、stats:常规信息

6、replication:Master/slave 请求信息

7、cpu:cpu占用信息

8、cluster:redis集群信息

9、keyspace:数据库信息统计

10、all:返回所有信息

11、默认设置信息

四、redis管理

# 设置密码

方法一:

grep-nrequirepass /etc/redis/redis.conf

sed-i's@# requirepass@requirepass test@g'/etc/redis/redis.conf

serviceredis-serverrestart

redis-cli

auth test

redis-cli-atest

方法二:

configsetrequiress test

# 主从复制

1、master可以拥有多个slave

2、多个slave可以连接在同一个master上,还可以连接其他的slave,当master宕机后,相连的slave转变为master

3、主从复制不会阻塞master,再同步数据时,master 可以继续处理client请求

4、slave与master建立连接,发送sync同步命令

5、master会启动一个后台进程,将数据快照保存到文件中,同时master主进程会开始收集新的写命令并缓存

6、后台完成保存后,就将此文件发送给slave

7、slave将此文件保存在磁盘上

配置主从

----------------------------------------------start----------------------------------------

vim/usr/local/redis/redis.conf  (主)

port6379

bind172.16.5.1127.0.0.1

daemonizeyes

pidfile        /var/run/redis_6379.pid

requirepass    redis

vim/usr/local/redis/redis.conf  (从)

port6380

bind172.16.5.2127.0.0.1

daemonizeyes

pidfile        /var/run/redis_6380.pid

masterauth     redis

登录客户端(主)

redis-cli-aredis

127.0.0.1:6379>setname redis-master

127.0.0.1:6379> info repliaction

登录客户端(从)

redis-cli-aredis

配置主从

127.0.0.1:6380> slaveof 127.0.0.16379

127.0.0.1:6380> info repliaction

127.0.0.1:6380>get name

# 事务

只能client发起事务的命令可以连续执行,不会插入其他client命令,通过multi命令开始事务,后续的命令不会执行,被存放到一个对列中,当执行exec命令,redis顺序执行对列中所有命令,如果执行出错不会回滚。

multi

setname a

setname b

exec

getname

# 持久化

1、快照,将数据放到文件中,默认方式

将内存中的数据已快照的方式写入二进制文件中,默认文件为dunp.rdb,可以通过配置设置自动作快照持久化的方式,可配置redis在n秒内如果超过m个key被修改就自动保存快照。

save 9001900秒内如果超过超过1个key被修改,则发起快照保存

save 30010300秒内如果超过10个key被修改,则快照保存

2、append-only file 将读写操作保存在文件中

由于快照方式在一定时间间隔作一次,所以如果redis意外down掉的话,就会丢失最后一次次快照后的所有修改

aof 比快照有更好的持久化,使用aof,redis将每一个收到的写命令都通过wirte函数写入到文件中当redis启动会通过重新执行文件中保存的写命令来在内存中重新建立整个数据的内容

使用fsync函数强制os写入到磁盘的时间

appendonlyyes               // 启用aof持久化

#appendfsync always    //  收到命令就写入磁盘,最慢,数据最完整

appendfsync everysec   // 每秒写入磁盘一次,性能和持久化方面做了折中

#appendfsync no          // 完全依赖os,性能最好,持久化没有保证