Linux下安装Docker
搜索Redis镜像
docker search redis
拉取最新版本的redis镜像(不带版本,则是拉取最新版本的)
docker pull redis
准备redis.conf文件
创建目录:data/redis
mkdir -p /data/redis
创建redis.conf文件
touch redis.conf
编辑redis.conf
vim /data/redis/redis.conf
在文件中写入
#允许外网访问
bind 0.0.0.0
daemonize NO
protected-mode no
requirepass 123456
创建Redis容器
docker run -p 6379:6379 --name redis -v /data/redis/redis.conf:/etc/redis/redis.conf -v /data/redis/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes
命令说明:
- -p 6379:6379 : 将容器的6379端口映射到主机的6379端口
- –name redis : 容器名字
- -v /data/redis/redis.conf:/etc/redis/redis.conf : 将主机中配置文件挂载到容器中
- -v /data/redis/data:/data : 将主机中data挂载到容器的/data
- redis-server --appendonly yes : 在容器执行redis-server启动命令,并打开redis持久化配置
- redis-server /etc/redis/redis.conf : 容器中以配置文件方式启动redis
连接测试:
Redis
-
下载redis:
wget http://download.redis.io/releases/redis-5.0.5.tar.gz -
安装gcc环境:(centos6.5自带)
-
解压到当前文件夹:tar -xvf redis-5.0.5.tar.gz
-
执行make命令
-
执行命令:make install PREFIX=/usr/local/redis
-
启动redis:
方式1:前端启动:执行redis-server
方式2:后端启动:1. 将解压redis配置文件移动到安装目录下 :mv redis.conf /usr/local/redis/bin 2. 编辑配置文件redis.conf: 将daemonize的值修改为yes 将bind 127.0.0.1注释 将protected-mode改为no 3. 执行命令启动redis:./redis-server redis.conf 4. 关闭redis:./redis.cli shutdown
-
连接redis服务:
- redis自带的客户端:执行命令:./redis-cli -h 127.0.0.1 -p 6379 //-h表示服务器ip,-p表示连接端口号
- redis desktop manager连接redis
Redis数据类型
-
redis默认有0-15个数据库,切换数据库: select 0-15
-
redis存储String数据:
//存储一个键值 set username xdd //set Key value get username //一次存储多个键值 mset name xdd password 123 mget name password //取值并赋值 getset username sl //删除 del username //数值递增 incr age //age值+1 incrby age 2 //age值+2 //数值递减 decr age //数值-1 decrby age 2 //数值-2 //字符串追加 append name sl //获取字符串长度 strlen name
-
redis存储Hash数据:
hset user username xdd //一次设置一个字段 hget user username //一次获取一个字段 hmset user gender male age 1 //一次设置多个字段 hmget user gender age //一次获取多个字段 hsetnx user age 1 //如果字段age不存在则插入,否则不执行 hgetall user //获取所有的字段值 hdel user password //删除字段 hincrby user age 1 //age字段值+1 hexists user age //判断是否存在age字段 hkeys/hvals user //获取所有的key或者value hlen user //总共有多少个字段
-
redis存储list数据
lpush list:1 1 2 3 //向左边添加数据 rpush list:1 0 //向列表右边增添数据 lrange list:1 0 4 //查看列表索引0~4的数据,索引-1表示到末尾 lpop list:1 //从列表左面弹出一个数据 rpop list:1 //从列表右面弹出一个数据 llen list:1 //获取列表的元素个数 lrem list:1 count num //count>0时从左面删除第一个num,count<0时从右面删除第一个num,count=0时删除所有num lindex list:1 2 //获取指定索引的value lset list:1 2 100 //设置指定索引的value ltrim list:1 3 5 //只保留索引为3~5的元素 linsert key BEFORE|AFTER pivot value // 向指定的pivot前或者后插入数据 rpoplpush list:1 list:2 //将列表list:1的最后一个数据转移到list:2中
-
redis存储set数据
sadd set1 a b c //增加元素 srem set1 a b //删除元素 smembers set1 //获取所有的元素 sismember set1 a //判断元素是否在集合中 sdiff set1 set2 //计算两个集合的差集 sinter set1 set2 //两个集合的交集∩ sunion set1 set2 //两个集合的并集∪ scard set1 //获取集合的元素个数 spop set1 2 //从集合中随机弹出2个元素
-
redis存储sortedset数据(zset)
zadd english:scoreboard 80 zhangsan 90 lisi //添加元素 zscore english:scoreboard zhangsan //获取元素的数值 zrem english:scoreboard zhaoliu //删除元素 zrange english:scoreboard start stop withscores //获取排名在某个范围的元素(升序) zrevrange english:scoreboard start stop //获取排名在某个范围的元素(降序) zrangebyscore english:scoreboard 80 90 //获取指定范围分数的元素 zrangebyscore english:scoreboard 80 90 limit 0 2 //分页显示 zincrby english:scoreboard 1 zhangsan //增加否个元素的分数 zcard english:scoreboard //获取集合元素的个数 zcount english:scoreboard 80 90 //获取指定范围元素的个数 zremrangebyrank english:scoreboard 0 0 //按照排名范围删除元素 zremrangebyscore english:scoreboard 80 90 //根据分数范围删除元素 zrank english:socreboard zhangsan //获取元素的排名(升序) zrevrank english:socreboard zhangsan //获取元素的排名(降序)
-
Keys命令
expire name 10 //设置name的存活时间为10s ttl name //查看存活时间 -1表示未设置存活时间,-2表示死亡 keys user* //查询以user开头的所有的key exists name //判断是否存在指定的key rename name username //重命名 type username //返回值得数据类型(String,Hash,list,set,zset)
redis持久化
-
RDB持久化:通过快照完成,redis默认采用的持久化方式
save 900 1 //每900s至少有一个键被保存到快照 save 300 10 save 60 10000
-
AOF持久化:操作一次,保存一次
- 开启AOF持久化:编辑redis.conf文件,修改appendonly为yes
jedis操作redis
-
使用jedis
//连接到数据库 Jedis jedis=new Jedis("192.168.239.132",6379); //选择需要操作的数据库 jedis.select(0); //存储获取数据 jedis.set("user","xdd"); String user=jedis.get("user"); //关闭连接 jedis.close();
-
使用JedisPool
JedisPool pool=new JedisPool("192.168.239.132",6379); Jedis jedis=pool.getResource();
主从复制
-
在redis目录下复制出从机:cp bin/ bin2 -r
-
编辑redis.conf文件:
修改:slaveof 192.168.239.132 6379 port:6380
-
启动从机redis
redis集群
-
搭建Ruby 环境
yum install ruby yum install rubygems
-
将redis-3.0.0.gem复制到/usr/local目录下
-
执行命令:gem install /usr/local/redis-3.0.0.gem
-
将redis源码下src目录下的redis-trib.rb复制到/usr/local/redis/redis-cluster
-
复制出6个redis服务器在/usr/local/redis/redis-cluster,端口设计为7001~1006
-
修改配置文件redis.conf:将cluster-enabled yes 取消注释,并修改相应的端口号
-
通过批处理开启redis服务
在redis-cluster下创建可执行文件:startall.shcd 7001 ./redis-server redis.conf cd ../7002 ./redis-server redis.conf cd ../7003 ./redis-server redis.conf cd ../7004 ./redis-server redis.conf cd ../7005 ./redis-server redis.conf cd ../7006 ./redis-server redis.conf cd ..
然后赋予执行权限:chmod 744 startall.sh
然后执行:./startall.sh -
创建集群
执行命令:./redis-trib.rb create --replicas 1 192.168.239.133:7001 192.168.239.133:7002 192.168.239.133:7003 192.168.239.133:7004 192.168.239.133:7005 192.168.239.133:7006
- - - -可能会报错:然后提示执行命令:redis-cli --cluster create 192.168.239.133:7001 192.168.239.133:7002 192.168.239.133:7003 192.168.239.133:7004 192.168.239.133:7005 192.168.239.133:7006 --cluster-replicas 1 -
连接集群
./redis-cli -p 7006 -c //-c表示集群方式连接
查看集群信息:cluster info
查看节点:cluster nodes
添加主节点:./redis-trib.rb add-node 192.168.239.133:7007 192.168.239.133:7001
删除节点:./redis-trib.rb del-node 192.168.239.133:7006 a1304f96158dc55a39abb5a67500c593a74d8342 -
jedis连接redis集群
public void test3(){ Set<HostAndPort> nodes=new HashSet<HostAndPort>(); nodes.add(new HostAndPort("192.168.239.133",7001)); nodes.add(new HostAndPort("192.168.239.133",7002)); nodes.add(new HostAndPort("192.168.239.133",7003)); nodes.add(new HostAndPort("192.168.239.133",7004)); nodes.add(new HostAndPort("192.168.239.133",7005)); nodes.add(new HostAndPort("192.168.239.133",7006)); JedisCluster cluster=new JedisCluster(nodes); cluster.set("test","is my test"); String test=cluster.get("test"); System.out.println(test); cluster.close(); }