Redis学习总结
一、redis介绍
1.什么是redis
redis是key-value形式的非关系型的、分布式的、开源的、水平扩展的数据库服务器,数据都缓存在内存中,效率高。
优点:对数据高并发读写,对海量数据的高效率存储和访问,对数据的可扩展性和高可用性
缺点:无法做到太复杂的关系数据模型
2.redis的数据类型
字符串(String)、字典(hash)、列表(list)、集合(set)、有序集合(zset)
1)字符串(String)
-
设置值set:set key value
-
取值get:get key
-
替换字符串setrange:set key value
setrange key 下标 新value
-
设置多个值mset:mset key1 value1 key2 value2
-
取多个值mget:mget key1 key2
-
递增incr:incr key
-
递减decr:decr key
-
指定长度递增incrby:incrby key 长度
-
指定长度递减decrby:decrby key 长度
-
追加append:append 原key 新value
-
获取字符串长度strlen:strlen key
2)字典(hash常用)
- 设置值hset:hset name key value
- 取值hget:hget name key
- 设置多个值hmset:hmset name key1 value1 key2 value2
- 取多个值hmget:hmget name key1 key2
- 集合递增hincrby、递减hdecrby
- 判断是否存在hexists:hexists name key
- 返回所有的键值对的长度hlen:hlen name key
- 删除集合指定字段hdel:hdel name key
- 返回所有字段hkeys:hkeys name
- 返回所有值hvals:hvals name
- 返回所有字段和值hgetall:hgetall name
3)列表(list)
-
从头加入元素(栈)先进后出lpush:lpush 同key value1 lpush 同key value2
查看:lrange 同key 0 -1
-
从尾加入元素(队列)先进先出rpush:rpush 同key value1 lpush 同key value2
查看:lrange 同key 0 -1
-
插入元素linsert:linsert key before 原value 新value
-
将指定下标的元素替换掉lset:lset key 下标 新value
-
删除元素返回删除个数lrem:lrem key 个数 value
-
保存指定key的值范围内的数据ltrim:ltirm key 范围开始下标 范围接数下标
-
从key的头部删除元素并返回删除元素lpop:lpop key
-
从key的尾部删除元素并返回删除元素rpop:rpop key
-
从尾部删除加在头部rpoplpop:rpoplpop 同key 同key
-
返回指定下标的元素lindex:lindex key 下标
-
返回元素的个数lien:lien key
4)集合(set)
-
添加元素sadd:sadd 同key value1 sadd 同key value2
查看:smembers key
-
删除元素srem:srem key
-
随机返回删除的值spop:spop key
-
返回两个集合中的不同元素(以前一个集合为准)sdiff:sdiff key1 key2
-
返回两个集合中的不同元素(以前一个集合为准)存储到另外一个集合中sdiffstore:sdiffsore key1 key2 key3
-
返回集合的交集sinter:sinter key1 key2
-
返回集合的交集存储到另外一个集合中sinterstore:sinterstore key1 key2 key3
-
返回集合的并集sunion:sunion key1 key2
-
返回集合的并集存储到另外一个集合中sunionstore:sunionstore key1 key2 key3
-
从前一个集合移动到后一个集合smove:smove key1 key2 value1
-
集合的元素个数scard:scard key
-
判断元素是否存在集合sismember:sismember key value
-
随机返回一个元素srandmember:srandmember key
5)有序集合(zset) 排行版
-
添加元素zadd:zadd key 序号 value(根据序号自动排序)
查看:zrange key 0 -1 withscore(出现序号)
-
删除元素zrem:zrem key value
-
递增zincrby:zincrby key
-
找到指定区间范围的数据进行返回zrangebyscore:zrangebyscore key 范围开始下标 范围结束下标
-
删除指定序号zremrangebyscore:zremrangebyscore key 序号
3.redis高级命令
- 判断是否存在exists:exists key
- 设置过期时间expire:expire key time
- 查看剩余时间ttl:ttl key
- 取消过期时间persist:persist key
- 选择数据库(16个数据库0-15)select:select 数据库下标
- 将当前数据库中的key移动到其他数据库move:move key 数据库下标
- 随机返回数据库力的一个key randomkey:randomkey key
- 重命名rename:rename key
二、liunx环境下的redis
1.linux虚拟机上下载和安装redis
1)首先需要安装 gcc
yum install gcc-c++
yum install -y tcl
yum install wget
2)获取安装文件(下载版本参考https://redis.io/download)
wget http://download.redis.io/releases/redis-5.0.8.tar.gz
3)将下载好的 redis-5.0.8.tar.gz 移到 /usr/local 文件夹下
mv redis-5.0.8.tar.gz /usr/local
4)进入 /usr/local 目录下进行解压 redis-5.0.8.tar.gz
cd /usr/local
tar -zxvf redis-5.0.8.tar.gz
5)进入解压好的 redis-5.0.8 目录下进行编译 make
cd /usr/local/redis-5.0.8
make
6)进入到 src 目录下进行安装 make install(验证安装:ll 查看 src 目录下有 redis-server、redis-cli即可)
cd /usr/local/redis-5.0.8/src
make install
7)创建两个文件夹放到 redis (命令和配置文件)
mkdir -p /usr/local/redis/etc
mkdir -p /usr/local/redis/bin
8)进入到 redis-5.0.8 下,把 redis.conf 移动到 /usr/local/redis/etc 下
cd /usr/local/redis-5.0.8
cp redis.conf /usr/local/redis/etc/
9)进入到 redis-5.0.8/src 下,把其中的几个命令移动到 /usr/local/redis/bin 下
cd /usr/local/redis-5.0.8/src
mv mkrekeasehdr.sh redis-benchmark redis-check-aof redis-check- dump redis-cli redis-server /usr/local/redis/bin
10)后台启动修改配置文件 redis.conf 中的找到 daemonize 修改为 yes
vi/vim /usr/local/redis/etc/redis.conf
11)启动时并指定配置文件
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
12)查看是否启动(默认端口 6379)
ps -ef | grep 6379
13)进入 redis 客户端
/usr/local/redis/bin/redis-cli
14)退出 redis 客户端
quit
15)退出 redis 服务
- pkill redis-server
- kill 进程号
- /usr/local/redis/bin/redis-cli shutdown
2.redis主从复制
1)主从复制
特点:1、master/slave角色 (master可以拥有多个slave)2、master/slave数据相同 3、降低master读的压力转交从库 (master可写可读,slave只可读)
缺点:1、无法保证高可用 2、没有解决master写的压力
2)主从复制的过程
- master与slave建立连接,发送同步(synchronized)命令
- master会开启一个后台进程,将数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存
- 后台完成保存后,就将文件发送给slave
- slave将此文件保存到内存中
3)主从复制的配置
-
首先要clone服务器,并修改slave的IP地址,切换MAC地址
- 克隆:Linux->右击主服务器->选择管理->选择克隆->选择创建完整克隆->修改名称、位置
- 切换MAC:选择克隆服务器->选择网络适配器->选择高级->点击生成MAC地址(多点几次)
- 修改IP:登录克隆服务器->执行 vi /etc/sysconfig/network-scripts/ifcfg-ens33->修改IP->重启
-
修改配置文件 redis.conf
-
执行 vi /usr/local/redis/etc/redis.conf
-
slaveof
slaveof 192.168.xxx.xxx 6379
-
masterauth
masterauth xxxx
-
-
-
最后执行 info 查看主从服务器
3.redis哨兵
1)首先要clone服务器,并修改slave的IP地址,切换MAC地址
- 克隆:Linux->右击主服务器->选择管理->选择克隆->选择创建完整克隆->修改名称、位置
- 切换MAC:选择克隆服务器->选择网络适配器->选择高级->点击生成MAC地址(多点几次)
- 修改IP:登录克隆服务器->执行 vi /etc/sysconfig/network-scripts/ifcfg-ens33->修改IP->重启
2)到 redis-5.0.8 目录下将 sentinel.conf 移动到 /usr/local/redis/etc/
- cd /usr/local/redis-5.0.8
- cp sentinel.conf /usr/local/redis/etc/
3)在redis下创建两个文件夹,将redis.conf移动到文件夹下,修改配置(参照以上主从配置)
- mkdir /usr/local/redis/6380
- mkdir /usr/local/redis/6381
- cp redis.conf /usr/local/redis/638*
- vi /usr/local/redis/638* /redis.conf
4)修改配置文件 sentinel.conf
- vi /usr/local/redis/etc/sentinel.conf
- prot 26379
- dir /usr/local/redis/etc/sentinel
- daemonize yse
- protected-mode no
- logfile /usr/local/redis/etc/sentinel.log
- sentinel deny-scripts-reconfig yes
- sentinel monitor mumaster 192.168.xxx.xxx 2
- sentinel auth-pass mymaster 123456
- sentinel config-epoch mymaster 0
- sentinel leader-epoch mymaster 0
sentinel known-replica mymaster 127.0.0.1 6381 - sentinel known-replica mymaster 127.0.0.1 6380
- sentinel current-epoch 0
5)启动
- 启动主库:/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
- 启动从库1:/usr/local/redis/bin/redis-serverr /usr/local/redis/6380/redis.conf
- 启动从库2:/usr/local/redis/bin/redis-server /usr/local/redis/6381/redis.conf
- 启动哨兵:/usr/local/redis/bin/redis-server /usr/local/redis/etc/sentinel.conf
4.redis集群
1)创建一个redis-cluster文件夹,然后再里面创建六个文件夹
- mkdir -p /usr/local/redis-cluster
- cd redis-cluster
- mkdir 7001(7001~7006)
2)将redis-5.0.8下的redis.conf分别复制到700* 文件下,修改700* 下的配置文件
- cd /usr/local/redis-5.0.8
- cp redis.conf /usr/local/redis-cluster/700*
- vi redis.conf
- daemonise yes
- port 700*(修改为当前文件夹名)重点
- bind 192.168.xxx.xxx(修改为当前IP)重点
- dir /usr/local/redis-cluster(指定数据文件存放位置)
- cluster-enabled yes(开启集群模式)
- cluster-config-file nodes700* .conf(标识再该集群中——注册)重点
- cluster-node-timeout 5000
- appendonly yes(开启aof模式)
3)由于redis需要ruby,安装ruby
- yunm install ruby
- yunm install rubygems
- gem install redis(安装ruby和redis的接口)
4)分别启动六个redis实例,然后检查是否成功
- /usr/local/redis/bin/redis-server /usr/local/redis-cluster/700* /redis.conf
- netstat tunp1 | grep redis
5)到redis-5.0.8的安装目录下,执行redis-trib.rb
- cd /usr/local/redis-5.0.8/src
- ./redis-trib.rb create -replicas 1 192.168.xxx.xxx:7001 192.168.xxx.xxx:7002 192.168.xxx.xxx:7003 192.168.xxx.xxx:7004 192.168.xxx.xxx:7005 192.168.xxx.xxx:7006
6)启动任意一个客户端(./redis-cli -c -h -p,-c表示集群模式,-h表示指定IP,-p表示端口号)
- /usr/local/redis/bin/redis-cli -c -h 192.168.xxx.xxx -p 700*
7)进行验证
- cluster info(查看集群信息)
- cluster nodes (查看节点列表)
8)操作读写,验证数据
9)关闭集群需要逐个关闭
- /usr/local/redis/bin/redis-cli -c -h 192.168.xxx.xxx -p 700* shutdown