一、Redis简介
Redis是一个非关系型远程内存数据库,它也是一个Key-value模型的数据库。Redis支持5种数据类型(string、list、set、sorted set、hash),可以将各式各样的问题很自然的映射到这些数据结构上。虽然Redis是一个内存数据库,但可通过自身的复制、持久化等特性,很方便的将数据存储到磁盘,并且Redis有着每秒上百万次的请求处理能力。
Redis可用作数据库(Database)、缓存(Cache)和消息代理(Message Broker)。Redis还自带复制、事务、主从复制、Lua脚本、存储项淘汰、高可用Redis Sentinel、Redis Cluster等功能。
二、Redis安装
Redis现在最新版已经升级到了5.0,epel版本为Redis3.0。这里介绍yum安装Redis:
1.yum安装:
~]# yum install -y redis
1 /etc/logrotate.d/redis # 2 /etc/redis-sentinel.conf #哨兵服务配置文件 3 /etc/redis.conf #主程序配置文件 4 /etc/systemd/system/redis-sentinel.service.d 5 /etc/systemd/system/redis-sentinel.service.d/limit.conf 6 /etc/systemd/system/redis.service.d 7 /etc/systemd/system/redis.service.d/limit.conf 8 /usr/bin/redis-benchmark #评估程序 9 /usr/bin/redis-check-aof 10 /usr/bin/redis-check-rdb 11 /usr/bin/redis-cli #Redis客户端程序 12 /usr/bin/redis-sentinel #Redis哨兵服务程序 13 /usr/bin/redis-server #Redis主程序 14 /usr/lib/systemd/system/redis-sentinel.service #CentOS7上的哨兵服务管理程序 15 /usr/lib/systemd/system/redis.service ##CentOS7上的主程序管理程序 16 /usr/libexec/redis-shutdown 17 /usr/share/doc/redis-3.2.12 18 /usr/share/doc/redis-3.2.12/00-RELEASENOTES 19 /usr/share/doc/redis-3.2.12/BUGS 20 /usr/share/doc/redis-3.2.12/CONTRIBUTING 21 /usr/share/doc/redis-3.2.12/MANIFESTO 22 /usr/share/doc/redis-3.2.12/README.md 23 /usr/share/licenses/redis-3.2.12 24 /usr/share/licenses/redis-3.2.12/COPYING 25 /usr/share/man/man1/redis-benchmark.1.gz 26 /usr/share/man/man1/redis-check-aof.1.gz 27 /usr/share/man/man1/redis-check-rdb.1.gz 28 /usr/share/man/man1/redis-cli.1.gz 29 /usr/share/man/man1/redis-sentinel.1.gz 30 /usr/share/man/man1/redis-server.1.gz 31 /usr/share/man/man5/redis-sentinel.conf.5.gz 32 /usr/share/man/man5/redis.conf.5.gz 33 /var/lib/redis #默认数据目录 34 /var/log/redis #默认日志目录 35 /var/run/redis
2.启动Redis
~]# systemctl start redis
~]# ss -lnt #查看监听端口状态,Redis默认监听端口为6379
在没有配置认证的情况下,可以直接登入Redis:
~]# redis-cli 127.0.0.1:6379>
可用 redis-cli -h 获取相关参数选项及功能,常用参数如下:
1 -h <hostname>:Redis服务端的地址 2 -p <port>:指定连接的端口,默认为6379 3 -s <socket>:若不是通过IP+端口则可使用指定socket登录 4 -a <password>:连接Redis的密码,Redis的认证设置只有用户名没有密码。Redis用户名默认就一个,没有权限分级的概念。
连接至Redis后可用 SELECT 选择数据库:
6379:> SELECT 0 #Redis默认用数字来代表库。 OK
3.Redis种5值的类型的基本使用介绍
Redis是Key-value类型,它所有的数据都是键值类型,但值的类型有5种:
1.String
常用指令:
1 SET <key> <value> #将key的值设置为value,value可以是数值。还可以设置数据的有效期限,过期时间。 2 GET <key> #获取key的数据 3 APPEND <key> <value> #追加数据 4 DECR <key> #键值加1 5 DECRBY #键值加指定数值 6 INCR <key> #键值减1 7 INCR <key> #键值减指定数值 8 MSET <key> <value> #一次创建多个键值 9 MGET <key> #一次查看多个键值
例:
1 127.0.0.1:6379> SET name tom 2 OK 3 127.0.0.1:6379> GET name 4 "tom" 5 127.0.0.1:6379> APPEND name jerry 6 (integer) 8 7 127.0.0.1:6379> GET name 8 "tomjerry" 9 127.0.0.1:6379> SET count 0 10 OK 11 127.0.0.1:6379> INCR count 12 (integer) 1 13 127.0.0.1:6379> GET count 14 "1" 15 127.0.0.1:6379> INCR count 16 (integer) 2 17 127.0.0.1:6379> GET count 18 "2" 19 127.0.0.1:6379> INCRBY count 5 20 (integer) 7 21 127.0.0.1:6379> GET count 22 "7" 23 127.0.0.1:6379>
2.List
LIst可以理解为一个队列,如图:
常用指令:
1 LSET <key> <index> <value> #根据索引设定值 2 RPUSH <key> <value> #从右侧增加值 3 LPUSH <key> <value> #从左侧增加值 4 RPOP <key> #从右侧弹出(删除)值,只能是首尾 5 LPOP <key> #从左侧弹出(删除)值,只能是首尾 6 RPUSHX <key> <value> #从右侧增加值,列表必须存在 7 LPUSHX <key> <value> #从左侧增加值,列表必须存在 8 LREM #删除指定值 9 LINDEX <key> <index> #从索引中获得一个元素 10 LLEN <key> #查看Key有多少个元素
例:
1 127.0.0.1:6379> LPUSH weekdays Mon Tue 2 (integer) 2 3 127.0.0.1:6379> LINDEX weekdays 0 4 "Tue" 5 127.0.0.1:6379> LINDEX weekdays 1 6 "Mon" 7 127.0.0.1:6379> RPUSH weekdays Wed Thu 8 (integer) 4 9 127.0.0.1:6379> LINDEX weekdays 2 10 "Wed" 11 127.0.0.1:6379> LINDEX weekdays 3 12 "Thu" 13 127.0.0.1:6379> LPOP weekdays 14 "Tue" 15 127.0.0.1:6379> RPOP weekdays 16 "Thu" 17 127.0.0.1:6379> LINSERT weekdays BEFORE Wed Fri 18 (integer) 3 19 127.0.0.1:6379> LINDEX weekdays 1 20 "Fri"
3.Hash
1 HSET <key> <field> <value> :设定键和值还有下标 2 HMSET <key> <field> <value>:设定多个键和值还有下标 3 HGET <key> <field>:查看键的下标 4 HMGET <key> <field>:查看多个键的下标 5 HKEYS <key>:显示所有定义的key 6 HVALS <key>:显示所有的value 7 HDEL <key> <field>:删除指定键的下标 8 HGETALL <key>:显示所有
例:
1 127.0.0.1:6379> HSET stu1 name tom 2 (integer) 1 3 127.0.0.1:6379> HSET stu1 age 25 4 (integer) 1 5 127.0.0.1:6379> HMSET stu1 gender Male major Computer 6 OK 7 127.0.0.1:6379> HKEYS stu1 8 1) "name" 9 2) "age" 10 3) "gender" 11 4) "major" 12 127.0.0.1:6379> HVALS stu1 13 1) "tom" 14 2) "25" 15 3) "Male" 16 4) "Computer"
4.Set
无序集合数据类型,主要用来求交差并补集的
例:
1 127.0.0.1:6379> SADD tom jack hermes tony 2 (integer) 3 3 127.0.0.1:6379> SADD jerry tony trump real 4 (integer) 3 5 127.0.0.1:6379> SINTER tom jerry 6 1) "tony" 7 127.0.0.1:6379> SUNION tom jerry 8 1) "hermes" 9 2) "jack" 10 3) "tony" 11 4) "real" 12 5) "trump" 13 127.0.0.1:6379> SDIFF jerry tom 14 1) "trump" 15 2) "real" 16 127.0.0.1:6379> SDIFF tom jerry 17 1) "hermes" 18 2) "jack" 19 127.0.0.1:6379> SPOP jerry 20 "trump" 21 127.0.0.1:6379> SMEMBERS tom 22 1) "tony" 23 2) "hermes" 24 3) "jack"
5.Sorted-set
与Set类型相似,但Sort-set属于有序集合。
例:
1 127.0.0.1:6379> ZADD colors 1 red 2 blue 3 yellow 8 green 6 gray 2 (integer) 5 3 127.0.0.1:6379> ZCARD colors 4 (integer) 5 5 127.0.0.1:6379> ZSCORE colors red 6 "1" 7 127.0.0.1:6379> ZRANGE colors 0 6 8 1) "red" 9 2) "blue" 10 3) "yellow" 11 4) "gray" 12 5) "green"
4.订阅
常用指令:
1 PSUBSCRIBE <pattern>:订阅指定频道的指定内容 2 PUBLISH <channel> <message>:生成频道并往频道中生产信息 3 PUNSUBSCRIBE <pattern>:取消订阅指定频道的指定内容 4 SUBSCRIBE <channel>:订阅整个频道 5 UNSUBSCRIBE <channel>:取消订阅整个频道
例: