redis多实例&分片&jedis的使用

接下来学习redis多实例的部署、数据分片,以及jedis API的使用。

redis多实例部署

一般单个redis的进程是不能满足实际需求的,需要在单台服务器上部署多个redis进程,充分发挥cpu的效能,多台服务器上的redis进程将组成庞大的集群,多的一般部署达到数千个redis进程。

暂时不考虑高可用的情况,下面在一台centos6.5上部署三个redis实例,要想实现部署需要修改redis.conf文件,需要修改服务端口号、日志文件编号、rdb文件编号等,下面边查看常用配置边修改。

(1)units单位,定义了基本的度量单位,不区分大小写。

   8 # Note on units: when memory size is needed, it is possible to specify
   9 # it in the usual form of 1k 5GB 4M and so forth:
  10 #
  11 # 1k => 1000 bytes
  12 # 1kb => 1024 bytes
  13 # 1m => 1000000 bytes
  14 # 1mb => 1024*1024 bytes
  15 # 1g => 1000000000 bytes
  16 # 1gb => 1024*1024*1024 bytes
  17 #
  18 # units are case insensitive so 1GB 1Gb 1gB are all the same.

(2)bind设置,如果要让客户端都可以连接到redis服务,就不需要设置绑定的ip,如果客户端只能连上某个或某几个redis服务,bind后需绑定具体的服务ip,如果bind 127.0.0.1,代表只能通过127.0.0.1来访问redis服务,这样只能在提供redis服务的当台机器上访问,其他客户端无法访问,这里先不bind ip。

  40 # By default, if no "bind" configuration directive is specified, Redis listens
  41 # for connections from all the network interfaces available on the server.
  42 # It is possible to listen to just one or multiple selected interfaces using
  43 # the "bind" configuration directive, followed by one or more IP addresses.
  44 #
  45 # Examples:
  46 #
  47 # bind 192.168.1.100 10.0.0.1
  48 # bind 127.0.0.1 ::1

58 # IF YOU ARE SURE YOU WANT YOUR INSTANCE TO LISTEN TO ALL THE INTERFACES
    59 # JUST COMMENT THE FOLLOWING LINE.
    60 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    61 # bind 127.0.0.1

 

(3)protected-mode默认是开启的,这样就只能本机访问redis,如果想让其他客户端免密也能访问到当前redis服务,就需要设置为no。如果设置为no,配置文件中建议使用bind绑定ip地址,并且客户端需提供密码才能访问redis。

  76 # By default protected mode is enabled. You should disable it only if
  77 # you are sure you want clients from other hosts to connect to Redis
  78 # even if no authentication is configured, nor a specific set of interfaces
  79 # are explicitly listed using the "bind" directive.
  80 protected-mode no 

可以测试使用requirepass 123456来设置密码,然后redis-cli登录后尝试操作redis,发现提示权限不足,需要使用auth 密码命令来获取权限,获取权限后再查看发现可以执行命令,可以看出保护模式关,密码为123456。

# config get 属性名 来获取配置文件内容,发现还是未修改的值127.0.0.1:6379> config get protected-mode
1) "protected-mode"
2) "yes"
127.0.0.1:6379> shutdown
not connected> quit
You have new mail in /var/spool/mail/root
[[email protected] ~]# redis-cli# redis-server redis.conf 加载修改后配置文件启动redis后,使用config get命令会提示权限不足
127.0.0.1:6379> config get protected-mode
(error) NOAUTH Authentication required.# auth 密码 获取权限
127.0.0.1:6379> auth 123456
OK# 保护模式为关
127.0.0.1:6379> config get protected-mode
1) "protected-mode"
2) "no"# 密码为123456
127.0.0.1:6379> config get requirepass
1) "requirepass"
2) "123456"

这里不设置密码,并且保护模式关。

(4)port 端口号,redis为外提供服务的端口号,默认为6379,如果配置多个实例,需要修改端口号,本次3台端口号分别为6379 6380 6381,此外其他需要区分的文件也使用端口号点缀,如每个redis服务的日志文件,以及rdb持久化文件,还有/var/run/redis_xxxx.pid文件。

# Accept connections on the specified port, default is 6379 (IANA #815344).
# If port 0 is specified Redis will not listen on a TCP socket.
port 6379

(5)timeout 0,如果设置为0,代表客户端不主动断开连接就一直会连接,如果设置了N秒,就会在N秒空闲后断开与redis服务的连接,这里设置为0,节约资源。

 106 # Close the connection after a client is idle for N seconds (0 to disable)
 107 timeout 0

(6)daemonize默认设置为no,代表启动redis会在前台启动,如果设置为yes就默认在后台启动,这里设置为yes。

 128 # By default Redis does not run as a daemon. Use ‘yes‘ if you need it.
 129 # Note that Redis will write a pid file in /var/run/redis.pid when daemonized.
 130 daemonize yes

(7)不同的redis进程,会与不同的pid号,这个pid号就保存在这个文件里,不同的redis服务,需要点缀端口号,其他两台设置为redis_6380.pid和redis_6381.pid。

 150 # Creating a pid file is best effort: if Redis is not able to create it
 151 # nothing bad happens, the server will start and run normally.
 152 pidfile /var/run/redis_6379.pid

查看一下,当前pid文件里服务进程号为1930,使用ps -ef|grep redis命令查看当前服务进程号也为1930,两者一致。

[[email protected] ~]# cat /var/run/redis_6379.pid
1930
[[email protected] ~]# ps -ef|grep redis
root      1930  1424  0 19:51 pts/0    00:00:02 redis-server *:6379
root      1934  1477  0 19:51 pts/1    00:00:00 redis-cli
root      2084  1524  0 20:01 pts/2    00:00:00 vim redis.conf
root      2508  2477  0 20:14 pts/3    00:00:00 grep redis

(8)logfile指定日志文件名,可以点缀上端口号。日志文件为redis在运行时的记录,内容和前台运行输出的内容一致,如果设置为空字符串,就将日志保存到/dev/null,代表日志文件进入‘‘黑洞‘‘,即不保存。

 162 # Specify the log file name. Also the empty string can be used to force
 163 # Redis to log on the standard output. Note that if you use standard
 164 # output for logging but daemonize, logs will be sent to /dev/null
 165 logfile "redis6379.log"

(9)rdb持久化策略,即自动save保存数据到磁盘的频率,数据变动频率越快保存次数越多,测试部署按照默认值来就行,不修改。

 191 #   In the example below the behaviour will be to save:
 192 #   after 900 sec (15 min) if at least 1 key changed
 193 #   after 300 sec (5 min) if at least 10 keys changed
 194 #   after 60 sec if at least 10000 keys changed
 195 #
 196 #   Note: you can disable saving completely by commenting out all "save" lines.
 197 #
 198 #   It is also possible to remove all the previously configured save
 199 #   points by adding a save directive with a single empty string argument
 200 #   like in the following example:
 201 #
 202 #   save ""
 203
 204 save 900 1 #900秒至少变动1次数据,调用save
 205 save 300 10 #300秒至少变动10次数据,调用save
 206 save 60 10000 #60秒至少变动10000次数据,调用save

(10)dbfilename指定rdb持久化文件名,需要点缀上端口号,不同的redis服务使用不同的文件名,可以避免redis数据混乱。

 238 # The filename where to dump the DB
 239 dbfilename dump6379.rdb

注意需要准备三个redis.conf文件,公共配置修改成上面一样,其他如端口号、日志文件名和rdb持久化文件名需要个性化修改,即使用端口号来区分。这里修改完redis.conf文件默认为6379端口号的,其他两台在此基础上使用%s/6379/6380或%s/6379/6381来批量修改个性化配置,其他公用的一样即可。

(11)修改完后,使用‘redis-server redis.conf配置文件‘命令来加载配置文件启动服务,三台启动后,使用ps -ef|grep redis来查看是否都正常启动。

[[email protected] /home/software/redis-3.2.11]# redis-server redis6379.conf
[[email protected] /home/software/redis-3.2.11]# redis-server redis6380.conf
[[email protected] /home/software/redis-3.2.11]# redis-server redis6381.conf# 三台均启动,对应不同的端口号
[[email protected] /home/software/redis-3.2.11]# ps -ef|grep redis
root      2912     1  0 20:47 ?        00:00:00 redis-server *:6379
root      2916     1  0 20:47 ?        00:00:00 redis-server *:6380
root      2920     1  0 20:47 ?        00:00:00 redis-server *:6381
root      2924  1424  0 20:47 pts/0    00:00:00 grep redis

以上,就完成了多个redis实例的部署,实现了分布式,接下来客户端连接如果想具体连接哪台就-p指定端口号即可。

[[email protected] ~]# redis-cli -p 6380
127.0.0.1:6380> keys *
(empty list or set)
127.0.0.1:6380> quit
You have new mail in /var/spool/mail/root
[[email protected] ~]# redis-cli -p 6381
127.0.0.1:6381> keys *
(empty list or set)
127.0.0.1:6381> quit
[[email protected] ~]# redis-cli -p 6379
127.0.0.1:6379> get name
(nil)

数据分片

上面部署redis多实例后,实现了分布式,接下来就产生了数据分片的问题。所谓分片,就是指海量的key-value要存入redis分布式集群,由于单个节点无法承受这么大的并发量,不能将数据整体存到一个redis节点里,而是根据一定的计算规则,分摊到各个redis里的数据。其中规则的选择可以对具有业务意义的key的值使用hash取余,类似MapReduce里的map阶段的计算分区,即(key.hashCode()&Integer.MAX_VALUE)%3来计算分区编号[0,1,2],这样根据具体的数字编号,将key-value落到相应的redis节点。

上面(key.hashCode()&Integer.MAX_VALUE)%3里的计算,对应的意思如下:

(1)key.hashCode(),key如果是字符串,代表将字符串数据区间映射到整数区间的值,是一个可正可负的整数,如果key值不变,hashcode的结果就不变。

(2)Integer.MAX_VALUE,为整形最大值,换算成二进制就是31位的1,即0111 1111 1111 1111 1111 1111 1111 1111。

(3)&就是与运算,hashcode计算结果进行与运算后就截取其二级制数的后31位,即31位保真运算,结果为正整数。

jedis的使用

创建jedis实例对象后,就相当如创建了一个可以连接redis-server的客户端实例,通过它的API,可以实现类似命令行的操作,而且它API的名字和命令非常的类似,可以说的见名知意。

(1)如果是maven工程,需在pom文件需要导入redis的依赖

    <!--springboot添加redis依赖-->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-redis</artifactId>
    </dependency>

(2)写一个测试类,使用jedis实例来进行五种value类型的操作,需要在测试之前先service iptables stop命令关闭centos6.5的防火墙,要不然报错‘连接拒绝‘。

package com.boe;

import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.Tuple;

import java.util.List;
import java.util.Set;
import java.util.UUID;

/**
 * 测试使用redis
 */
public class JedisClient {
    /*
     * 1 创建jedis连接对象
     * 2 选择一个服务端进行连接,需要提供ip和端口号
     * 3 如果服务端设置了密码,还通过密码获取权限,获取到权限后就可以使用jedis的api,来发送底层命令
     */

    @Test
    public void test01(){
        String host="192.168.200.140";//redis server ip
        int port=6380;
        Jedis jedis=new Jedis(host,port);
        //发送命令
        //string类型
        System.out.println("-------string类型操作-------");
        String s = jedis.set("name", "messi");
        System.out.println(s);
        String name = jedis.get("name");
        System.out.println(name);
        Long setnx = jedis.setnx("name", "messi");
        System.out.println(setnx);
        //hash类型
        System.out.println("-------hash类型操作-------");
        Long hset = jedis.hset("user", "name", "clyang");
        System.out.println(hset);
        String hget = jedis.hget("user", "name");
        System.out.println(hget);
        //list类型
        System.out.println("-------list类型操作-------");
        Long list = jedis.lpush("list", "100", "200", "300");
        System.out.println(list);
        List<String> lrange = jedis.lrange("list", 0, -1);
        System.out.println(lrange.toString());
        //set类型
        System.out.println("-------set类型操作-------");
        Long sadd = jedis.sadd("likes", "football", "basketball", "waterball");
        System.out.println(sadd);
        Boolean sismember = jedis.sismember("likes", "football");
        System.out.println(sismember);
        //zset类型
        System.out.println("-------zset类型操作-------");
        jedis.zadd("movie",100,"hero");
        jedis.zadd("movie",40,"king");
        jedis.zadd("movie",90,"queue");
        //获取zset
        Long count = jedis.zcard("movie");
        System.out.println(count);
    }
}

运行后控制台输出,发现正确的执行了命令。

redis查看6380端口的数据,ok。

192.168.200.140:6380> keys *
1) "name"
2) "list"
3) "likes"
4) "user"
5) "movie"

(3)上面分片有用到哈希取余,代码中也可以实现,并且还可实现权重,具体参考代码。

    //测试hash取余算法
    @Test
    public void test02(){
        Jedis jedis1=new Jedis("192.168.200.140",6379);
        Jedis jedis2=new Jedis("192.168.200.140",6380);
        Jedis jedis3=new Jedis("192.168.200.140",6381);
        for (int i = 0; i < 100; i++) {
            //模拟key-value
            String key=UUID.randomUUID().toString();
            String value="";
            //hash取余的公式
            //hashCode(),字符串数据区间映射到正数区间的值,结果可正可负
            //&上Integer.MAX_VALUE就是保真运算,变成一个31位的正数,效率比取绝对值计算高
            //(key.hashCode()&Integer.MAX_VALUE)%3;
            int result=(key.hashCode()&Integer.MAX_VALUE)%3;
            if(result==0) jedis1.set(key,value);
            if(result==1) jedis2.set(key,value);
            if(result==2) jedis3.set(key,value);

            //下面的方法可以实现权重
            //int result1=(key.hashCode()&Integer.MAX_VALUE)%6;
            //if(result1==(0|1|2)) jedis1.set(key,value);
            //if(result1==(3|4)) jedis2.set(key,value);
            //if(result1==5) jedis3.set(key,value);
        }
    }

执行成功后,可以去redis登录不同端口的服务,查看数据,发现大体上实现了三个redis节点1:1:1的分配,不过有个节点数据量会多一点,这就是数据的偏移,后面大数据里也会有这个概念,先记录一下。

keys * 查看三个redis节点的数据情况

[[email protected] ~]# redis-cli -h 192.168.200.140 -p 6379
192.168.200.140:6379> keys *
 1) "591d29e7-b4a0-4a0a-9659-698c05e9ff82"
 2) "1a15811b-0b15-404c-beb1-3dbb745bd1dd"
 3) "5db35091-5272-450c-b961-6a9c800d5643"
 4) "8bf10dc7-dd56-4e91-9d50-57a041ff0d0c"
 5) "e0f49161-eeb5-4b4e-9077-c8912356e758"
 6) "e9393c5b-3f71-4d86-af1f-b42d6b5be8db"
 7) "69fabfab-3ebc-44f5-bcaf-ebe8887c6fd1"
 8) "63985acf-059c-4da9-8ed8-5db5980b5f83"
 9) "04cd163b-52c5-4d17-bb95-ca99fb967603"
10) "ee4db2f6-c6bd-4d2a-a322-947112e858eb"
11) "e036856a-31e1-438a-9398-255388861025"
12) "27bfa164-1cdf-4404-82ce-026a9dbb0baa"
13) "db1f15dd-0b61-43d2-9cf2-3cb3059f16d7"
14) "7126f3b3-eb66-43be-96ac-dcc7a57ef717"
15) "b3363d55-d66a-4ae9-a753-186ac5673b67"
16) "2254689c-ede6-4108-8fc8-8d4d9bce5605"
17) "836e52cb-2c73-4017-b4bc-7ea6022d4381"
18) "18ad35e2-c6f7-42b8-8f26-6e24f4e3147f"
19) "12662f06-693f-4790-95cd-0ae7a55ba68b"
20) "c2e7ac34-6f85-48df-9fb8-a23ada69678a"
21) "93b95368-94df-431d-9145-493db6e9c5fc"
22) "a4b63d27-7e70-4ba2-9b76-9bd9b7f1a254"
23) "e9f264b7-0626-46ab-a75e-8a537b34dad8"
24) "7288dcb8-4d33-428a-b6a5-0e8ad0f4d515"
25) "58e5cb4c-e779-4689-b085-bdebedb72731"
26) "2daac8fd-4d7a-43e5-9f5f-679ce29f4018"
27) "ac436bcd-edc7-4ee9-9137-220d847bc4f4"
28) "1cbdc3dd-c162-4257-9a83-288cd7ce2d9d"
29) "ba1e37d3-197e-42fb-901e-a1700141cb18"
30) "4cc254e7-67ec-4aad-8695-9cc1eeef0f68"
31) "bf2b9c40-0540-4d1e-97b4-fc99c2da3c74"
32) "02f83409-f09c-46ae-88c8-746e2ffa9ae7"
33) "1066a146-6da9-40fb-8207-538a5f98d13c"
34) "c9f2ab89-038d-4691-9ba8-eb98067273da"
35) "2ccf58df-bd74-488e-8bde-150b1806715c"
36) "154b4bf6-3c10-4bc5-885d-2cc97a98eea2"
37) "6cf530e4-7ede-40f5-adee-b11f095c5d06"
38) "23e8a78d-43b4-4627-b4dc-6ef46565c1fc"
192.168.200.140:6379> quit
[[email protected] ~]# redis-cli -h 192.168.200.140 -p 6380
192.168.200.140:6380> keys *
 1) "10bc105b-3153-4a36-a137-844b35180b0b"
 2) "30c5f630-9204-4408-bed6-007668d16404"
 3) "a566f597-9c8e-4167-a702-55f93c842b65"
 4) "cd2cdc0c-cf85-4f60-b752-a0f23e9e8b9f"
 5) "59973a7f-e6b6-48ec-a0aa-a2dfc4cbee37"
 6) "21064f13-543c-4935-9bc1-6a4d6b4b8af6"
 7) "e101dcb0-2b4a-4f65-bcce-41849422f40e"
 8) "9b625da5-1e98-48b1-9797-2f4cb9a035ba"
 9) "97bf8782-ec48-4b69-81f0-f1ef9da91ee0"
10) "35ec04bc-64a2-42f2-85b6-234237c0bb5c"
11) "38f621fc-b854-4281-9b9e-5e81b42b75ab"
12) "2eb7e614-bbf4-4eee-a7d8-0c022a93d3d1"
13) "42a2d2aa-fab5-45e4-861f-307d7c9d9657"
14) "16453f29-c925-46cd-9ce3-de881a051fff"
15) "d33b7dfa-2774-478a-9e52-d0cf4929940a"
16) "67c62fa6-e4ce-4f22-82db-24edcbd4f978"
17) "a8d92b3d-ff73-439f-92d9-329250fbe596"
18) "03506ad5-a729-47ed-9c61-b50efbbf8d91"
19) "77408f78-4e54-46a9-ad4d-bd0a10a40333"
20) "154a431b-f964-44ac-96b3-347a464b928d"
21) "904593e2-7691-4cbe-a42b-d6e7d3132da1"
22) "df07d672-b7e2-41d7-8f65-3e372149dd85"
23) "98cbe692-5f79-4403-96ef-1a8804cd552c"
24) "f4822e11-e72b-4970-a99c-7995428cc6a0"
25) "91326ca5-8093-4aff-af0a-c05f6ab3f67c"
26) "e8f2643b-0d17-41d2-9e1c-87bd91bd2fe2"
27) "6d87dba3-b326-477a-985c-023e9e59bb7a"
28) "ce714a8b-507c-4c9b-ae07-eadecc8c47b2"
29) "64ad3dba-2c06-4e1e-9dd9-694dbef94eb8"
30) "f651e61a-c84c-478e-b34d-130a03613f13"
31) "d507b9d7-ed15-401f-abf7-9ce113b1237d"
32) "d3de56aa-9abe-46e5-aa82-e2739db00c61"
33) "f56d86a8-42dd-4889-82c9-c809e5dfb4e9"
192.168.200.140:6380> quit
[[email protected] ~]# redis-cli -h 192.168.200.140 -p 6381
192.168.200.140:6381> keys *
 1) "fc8b0bc4-dd19-4817-9fe0-9e8e5b015492"
 2) "de2c277b-1af1-43a3-bc26-4838ade9211b"
 3) "e29cc1d1-566d-4975-b8da-654b7df701b5"
 4) "93d43a98-d6b6-444d-b1d3-6e2558929abb"
 5) "ec0a63f4-01e2-4853-9c5e-7f7f88aa7d2d"
 6) "e68bf85b-9751-411c-85e0-e71f8c50d4cc"
 7) "e24a7f8a-6469-4873-b546-e9d861a4ed49"
 8) "dffb8776-dd3e-4e68-b0f2-95efae1f06bb"
 9) "eba3c6b5-00df-433f-bce0-b434a088712d"
10) "1b807663-ccde-4b68-b62f-84f8725f2888"
11) "70bdc2f4-82bb-4a60-b446-35f66adb28fa"
12) "471a0db6-1dad-4ecc-a1d8-f7d9bee1bd3e"
13) "07f551c4-48a7-4b8a-b9c3-550666217170"
14) "92db8e28-a981-4db2-9376-6a4779b2f431"
15) "124c36ec-575e-41cb-a572-b80c3257bb8f"
16) "59386a43-5f05-4a20-850b-0cad845662a5"
17) "6413579b-fc76-4b0c-811a-f984458463c9"
18) "055c86d3-0668-439f-b4bd-0e04bb4df317"
19) "78f77451-1d0c-41c4-bf38-9914df3866ff"
20) "322cb478-f4e3-4295-abae-399aecb2b219"
21) "34768304-a285-4f3e-ab1e-5d8a7073c24e"
22) "21493487-cdf3-4eee-84a2-e743f762b998"
23) "d85559de-0b20-46bb-b2f2-afc81c5fc33c"
24) "7ae7f256-5556-4997-bf50-49465fc4c23e"
25) "38789a36-04cb-49e4-b65d-c7caac671480"
26) "68712f1d-3fc1-49f3-a38d-284beb3c203d"
27) "c894ba32-e7aa-4c2c-80cd-04c9479387ff"
28) "810de36d-6db5-473c-be6c-6e177440c967"
29) "e7c620b0-cb33-4bfc-9c57-d8dea8491e75"

以上是对redis多实例部署,分片概念和jedis使用的记录,后续继续补充redis的相关知识。

参考博文:

(1)https://www.cnblogs.com/peter1018/p/9765585.html redis.conf目录介绍

(2)https://www.cnblogs.com/Dylansuns/p/7402049.html 同上

(3)https://blog.csdn.net/fly910905/article/details/84983557

原文地址:https://www.cnblogs.com/youngchaolin/p/11983705.html

时间: 2024-10-03 12:29:42

redis多实例&分片&jedis的使用的相关文章

阿里云-Redis-Help-连接实例-Redis客户端连接:Jedis客户端

ylbtech-阿里云-Redis-Help-连接实例-Redis客户端连接:Jedis客户端 1.返回顶部 1. Jedis客户端 Jedis客户端访问云数据库Redis版服务,有以下两种方法: Jedis单链接 JedisPool连接池连接 操作步骤如下: 下载并安装Jedis客户端,详细步骤请参见Jedis使用说明. Jedis单连接示例 打开Eclipse客户端,创建一个Project,输入如下代码段: import redis.clients.jedis.Jedis; public c

redis 应用实例(pub/sub、cache)

项目地址:https://github.com/windwant/redis sub1:结合Spring 简单 订阅/发布系统. sub2:redis缓存 JedisPool jedis 链接连接池 单机 ShardedJedisPool 切片连接池 分布式(多个redis 运行实例) 根据一致性那个hash算法动态均匀存储及获取key-value JedisSentinelPool 哨兵模式

Redis入门实例

在此之前,对Redis有必要清楚以下问题: Redis是什么? Redis解决了什么问题? Redis的优势? 如何使用Redis?(本文重点) Redis是什么 首先看官网的定义: Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. 所以,Redis是一个key-value的内存数据库.不过Redis在生产环境中使用最多的功能是缓存系统.至于其他作用比如数据库和消息中间件,则不会展开. Redis解决了什么问题 在大型网站技术架构中,缓存系统

Redis集群之Jedis的使用

maven依赖 <!-- Redis客户端 --> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.7.2</version> </dependency> 集群: 纯java模式: public void testJedisCluster()throws Exception

redis单实例、多实例、主从同步实战

[安装redis单实例实战] yum -y install gcc gcc-c++    #安装编译工具 cd /opt wget -c http://download.redis.io/releases/redis-3.0.5.tar.gz   #下载包 tar xf redis-3.0.5.tar.gz     #解压 cd redis-3.0.5 make MALLOC=libc  #编译 make PREFIX=/usr/local/redis install  #安装 echo 'PA

(转)java redis使用之利用jedis实现redis消息队列

应用场景 最近在公司做项目,需要对聊天内容进行存储,考虑到数据库查询的IO连接数高.连接频繁的因素,决定利用缓存做. 从网上了解到redis可以对所有的内容进行二进制的存储,而java是可以对所有对象进行序列化的,序列化的方法会在下面的代码中提供实现. 序列化 这里我编写了一个java序列化的工具,主要是对对象转换成byte[],和根据byte[]数组反序列化成java对象: 主要是用到了ByteArrayOutputStream和ByteArrayInputStream: 需要注意的是每个自定

try redis(四) -java 客户端jedis 使用

不同的计算机语言针对redis,都有自己的客户端. 官网上也列出了客户端的 http://www.redis.io/clients java客户端如下: 感觉客户端无非也就是做些连接和拼接命令的事情.所以不费心思比较哪个好了,就选第一个吧.一般第一个应该都是不错的. 选择jedis ,发现他的代码是 GitHub 托管的,开源的.地址为 https://github.com/xetorthio/jedis 找到 maven dependency <dependency> <groupId

redis多实例

redis的多实例配置 一般redis都不要太大,不要超过30G,如果超过就用多实例 #配置redis多实例很简单,只要给多给一个配置文件,以及给在配置文件中指定一下,这个实例的dump.rdb的保存路径.以及不同的端口号就可以了  mkdir -p /application/redis/data/  cp  /application/redis/conf/redis.conf /application/redis/data/  grep "port 6" redis.conf   s

Redis安装配置与Jedis访问数据库

一.NOSQL概要 NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,泛指非关系型的数据库.NoSQL数据库的四大分类 键值(Key-Value)存储数据库 这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据.Key/value模型对于IT系统来说的优势在于简单.易部署.但是如果DBA只对部分值进行查询或更新的时候,Key/value就显得效率低下了. 举例如:Tokyo Cabinet/Tyrant, Redis, Voldemo