1、关闭cluster全部节点
2、删除所有nodes.conf文件
3、开启全部节点
4、依次flushall
5、重建集群即可
Author Archives: neohope
Redis3配置Cluster
1、redis3的cluster是基于ruby的,所以要安装好ruby,然后安装redis的gem
gem install redis
2、然后配置6份redis,修改配置如下
| 节点 | ||||||
| dbm6379 | dbm6380 | dbm6381 | dbs6382 | dbm6383 | dbm6384 | |
| 配置文件 | dbm6379/conf/redis.conf | dbm6380/conf/redis.conf | dbm6381/conf/redis.conf | dbs6382/conf/redis.conf | dbm6383/conf/redis.conf | dbm6384/conf/redis.conf |
| port | 6379 | 6380 | 6381 | 6382 | 6383 | 6384 |
| logfile | “/home/neohope/DB/redis-3.0.4/cluster/dbm6379/logs/redis_log.log” | “/home/neohope/DB/redis-3.0.4/cluster/dbm6380/logs/redis_log.log” | “/home/neohope/DB/redis-3.0.4/cluster/dbm6381/logs/redis_log.log” | “/home/neohope/DB/redis-3.0.4/cluster/dbm6382/logs/redis_log.log” | “/home/neohope/DB/redis-3.0.4/cluster/dbm6383/logs/redis_log.log” | “/home/neohope/DB/redis-3.0.4/cluster/dbm6384/logs/redis_log.log” |
| dir | “/home/neohope/DB/redis-3.0.4/cluster/dbm6379/data” | “/home/neohope/DB/redis-3.0.4/cluster/dbm6380/data” | “/home/neohope/DB/redis-3.0.4/cluster/dbm6381/data” | “/home/neohope/DB/redis-3.0.4/cluster/dbm6382/data” | “/home/neohope/DB/redis-3.0.4/cluster/dbm6383/data” | “/home/neohope/DB/redis-3.0.4/cluster/dbm6384/data” |
| cluster-enabled | yes | yes | yes | yes | yes | yes |
| cluster-config-file | nodes-6379.conf | nodes-6380.conf | nodes-6381.conf | nodes-6382.conf | nodes-6383.conf | nodes-6384.conf |
| cluster-node-timeout | 15000 | 15000 | 15000 | 15000 | 15000 | 15000 |
| cluster-migration-barrier | 1 | 1 | 1 | 1 | 1 | 1 |
| cluster-require-full-coverage | yes | yes | yes | yes | yes | yes |
3、启动redis
#!/bin/sh ~/DB/redis-3.0.4/bin/redis-server ~/DB/redis-3.0.4/cluster/dbm6379/conf/redis.conf & echo $! & ~/DB/redis-3.0.4/bin/redis-server ~/DB/redis-3.0.4/cluster/dbm6380/conf/redis.conf & echo $! & ~/DB/redis-3.0.4/bin/redis-server ~/DB/redis-3.0.4/cluster/dbm6381/conf/redis.conf & echo $! & ~/DB/redis-3.0.4/bin/redis-server ~/DB/redis-3.0.4/cluster/dbs6382/conf/redis.conf & echo $! & ~/DB/redis-3.0.4/bin/redis-server ~/DB/redis-3.0.4/cluster/dbs6383/conf/redis.conf & echo $! & ~/DB/redis-3.0.4/bin/redis-server ~/DB/redis-3.0.4/cluster/dbs6384/conf/redis.conf & echo $!
4、配置cluster
#!/bin/sh #这里最好不要用127.0.0.1做地址 ~/DB/redis-3.0.4/bin/redis-trib.rb create --replicas 1 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384
5、测试redis cluster
~/DB/redis-3.0.4/bin/redis-cli -c -p 6379 set key01 a set key02 b set key03 c set key04 d dbsize keys * get key03
6、关闭redis
#!/bin/sh ~/DB/redis-3.0.4/bin/redis-cli -p 6379 shutdown ~/DB/redis-3.0.4/bin/redis-cli -p 6380 shutdown ~/DB/redis-3.0.4/bin/redis-cli -p 6381 shutdown ~/DB/redis-3.0.4/bin/redis-cli -p 6382 shutdown ~/DB/redis-3.0.4/bin/redis-cli -p 6383 shutdown ~/DB/redis-3.0.4/bin/redis-cli -p 6384 shutdown
Debian8 Jessie修改Terminal分辨率
昨天安装了Debian8 Jessie,禁用了gdb以后,发现Terminal分辨率变的超级低。
用以前的方法调整了一下,发现搞不定了,搞了大半天,终于找到了靠谱的方案:
1、修改/etc/default/grub
找到
#GRUB_GFXMODE=XXXXXX
修改该行,并新增一行,最后效果为
GRUB_GFXMODE=1024x768x24 GRUB_GFXPAYLOAD_LINUX=1024x768x24
2、修改/etc/grub.d/00_header
找到
if [ "x${GRUB_GFXMODE}" = "x" ] ; then auto ; fi,
修改该行,并新增一行,最后效果为
if [ "x${GRUB_GFXMODE}" = "x" ] ; then GRUB_GFXMODE=1024x768x24 ; fi
if [ "x${GRUB_GFXPAYLOAD}" = "x" ] ; then GRUB_GFXPAYLOAD=1024x768x24 ; fi
3、仍然是etc/grub.d/00_header
找到
set gfxmode=${GRUB_GFXMODE}
在其后新增一行,最后效果为
set gfxmode=${GRUB_GFXMODE}
set gfxpayload=${GRUB_GFXPAYLOAD}
4、更新grub并重启,搞定
update-grub2 reboot
5、感觉Debian8 Jessie的配置改变了好多。。。
Redis主从数据库(Shell)
1、基本配置如下
| 数据库 | master | slave01 | slave02 |
| 配置文件 | redis.master.conf | redis.slave01.conf | redis.slave02.conf |
| ip地址 | localhost | localhost | localhost |
| 端口 | 6379 | 6380 | 6381 |
| logfile | “D:/Database/Redis2.8/mirror/master/logs/redis_log.txt” | “D:/Database/Redis2.8/mirror/slave01/logs/redis_log.txt” | “D:/Database/Redis2.8/mirror/slave02/logs/redis_log.txt” |
| dir | “D:/Database/Redis2.8/mirror/master/data/” | “D:/Database/Redis2.8/mirror/slave01/data/” | “D:/Database/Redis2.8/mirror/slave02/data/” |
| slaveof | – | localhost 6379 | localhost 6379 |
| slave-serve-stale-data | – | yes | yes |
| slave-read-only | – | yes | yes |
| slave-priority | – | 100 | 100 |
| maxheap | – | 1073741824 | 1073741824 |
| heapdir | – | D:\Database\Redis2.8\mirror\slave01\heap | D:\Database\Redis2.8\mirror\slave02\heap |
2、启动
redis-server.exe D:\Database\Redis2.8\mirror\redis.master.conf redis-server.exe D:\Database\Redis2.8\mirror\redis.slave01.conf redis-server.exe D:\Database\Redis2.8\mirror\redis.slave02.conf
3、测试
D:\Database\Redis2.8>redis-cli 127.0.0.1:6379> dbsize (integer) 0 127.0.0.1:6379> set key01 a OK 127.0.0.1:6379> exit D:\Database\Redis2.8>redis-cli -p 6380 127.0.0.1:6380> get key01 "a" 127.0.0.1:6380> set key02 b (error) READONLY You can't write against a read only slave. 127.0.0.1:6380> exit D:\Database\Redis2.8>redis-cli -p 6381 127.0.0.1:6381> get key01 "a" 127.0.0.1:6381> set key02 b (error) READONLY You can't write against a read only slave. 127.0.0.1:6381> exit
4、关闭
redis-cli -p 6380 shutdown redis-cli -p 6381 shutdown redis-cli -p 6379 shutdown
redis-server注册为服务(Shell)
1、注册服务
#loglevel 分为debug, notice, warning三级 redis-server.exe --service-install D:\Database\Redis2.8\db\redis.windows.conf --loglevel notice
2、启动服务
redis-server --service-start
3、停止服务
redis-server --service-stop
4、卸载服务
redis-server --service-uninstall
Jedis使用连接池(Java)
package com.djhu.redis.test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
public class JedisFactory
{
// 最大可用连接数,默认值为8,如果赋值为-1则表示不限制
private static int MAX_TOTAL = 256;
// 最大空闲连接数,默认值为8
private static int MAX_IDLE = 32;
// 最小空闲连接数
private static int MIN_IDLE = 4;
// 最大等待连接毫秒数,默认值为-1表示永不超时
private static int MAX_WAIT = 3000;
// 连接redis超时时间
private static int TIMEOUT = 3000;
// true表示验证连接
private static boolean TEST_ON_BORROW = true;
//连接池
private static JedisPool jedisPool = null;
public static void initJedisPool(String IP, int port, String password)
{
try
{
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(MAX_TOTAL);
config.setMaxIdle(MAX_IDLE);
config.setMinIdle(MIN_IDLE);
config.setMaxWaitMillis(MAX_WAIT);
config.setTestOnBorrow(TEST_ON_BORROW);
jedisPool = new JedisPool(config, IP, port, TIMEOUT, password);
}
catch (Exception e)
{
e.printStackTrace();
}
}
public synchronized static Jedis getConnection()
{
try
{
if (jedisPool != null)
{
Jedis resource = jedisPool.getResource();
return resource;
} else
{
return null;
}
}
catch (Exception e)
{
e.printStackTrace();
return null;
}
}
public static void returnResource(final Jedis jedis)
{
if (jedis != null)
{
jedis.close();
}
}
public static void main(String[] args)
{
initJedisPool("localhost",6379,null);
Jedis redis = getConnection();
redis.select(1);
//redis.set("key01", "a");
//redis.set("key02", "b");
//redis.set("key03", "c");
System.out.print(redis.dbSize());
returnResource(redis);
}
}
Redis入门之增删改查(Java)
1、下载驱动
jedis驱动源码地址
jedis驱动下载地址
2、测试代码
package com.djhu.redis.test;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import redis.clients.jedis.Jedis;
public class ConnectionTest
{
public static Jedis getConnection(String ip, int port)
{
Jedis jedis = new Jedis(ip, port);
//jedis.auth("password");
return jedis;
}
public static void cleanAll(Jedis jedis)
{
jedis.flushDB();
}
public static void stringTest(Jedis jedis)
{
jedis.set("key01", "a");
jedis.set("key02", "b");
jedis.set("key03", "c");
jedis.mset("key04", "d", "key05", "e", "key06", "f");
jedis.del("key04");
System.out.println("key01 is " + jedis.get("key01"));
System.out.println("key04 is " + jedis.get("key04"));
}
public static void mapTest(Jedis jedis)
{
Map<String, String> map = new HashMap<String, String>();
map.put("username", "hansen");
map.put("usersex", "male");
jedis.hmset("mapkey01", map);
map.put("username", "neohope");
map.put("usersex", "male");
jedis.hmset("mapkey02", map);
map.put("username", "tuzi");
map.put("usersex", "female");
jedis.hmset("mapkey03", map);
List<String> rsmap = jedis.hmget("mapkey03", "username", "usersex");
System.out.println("query for hmget(\"mapkey03\", \"username\", \"usersex\") is " + rsmap);
jedis.hdel("mapkey02", "usersex");
System.out.println("query for hmget jedis.hmget(\"mapkey02\", \"username\") is "+jedis.hmget("mapkey02", "username"));
System.out.println("query for jedis.hmget(\"mapkey02\", \"usersex\") is " + jedis.hmget("mapkey02", "usersex"));
System.out.println("query for jedis.hlen(\"mapkey01\") is " + jedis.hlen("mapkey01"));
System.out.println("query for jedis.exists(\"mapkey01\") is " + jedis.exists("mapkey01"));
System.out.println("query for jedis.hkeys(\"mapkey01\") is " + jedis.hkeys("mapkey01"));
System.out.println("query for jedis.hvals(\"mapkey01\") is " + jedis.hvals("mapkey01"));
}
public static void listTest(Jedis jedis)
{
jedis.lpush("keylist01", "a");
jedis.lpush("keylist01", "b");
jedis.lpush("keylist01", "c");
System.out.println("keylist01 is " + jedis.lrange("keylist01", 0, -1));
}
public static void setTest(Jedis jedis)
{
jedis.sadd("keyset01", "01");
jedis.sadd("keyset01", "02");
jedis.sadd("keyset01", "03");
jedis.sadd("keyset01", "04");
jedis.sadd("keyset01", "05");
System.out.println("query for jedis.smembers(\"keyset01\") is " + jedis.smembers("keyset01"));
System.out.println("query for jedis.sismember(\"keyset01\", \"06\") is " + jedis.sismember("keyset01", "06"));
System.out.println("query for jedis.scard(\"keyset01\") is " + jedis.scard("keyset01"));
}
public static void sortTest(Jedis jedis)
{
jedis.rpush("keylist02", "16");
jedis.lpush("keylist02", "8");
jedis.lpush("keylist02", "4");
jedis.lpush("keylist02", "2");
jedis.lpush("keylist02", "1");
System.out.println("keylist02 is " + jedis.lrange("keylist02", 0, -1));
jedis.sort("keylist02");
System.out.println("after sort keylist02 is " + jedis.lrange("keylist02", 0, -1));
}
public static void main(String[] args)
{
Jedis jedis = getConnection("localhost", 6379);
cleanAll(jedis);
stringTest(jedis);
mapTest(jedis);
listTest(jedis);
sortTest(jedis);
setTest(jedis);
jedis.close();
}
}
Redis入门之增删改查(命令行)
1、到github上下载需要的版本,我用的是官方的windows版本。
redis下载地址
2、然后启动Redis
Set REDIS_HOME=C:\Database\Redis\Redis-x64-2.8.2103 Set PATH=%REDIS_HOME%;%PATH% redis-server.exe D:\Database\Redis2.8\db\redis.windows.conf
配置文件redis.windows.conf中,我只修改了这两项:
logfile "D:/Database/Redis2.8/db/logs/redis_log.txt" dir "D:/Database/Redis2.8/db/data/"
如果要停止redis
#停止Redis redis-cli -h localhost -p 6379 shutdown
如果要查看redis信息
#查看信息 redis-cli -h localhost -p 6379 info
3、启动redis-cli.exe,连接到redis
#连接Redis redis-cli -h localhost -p 6379
4、String类型数据操作
localhost:6379> dbsize (integer) 0 localhost:6379> set key01 a OK localhost:6379> set key02 b OK localhost:6379> set key03 c OK localhost:6379> set key04 d OK localhost:6379> set key05 e OK localhost:6379> set key06 f OK localhost:6379> dbsize (integer) 6 localhost:6379> set name hansen OK localhost:6379> keys key* 1) "key03" 2) "key04" 3) "key01" 4) "key05" 5) "key02" 6) "key06" localhost:6379> exists key01 (integer) 1 localhost:6379> exists key07 (integer) 0 localhost:6379> get key06 "f" localhost:6379> get name "hansen" localhost:6379> rename name myname OK localhost:6379> get myname "hansen" localhost:6379> get name (nil) localhost:6379> dbsize (integer) 7 localhost:6379> move key06 1 (integer) 1 localhost:6379> dbsize (integer) 6 localhost:6379> exists key06 (integer) 0 localhost:6379> select 1 OK localhost:6379[1]> keys * 1) "key06" localhost:6379[1]> select 0 OK localhost:6379> exists key05 (integer) 1 localhost:6379> del key05 (integer) 1 localhost:6379> exists key05 (integer) 0
5、Map类型数据操作
localhost:6379> hset hset01 username "hansen" (integer) 1 localhost:6379> hset hset02 username "neohope" (integer) 1 localhost:6379> dbsize (integer) 2 localhost:6379> hset hset01 sex "male" (integer) 0 localhost:6379> hset hset02 sex "male" (integer) 1 localhost:6379> dbsize localhost:6379> type hset01 hash (integer) 2 localhost:6379> hlen hset01 (integer) 2 localhost:6379> hkeys hset01 1) "username" 2) "sex" localhost:6379> hget hset01 username "hansen"
6、List类型数据操作
localhost:6379> lpush listkey01 a (integer) 1 localhost:6379> lpush listkey01 b (integer) 2 localhost:6379> lpush listkey01 c (integer) 3 localhost:6379> lpush listkey01 d (integer) 4 localhost:6379> lpush listkey01 e (integer) 5 localhost:6379> lrange listkey01 0 -1 1) "e" 2) "d" 3) "c" 4) "b" 5) "a" localhost:6379> lindex listkey01 3 "b" localhost:6379> lrem listkey01 0 c (integer) 1 localhost:6379> lrange listkey01 0 -1 1) "e" 2) "d" 3) "b" 4) "a" localhost:6379> lpop listkey01 "e" localhost:6379> lpop listkey01 "d" localhost:6379> lrange listkey01 0 -1 1) "b" 2) "a" localhost:6379> lpush listkey02 1 (integer) 1 localhost:6379> lpush listkey02 2 (integer) 2 localhost:6379> lpush listkey02 3 (integer) 3 localhost:6379> lpush listkey02 4 (integer) 4 localhost:6379> lpush listkey02 5 (integer) 5 localhost:6379> lrange listkey02 0 -1 1) "5" 2) "4" 3) "3" 4) "2" 5) "1" localhost:6379> sort listkey02 1) "1" 2) "2" 3) "3" 4) "4" 5) "5" localhost:6379> lrange listkey02 0 -1 1) "5" 2) "4" 3) "3" 4) "2" 5) "1" localhost:6379>
7、Set类型数据操作
localhost:6379> sadd keyset01 1 2 3 (integer) 3 localhost:6379> sadd keyset02 4 5 6 (integer) 3 localhost:6379> dbsize (integer) 2 localhost:6379> type keyset01 set localhost:6379> smembers keyset01 1) "1" 2) "2" 3) "3"
8、Redis常用命令(在命令行使用时,请把函数的括号及逗号都替换为空格)
| 连接操作相关的命令 | |
| quit | 关闭连接(connection) |
| auth | 简单密码认证 |
| 对value操作的命令 | |
| exists(key) | 确认一个key是否存在 |
| del(key) | 删除一个key |
| type(key) | 返回值的类型 |
| keys(pattern) | 返回满足给定pattern的所有key |
| randomkey | 随机返回key空间的一个key |
| rename(oldname, newname) | 将key由oldname重命名为newname,若newname存在则删除newname表示的key |
| dbsize | 返回当前数据库中key的数目 |
| expire | 设定一个key的活动时间(s) |
| ttl | 获得一个key的活动时间 |
| select(index) | 按索引查询 |
| move(key, dbindex) | 将当前数据库中的key转移到有dbindex索引的数据库 |
| flushdb | 删除当前选择数据库中的所有key |
| flushall | 删除所有数据库中的所有key |
| 对String操作的命令 | |
| set(key, value) | 给数据库中名称为key的string赋予值value |
| get(key) | 返回数据库中名称为key的string的value |
| getset(key, value) | 给名称为key的string赋予上一次的value |
| mget(key1, key2,…, key N) | 返回库中多个string(它们的名称为key1,key2…)的value |
| setnx(key, value) | 如果不存在名称为key的string,则向库中添加string,名称为key,值为value |
| setex(key, time, value) | 向库中添加string(名称为key,值为value)同时,设定过期时间time |
| mset(key1, value1, key2, value2,…key N, value N) | 同时给多个string赋值,名称为key i的string赋值value i |
| msetnx(key1, value1, key2, value2,…key N, value N) | 如果所有名称为key i的string都不存在,则向库中添加string,名称key i赋值为value i |
| incr(key) | 名称为key的string增1操作 |
| incrby(key, integer) | 名称为key的string增加integer |
| decr(key) | 名称为key的string减1操作 |
| decrby(key, integer) | 名称为key的string减少integer |
| append(key, value) | 名称为key的string的值附加value |
| substr(key, start, end) | 返回名称为key的string的value的子串 |
| 对List操作的命令 | |
| rpush(key, value) | 在名称为key的list尾添加一个值为value的元素 |
| lpush(key, value) | 在名称为key的list头添加一个值为value的 元素 |
| llen(key) | 返回名称为key的list的长度 |
| lrange(key, start, end) | 返回名称为key的list中start至end之间的元素(下标从0开始,下同) |
| ltrim(key, start, end) | 截取名称为key的list,保留start至end之间的元素 |
| lindex(key, index) | 返回名称为key的list中index位置的元素 |
| lset(key, index, value) | 给名称为key的list中index位置的元素赋值为value |
| lrem(key, count, value) | 删除count个名称为key的list中值为value的元素。count为0,删除所有值为value的元素,count>0从头至尾删除count个值为value的元素,count<0从尾到头删除|count|个值为value的元素。 |
| lpop(key) | 返回并删除名称为key的list中的首元素 rpop(key),返回并删除名称为key的list中的尾元素 |
| blpop(key1, key2,… key N, timeout) | lpop命令的block版本。即当timeout为0时,若遇到名称为key i的list不存在或该list为空,则命令结束。如果timeout>0,则遇到上述情况时,等待timeout秒,如果问题没有解决,则对keyi+1开始的list执行pop操作。 |
| brpop(key1, key2,… key N, timeout) | rpop的block版本。参考上一命令。 |
| rpoplpush(srckey, dstkey) | 返回并删除名称为srckey的list的尾元素,并将该元素添加到名称为dstkey的list的头部 |
| 对Set操作的命令 | |
| sadd(key, member) | 向名称为key的set中添加元素member |
| srem(key, member) | 删除名称为key的set中的元素member |
| spop(key) | 随机返回并删除名称为key的set中一个元素 |
| smove(srckey, dstkey, member) | 将member元素从名称为srckey的集合移到名称为dstkey的集合 |
| scard(key) | 返回名称为key的set的基数 |
| sismember(key, member) | 测试member是否是名称为key的set的元素 |
| sinter(key1, key2,…key N) | 求交集 |
| sinterstore(dstkey, key1, key2,…key N) | 求交集并将交集保存到dstkey的集合 |
| sunion(key1, key2,…key N) | 求并集 |
| sunionstore(dstkey, key1, key2,…key N) | 求并集并将并集保存到dstkey的集合 |
| sdiff(key1, key2,…key N) | 求差集 |
| sdiffstore(dstkey, key1, key2,…key N) | 求差集并将差集保存到dstkey的集合 |
| smembers(key) | 返回名称为key的set的所有元素 |
| srandmember(key) | 随机返回名称为key的set的一个元素 |
| 对zset(sorted set)操作的命令 | |
| zadd(key, score, member) | 向名称为key的zset中添加元素member,score用于排序。如果该元素已经存在,则根据score更新该元素的顺序。 |
| zrem(key, member) | 删除名称为key的zset中的元素member |
| zincrby(key, increment, member) | 如果在名称为key的zset中已经存在元素member,则该元素的score增加increment;否则向集合中添加该元素,其score的值为increment |
| zrank(key, member) | 返回名称为key的zset(元素已按score从小到大排序)中member元素的rank(即index,从0开始),若没有member元素,返回“nil” |
| zrevrank(key, member) | 返回名称为key的zset(元素已按score从大到小排序)中member元素的rank(即index,从0开始),若没有member元素,返回“nil” |
| zrange(key, start, end) | 返回名称为key的zset(元素已按score从小到大排序)中的index从start到end的所有元素 |
| zrevrange(key, start, end) | 返回名称为key的zset(元素已按score从大到小排序)中的index从start到end的所有元素 |
| zrangebyscore(key, min, max) | 返回名称为key的zset中score >= min且score <= max的所有元素 |
| zcard(key):返回名称为key的zset的基数 zscore(key, element) | 返回名称为key的zset中元素element的 |
| score zremrangebyrank(key, min, max) | 删除名称为key的zset中rank >= min且rank <= max的所有元素 |
| zremrangebyscore(key, min, max) | 删除名称为key的zset中score >= min且score <= max的所有元素 |
| zunionstore / zinterstore(dstkeyN, key1,…,keyN, WEIGHTS w1,…wN, AGGREGATE SUM|MIN|MAX) | 对N个zset求并集和交集,并将最后的集合保存在dstkeyN中。对于集合中每一个元素的score,在进行AGGREGATE运算前,都要乘以对于的WEIGHT参数。如果没有提供WEIGHT,默认为1。默认的AGGREGATE是SUM,即结果集合中元素的score是所有集合对应元素进行SUM运算的值,而MIN和MAX是指,结果集合中元素的score是所有集合对应元素中最小值和最大值。 |
| 对Hash操作的命令 | |
| hset(key, field, value) | 向名称为key的hash中添加元素field<—>value |
| hget(key, field) | 返回名称为key的hash中field对应的value |
| hmget(key, field1, …,field N) | 返回名称为key的hash中field i对应的value |
| hmset(key, field1, value1,…,field N, value N) | 向名称为key的hash中添加元素field i<—>value i |
| hincrby(key, field, integer) | 将名称为key的hash中field的value增加integer |
| hexists(key, field) | 名称为key的hash中是否存在键为field的域 |
| hdel(key, field) | 删除名称为key的hash中键为field的域 |
| hlen(key) | 返回名称为key的hash中元素个数 |
| hkeys(key) | 返回名称为key的hash中所有键 |
| hvals(key) | 返回名称为key的hash中所有键对应的value |
| hgetall(key) | 返回名称为key的hash中所有的键(field)及其对应的value |
| 持久化 | |
| save | 将数据同步保存到磁盘 |
| bgsave | 将数据异步保存到磁盘 |
| lastsave | 返回上次成功将数据保存到磁盘的Unix时戳 |
| shundown | 将数据同步保存到磁盘,然后关闭服务 |
| 远程服务控制 | |
| info | 提供服务器的信息和统计 |
| monitor | 实时转储收到的请求 |
| slaveof | 改变复制策略设置 |
| config | 在运行时配置Redis服务器 |
CentOS7常见操作
1、通过CentOS光盘安装软件
#挂载光盘 mount -r /dev/sr0 /media/cdrom #修改文件,将光盘查找路径定为/media/cdrom vi /etc/yum.repos.d/CentOS-Media.repo #刷新列表 yum --disablerepo=\* --enablerepo=c7-media repolist #安装vim yum --disablerepo=\* --enablerepo=c7-media install vim #通过命令查找包并安装包 yum --disablerepo=\* --enablerepo=c7-media provides ifconfig yum --disablerepo=\* --enablerepo=c7-media install net-tools #卸载包 yum erase 包名
2、rpm安装及卸载软件
#安装 rpm -ivh rpm文件路径 #安装并不进行依赖检查 rpm -ivh --nodeps rpm文件路径 #更新 rpm -Uvh rpm文件路径 #删除 rpm -e 包名 #查看包的用途、版本等信息 rpm -qpi rpm文件路径 #查看包的文件清单 rpm -qpl rpm文件路径 #查看软件包文档位置 rpm -qpd rpm文件路径 #查看软件包的配置文件 rpm -qpc rpm文件路径 #查看软件包依赖关系 rpm -qpR rpm文件路径
3、rpm查看已安装软件包信息
#查看已经安装的软件 rpm -qa #查看一个文件属于哪个软件包 rpm -qf 文件绝对路径 #查看安装软件包都安装到何处; rpm -ql 包名 #查看包的信息 rpm -qi 包名 #查看包配置文件 rpm -qc 包名 #查看包文档安装位置 rpm -qd 包名 #查看包的依赖 rpm -qR 包名
4、配置网络为静态地址
vim /etc/sysconfig/network-scripts/ifcfg-enp0s3 #修改或新增以下内容 BOOTPROTO=static ONBOOT=yes IPADDR=172.16.172.80 NETMASK=255.255.0.0 GATEWAY=172.16.172.2 #重启网络 service network restart
5、防火墙配置
#查看状态 systemctl status firewalld #启动 systemctl start firewalld #关闭 systemctl stop firewalld #开机启用 systemctl enable firewalld #开机禁用 systemctl disable firewalld
互联网后面10年的重点
当今互联网,已经基本解决了吃、穿、用、住、行、娱乐的问题。
下馆子吃,已经被大众点评、美团、饿了么等刮分完毕。
不下馆子吃、穿、用,各大商城都在做,被淘宝、京东、亚马逊、一号店等刮分完毕。
住、行被携程、艺龙、滴滴快的、神州等刮分完毕。
旅游类的娱乐项目,很大一部分开支为吃、住、行。除去这一部分,组团、自由行等也已经慢慢向成熟市场变化,包括马蜂窝等很多都在做。
非旅游类的娱乐项目,在大众点评、同城等也有了立足之地,更何况这铺天盖地的购票软件咯。
上述市场,一些已经局势明朗很难有大的变化,一些仍是杀得难解难开,一些还待开发。
依据互联网的长尾效应,后面大家要做的是差异化竞争,现在国内互联网巨头中,还没有特别好的、在红海中的差异化竞争案例。大家刚刚从实体店的红海杀到了互联网的蓝海,并正在把互联网蓝海杀红。我相信这方面还是有很多可以做的事情的。
另外,当一个人吃、穿、用、住、行、娱乐的问题解决了,就会有更高的追求。按以往的历史规律,医疗、健康、教育、艺术、科技、政治的需求会逐渐增强。而且,当下各大公司正在努力向医疗领域进军,互联网这10年,应该是医疗健康的十年。