文档章节

redis常用命令及安全Redis集群环境搭建

陈小扁
 陈小扁
发布于 2016/08/26 17:12
字数 1736
阅读 103
收藏 6

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

redis 安装

在centos 上很简单

yum install redis

 即可完成redis的安装

 

安装redis

cd /usr/local/redis/src
make && make install

 

安装redis3.2.8

1.tar -zxvf redis-3.2.8.tar -C /usr/local/
2.cd redis-3.28/src
3.make && make install
4.cp redis-server redis-trib.rb /usr/local/bin
5.mv redis.conf /etc/redis/

 

启动redis

方式一 service redis start

方式二
redis-server /etc/redis/redis.conf

 

关闭服务

redis-cli -h localhost -p 8000 shutdown;

 

本地连接到远程redis命令:

redis-cli -h 192.168.66.88 -p 6379;分别是远程主机和端口

本地可能连接远程redis出现错误 connect refused 解决办法

/etc/redis/redis.conf配置如下:

取消bind注释 
将 bind 127.0.0.1

改为
bind 0.0.0.0

 

redis配置密码

yum方式安装的redis配置文件通常在/etc/redis.conf中,打开配置文件找到

#requirepass foobared  

去掉行前的注释,并修改密码为所需的密码,保存文件

requirepass myRedis

master配置了密码,slave如何配置

若master配置了密码则slave也要配置相应的密码参数否则无法进行正常复制的。
slave中配置文件内找到如下行,移除注释,修改密码即可

 

重启redis

sudo service redis restart;//重启redis服务

 

客户端通过密码访问redis

redis-cli -h 127.0.0.1 -p 6379 -a my_redis;//密码为my_redis

 

Redis 安全隐患

推荐参考文章 https://segmentfault.com/a/1190000007624311

 

redis命令介绍

redis官方命令:https://redis.io/commands

1.set hello "world";//key:hello,value是world
2.get hello;//println "world"
3.keys *;//list all keys in redis
4.keys *h*;//list all keys which contains 'h'
5.del hello;//delete the key "hello"
6.randomkey;//returns a random key from redis 
7.exists hello;//判断key是否存在 返回1 表示key存在 返回0表示不存在
8.rename hello world;//给key重命名
9.type key;//返回key所存储的值的类型 返回值有以下内容:
none(key不存在)
string(字符串)
list(列表)
set(集合)
zset(有序集)
hash(哈希表)
10.sort key;//默认情况按照从小到大的顺序排序
flushdb;//删除当前数据库中的所有Key
flushall; //删除所有数据库中的key
11.dbsize;//查看key的个数
12.expire key 1000;//设置key的过期时间
13.ttl key;查询key剩余过期时间
14.persist key;//取消生存时间


 

 Java操作redis常见使用操作

分别操作String,List,Set,HashMap,SortedSet等操作

package com.arch.redis;

import com.arch.redis.constants.Constants;
import com.arch.redis.utils.RedisUtils;
import org.junit.Test;
import redis.clients.jedis.Jedis;

import java.util.HashMap;
import java.util.List;
import java.util.Map;


public class RedisOperationTest {
    private static Jedis jedis = null;

    static {
        jedis = RedisUtils.getConnection(Constants.REDIS_HOST, Constants.REDIS_PORT);
    }

    /**
     * redis操作字符串
     */
    @Test
    public void testString() {
        jedis.set("name", "xiaobian");
        System.out.println(jedis.get("name"));

        jedis.append("name", " is my lover");//拼接
        System.out.println(jedis.get("name"));

        jedis.del("key");//删除key
        System.out.println(jedis.get("key"));

        jedis.mset("name", "chenxiaobian", "age", "23", "address", "shanghai");
        System.out.println(jedis.get("age"));

        jedis.incr("age");//进行加1操作
        System.out.println(jedis.get("age"));
        System.out.println(jedis.get("name") + "-" + jedis.get("age") + "-" + jedis.get("address"));
    }

    /**
     * redis操作map
     */
    @Test
    public void testMap() {
        Map<String, String> map = new HashMap<String, String>();
        map.put("name", "xiaobian");
        map.put("age", "22");
        map.put("qq", "751652064");

        //存map
        jedis.hmset("user", map);
        List<String> rsmap = jedis.hmget("user", "name", "age", "qq");
        System.out.println(rsmap);

        //删除map中的某个键值
        jedis.hdel("user", "age");
        System.out.println(jedis.hget("user", "age"));
        System.out.println(jedis.hlen("user"));//返回key为user的键中存放的值的个数
        System.out.println(jedis.exists("user"));
        System.out.println(jedis.hkeys("user"));//返回所有的key
        System.out.println(jedis.hvals("user"));//返回所有value
    }

    /**
     * redis操作list
     */
    @Test
    public void testList() {
        jedis.del("fruit");
        System.out.println(jedis.lrange("fruit", 0, -1));

        jedis.lpush("fruit", "apple");
        jedis.lpush("fruit", "orange");
        jedis.lpush("fruit", "pear");
        System.out.println(jedis.lrange("fruit", 0, -1));

        jedis.rpush("fruit", "apple");
        System.out.println(jedis.lrange("fruit", 0, -1));
    }

    /**
     * 操作set
     */
    @Test
    public void testSet() {

        jedis.sadd("users", "zhangsan");
        jedis.sadd("users", "wangwu");
        jedis.sadd("users", "lihong");

        //获取所有加入的value
        System.out.println(jedis.smembers("users"));
        System.out.println(jedis.sismember("users", "zhangsan"));

        //随机返回users中元素value
        System.out.println(jedis.srandmember("users"));

        //返回集合的元素个数
        System.out.println(jedis.scard("users"));
    }

    /**
     * redis排序
     */
    @Test
    public void testSort(){
        jedis.del("nihao");

        jedis.rpush("nihao","1");
        jedis.rpush("nihao","6");
        jedis.rpush("nihao","3");

        System.out.println(jedis.lrange("nihao",0,-1));
        //排序
        System.out.println(jedis.sort("nihao"));
        System.out.println(jedis.lrange("nihao",0,-1));
    }
}

 

Redis&&Memcached

如果简单地比较Redis与Memcached的区别,大多数都会得到以下观点:

     1 .Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。

     2 .Redis支持数据的备份,即master-slave模式的数据备份。

     3 .Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。

     4.Redis可以实现主从复制,实现故障恢复。

     5.Redis的Sharding技术: 很容易将数据分布到多个Redis实例中

 

Redis集群环境搭建

官方文档 https://redis.io/topics/cluster-tutorial

参考(http://www.cnblogs.com/wuxl360/p/5920330.html)

可能会遇到的问题http://www.cnblogs.com/carryping/p/7447823.html

  redis集群最少需要创建6个node,创建集群的命令为:

redis-trib.rb  create  --replicas  1  192.168.102.245:7000 192.168.102.245:7001  192.168.102.245:7002  192.168.102.246:7003  192.168.102.246:7004  192.168.102.246:7005

需要安装ruby 通过下面命令

yum -y install ruby ruby-devel rubygems rpm-build
gem install redis

 

连接方式可通过:

redis-cli -h 192.168.31.245 -c -p 7002  

加参数 -c 可连接到集群,因为上面 redis.conf 将 bind 改为了ip地址,所以 -h 参数不可以省略

 

关于redis在实际项目中使用的代码

业务层性能瓶颈里面使用redis

Product product = redisDao.get(productId);//访问redis查看是否存在该商品

//没有该商品
if(product == null){
    //访问数据库查询
	product = productDao.queryById(productId);
    
    //数据库中没有该商品
	if(product == null){
       new ApplicationException("该产品不存在");
	}else{
       //将商品放入redis
       redisDao.put(product);
	}
}

 

Redis高级特性介绍

1.pipelining

导入大量数据到redis中,这种方式很慢,很增加性能开销

cat prod_data|redis-cli -h 106.15.38.134 -p 7000

 

redis提供了pipe方式

cat prod_data |redis-cli -h localhost -p 7000 --pipe

可能执行下面命令会出现下面这个错误

ERR unknown command 'ET'
ERR unknown command 'ET'
ERR unknown command 'ET'

导致这个问题的原因是redis-cli中只支持doc格式的换行符 \r\n ,如果你在Linux下、Mac下或者Windows下创建的文件,最好都转个码。没有转码的文件,执行会失败

执行转码命令

unix2dos test.txt 

如果提示

-bash: unix2dos: command not found

提示没有这个命令,就需要进行安装,执行下面命令进行安装

 yum install unix2dos -y

再进行转码

unix2dos test.txt 

 

最后执行数据导入

cat prod_data |redis-cli -h localhost -p 7000 --pipe

 

prod_data内容为:

SET	sjnq1705031737271628	0
SET	sys11705031737271628	0
SET	syvm1705031737271638	0
SET	seuy1705031737271638	0
SET	seuy1705031737271648	0
SET	sbuk1705031737271648	0
SET	snq81705031737271658	0
SET	snq81705031737271668	0
SET	s6qr1705031737271668	0
SET	s1p51705031737271678	0
SET	s1p51705031737271688	0
SET	grbt1705031737271688	0
SET	gl3l1705031737271698	0
SET	gl3l1705031737271708	0
SET	gras1705031737271708	0
SET	grap1705031737271718	0
SET	gt6t1705031737271718	0
SET	gt7s1705031737271728	0
SET	g6291705031737271728	0
SET	g6st1705031737271738	0
SET	gcy71705031737271738	0
SET	gogl1705031737271748	0
SET	gogo1705031737271758	0
SET	gdlc1705031737271758	0
SET	gp2p1705031737271768	0
SET	g3p81705031737271778	0
SET	g9yx1705031737271788	0
SET	g9yx1705031737271798	0
SET	gw2h1705031737271808	0
SET	ganh1705031737271818	0
SET	ga1p1705031737271828	0
SET	gsun1705031737271828	0
SET	gsnl1705031737271838	0
SET	gylq1705031737271838	0
SET	gp271705031737271848	0
SET	47v11705031737271848	0
SET	45nq1705031737271858	0
SET	45451705031737271868	0
SET	4lgn1705031737271868	0
SET	4lgn1705031737271878	0
SET	46xp1705031737271878	0
SET	4td21705031737271888	0
SET	4qst1705031737271898	0
SET	4qs51705031737271908	0
SET	4i2i1705031737271908	0
SET	4i241705031737271918	0
SET	46ja1705031737271918	0
SET	46f11705031737271928	0
SET	4w351705031737271928	0
SET	4w3t1705031737271938	0
SET	4a2a1705031737271938	0
SET	41p11705031737271948	0
SET	41p11705031737271958	0
SET	4hbt1705031737271968	0
SET	4h1p1705031737271978	0
SET	42wa1705031737271978	0
SET	4re91705031737271988	0
SET	afvn1705031737271998	0
SET	afvn1705031737272008	0
SET	a9281705031737272008	0
SET	a9281705031737272018	0
SET	a28c1705031737272018	0
SET	a2ki1705031737272028	0
SET	autu1705031737272028	0
SET	autu1705031737272038	0
SET	ahv41705031737272038	0
SET	ahv41705031737272048	0
SET	airn1705031737272058	0
SET	airn1705031737272068	0
SET	avhi1705031737272068	0
SET	a8kc1705031737272078	0
SET	aikd1705031737272088	0
SET	aikd1705031737272098	0

参考redis官网https://redis.io/topics/mass-insert

 

Redis学习参考文档

1.https://segmentfault.com/a/1190000006836530

2.http://www.voidcn.com/blog/boonya/article/p-4828879.html

© 著作权归作者所有

陈小扁

陈小扁

粉丝 53
博文 87
码字总数 71417
作品 0
浦东
高级程序员
私信 提问
Redis从单机到集群,一步步教你环境部署以及使用

Redis作为缓存系统来说还是很有价值的,在大数据方向里,也是需要有缓存系统的。一般可以考虑tachyon或者redis,由于redis安装以及使用更简单,所以还是优先考虑了它。那么在一些场景下为了保...

青夜之衫
2017/12/04
0
0
redis演练聚集

redis演练(1) 搭建redis服务 redis演练(2) 最全redis命令列表 redis演练(3) redis事务管理 redis演练(4) redis基准测试 redis演练(5) redis持久化 redis演练(6) redis主从模式搭建 redis运维...

randy_shandong
2016/09/11
0
0
redis安装、持久化、数据类型、常用操作、操作键值、安全设置、慢查询日志、存储session、主从配置、集群介绍、集群搭建配置、集群操作,php安装redis扩展

21.9 redis介绍 21.10 redis安装 21.11 redis持久化 21.12 redis数据类型 21.13/21.14/21.15 redis常用操作 21.16 redis操作键值 21.17 redis安全设置 21.18 redis慢查询日志 21.19 php安装r...

tobej
07/12
66
0
Redis Cluster集群部署搭建

在Oracle的路上走了许多年,换换感觉,尝试一下新的知识,也是一个不错的感觉。Redis,一个超轻量化的内存数据库,只做一小块数据库功能实现,却非常优秀的一个产品。今天,就分享一下安装R...

hsbxxl
2017/09/03
0
0
Redis-3.2主从复制与集群搭建

Redis-3.2主从复制与集群搭建 一、Redis 主从搭建 1.下载并解压 yum install -y gcc gcc-c++ pcre zlib pcre-devel tcl wget http://download.redis.io/releases/redis-3.2.4.tar.gztar -zx......

KaliArch
2017/03/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

一篇文章教你轻松使用fastjson

前言 只有光头才能变强。 文本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y JSON相信大家对他也不陌生了,前后端交互中常常就以JSON来进行数据交换。而有的...

Java3y
32分钟前
4
1
分组功能(tapply,by,aggregate)和* apply系列

每当我想在R中做“ map” py任务时,我通常都会尝试在apply系列中使用一个函数。 但是,我从未完全理解它们之间的区别-{ sapply , lapply等}如何将函数应用于输入/分组输入,输出将是什么样...

javail
33分钟前
4
0
PHP环境搭建之单独安装

还在使用PHP集成环境吗?教你自定义搭建配置PHP开发环境,按照需求进行安装,安装的版本可以自己选择,灵活性更大。 目录: 1. 安装Apache 2. 安装PHP 3. 安装MySQL 4. 安装Composer 观看:h...

不冷的大叔
44分钟前
4
0
为什么JavaScript变量会以美元符号开头?

我经常看到JavaScript带有以美元符号开头的变量。 您何时/为什么选择以这种方式为变量添加前缀? (我不是在问您在jQuery和其他语言中看到的$('p.foo')语法,而是普通变量,例如$name和$orde...

技术盛宴
48分钟前
4
0
TCP 三次握手

https://my.oschina.net/u/4198159/blog/3141874

奋斗的小牛
57分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部