2019独角兽企业重金招聘Python工程师标准>>>
windows下几个exe程序的功能:
redis-benchmark.exe:性能测试,用以模拟同时由N个客户端发送M个 SETs/GETs 查询 (类似于 Apache 的ab 工具).
redis-check-aof.exe:更新日志检查
redis-check-dump.exe:本地数据库检查
redis-cli.exe:客户端
redis-server.exe:服务端
package com.fiberhome.crm.test;import java.util.ArrayList;
import java.util.List;import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisShardInfo;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;public class RedisApp {/** * 非切片客户端链接*/private Jedis jedis;/*** 非切片链接池*/private JedisPool jedisPool;/*** 切片客户端链接*/private ShardedJedis shardedJedis;/*** 切片链接池*/private ShardedJedisPool shardedJedisPool;private String ip = "127.0.0.1";/*** 构造函数*/public RedisApp() {initialPool();initialShardedPool();shardedJedis = shardedJedisPool.getResource();jedis = jedisPool.getResource();}private void initialPool() {// 池基本配置JedisPoolConfig config = new JedisPoolConfig();config.setMaxTotal(20);config.setMaxIdle(5);config.setMaxWaitMillis(1000L);config.setTestOnBorrow(false);jedisPool = new JedisPool(config, ip, 6379); }/*** 初始化切片池*/private void initialShardedPool() {// 池基本配置JedisPoolConfig config = new JedisPoolConfig();config.setMaxTotal(20);config.setMaxIdle(5);config.setMaxWaitMillis(1000L);config.setTestOnBorrow(false);// slave链接List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>();shards.add(new JedisShardInfo(ip, 6379, "master"));// 构造池shardedJedisPool = new ShardedJedisPool(config, shards); }public void redisTest(){// key检测testKey();// string检测testString();// list检测testList();// set检测testSet();// sortedSet检测testSortedSet();// hash检测testHash();shardedJedisPool.returnResource(shardedJedis);}private void testKey() {System.out.println("=============key==========================");// 清空数据System.out.println(jedis.flushDB());System.out.println(jedis.echo("foo"));// 判断key否存在System.out.println(shardedJedis.exists("foo"));shardedJedis.set("key", "values");System.out.println(shardedJedis.exists("key"));}private void testString() {System.out.println("=============String==========================");// 清空数据System.out.println(jedis.flushDB());// 存储数据shardedJedis.set("foo", "bar");System.out.println(shardedJedis.get("foo"));// 若key不存在,则存储shardedJedis.setnx("foo", "foo not exits");System.out.println(shardedJedis.get("foo"));// 覆盖数据shardedJedis.set("foo", "foo update");System.out.println(shardedJedis.get("foo"));// 追加数据shardedJedis.append("foo", " hello, world");System.out.println(shardedJedis.get("foo"));// 设置key的有效期,并存储数据shardedJedis.setex("foo", 2, "foo not exits");System.out.println(shardedJedis.get("foo"));try {Thread.sleep(3000);} catch (InterruptedException e) {}System.out.println(shardedJedis.get("foo"));// 获取并更改数据shardedJedis.set("foo", "foo update");System.out.println(shardedJedis.getSet("foo", "foo modify"));// 截取value的值System.out.println(shardedJedis.getrange("foo", 1, 3));System.out.println(jedis.mset("mset1", "mvalue1", "mset2", "mvalue2","mset3", "mvalue3", "mset4", "mvalue4"));System.out.println(jedis.mget("mset1", "mset2", "mset3", "mset4"));System.out.println(jedis.del(new String[] { "foo", "foo1", "foo3" })); }private void testList() {System.out.println("=============list==========================");// 清空数据System.out.println(jedis.flushDB());// 添加数据shardedJedis.lpush("lists", "vector");shardedJedis.lpush("lists", "ArrayList");shardedJedis.lpush("lists", "LinkedList");// 数组长度System.out.println(shardedJedis.llen("lists"));// 排序// System.out.println(shardedJedis.sort("lists"));// 字串System.out.println(shardedJedis.lrange("lists", 0, 3));// 修改列表中单个值shardedJedis.lset("lists", 0, "hello list!");// 获取列表指定下标的值System.out.println(shardedJedis.lindex("lists", 1));// 删除列表指定下标的值System.out.println(shardedJedis.lrem("lists", 1, "vector"));// 删除区间以外的数据System.out.println(shardedJedis.ltrim("lists", 0, 1));// 列表出栈System.out.println(shardedJedis.lpop("lists"));// 整个列表值System.out.println(shardedJedis.lrange("lists", 0, -1)); }private void testSet() {System.out.println("=============set==========================");// 清空数据System.out.println(jedis.flushDB());// 添加数据shardedJedis.sadd("sets", "HashSet");shardedJedis.sadd("sets", "SortedSet");shardedJedis.sadd("sets", "TreeSet");// 判断value是否在列表中System.out.println(shardedJedis.sismember("sets", "TreeSet"));// 整个列表值System.out.println(shardedJedis.smembers("sets"));// 删除指定元素System.out.println(shardedJedis.srem("sets", "SortedSet"));// 出栈System.out.println(shardedJedis.spop("sets"));System.out.println(shardedJedis.smembers("sets"));//shardedJedis.sadd("sets1", "HashSet1");shardedJedis.sadd("sets1", "SortedSet1");shardedJedis.sadd("sets1", "TreeSet");shardedJedis.sadd("sets2", "HashSet2");shardedJedis.sadd("sets2", "SortedSet1");shardedJedis.sadd("sets2", "TreeSet1");// 交集System.out.println(jedis.sinter("sets1", "sets2"));// 并集System.out.println(jedis.sunion("sets1", "sets2"));// 差集System.out.println(jedis.sdiff("sets1", "sets2")); }private void testSortedSet() {System.out.println("=============zset==========================");// 清空数据System.out.println(jedis.flushDB());// 添加数据shardedJedis.zadd("zset", 10.1, "hello");shardedJedis.zadd("zset", 10.0, ":");shardedJedis.zadd("zset", 9.0, "zset");shardedJedis.zadd("zset", 11.0, "zset!");// 元素个数System.out.println(shardedJedis.zcard("zset"));// 元素下标System.out.println(shardedJedis.zscore("zset", "zset"));// 集合子集System.out.println(shardedJedis.zrange("zset", 0, -1));// 删除元素System.out.println(shardedJedis.zrem("zset", "zset!"));System.out.println(shardedJedis.zcount("zset", 9.5, 10.5));// 整个集合值System.out.println(shardedJedis.zrange("zset", 0, -1)); }private void testHash() {System.out.println("=============hash==========================");// 清空数据System.out.println(jedis.flushDB());// 添加数据shardedJedis.hset("hashs", "entryKey", "entryValue");shardedJedis.hset("hashs", "entryKey1", "entryValue1");shardedJedis.hset("hashs", "entryKey2", "entryValue2");// 判断某个值是否存在System.out.println(shardedJedis.hexists("hashs", "entryKey"));// 获取指定的值System.out.println(shardedJedis.hget("hashs", "entryKey"));// 批量获取指定的值System.out.println(shardedJedis.hmget("hashs", "entryKey", "entryKey1"));// 删除指定的值System.out.println(shardedJedis.hdel("hashs", "entryKey"));// 为key中的域 field 的值加上增量 incrementSystem.out.println(shardedJedis.hincrBy("hashs", "entryKey", 123l));// 获取所有的keysSystem.out.println(shardedJedis.hkeys("hashs"));// 获取所有的valuesSystem.out.println(shardedJedis.hvals("hashs")); }
}
常用命令
1)连接操作命令
quit:关闭连接(connection)
auth:简单密码认证
help cmd: 查看cmd帮助,例如:help quit
2)持久化
save:将数据同步保存到磁盘
bgsave:将数据异步保存到磁盘
lastsave:返回上次成功将数据保存到磁盘的Unix时戳
shundown:将数据同步保存到磁盘,然后关闭服务
3)远程服务控制
info:提供服务器的信息和统计
monitor:实时转储收到的请求
slaveof:改变复制策略设置
config:在运行时配置Redis服务器
4)对value操作的命令
exists(key):确认一个key是否存在
del(key):删除一个key
type(key):返回值的类型
keys(pattern):返回满足给定pattern的所有key
randomkey:随机返回key空间的一个
keyrename(oldname, newname):重命名key
dbsize:返回当前数据库中key的数目
expire:设定一个key的活动时间(s)
ttl:获得一个key的活动时间
select(index):按索引查询
move(key, dbindex):移动当前数据库中的key到dbindex数据库
flushdb:删除当前选择数据库中的所有key
flushall:删除所有数据库中的所有key
5)String
set(key, value):给数据库中名称为key的string赋予值value
get(key):返回数据库中名称为key的string的value
getset(key, value):给名称为key的string赋予上一次的value
mget(key1, key2,…, key N):返回库中多个string的value
setnx(key, value):添加string,名称为key,值为value
setex(key, time, value):向库中添加string,设定过期时间time
mset(key N, value N):批量设置多个string的值
msetnx(key N, value N):如果所有名称为key i的string都不存在
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的子串
6)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之间的元素
ltrim(key, start, end):截取名称为key的list
lindex(key, index):返回名称为key的list中index位置的元素
lset(key, index, value):给名称为key的list中index位置的元素赋值
lrem(key, count, value):删除count个key的list中值为value的元素
lpop(key):返回并删除名称为key的list中的首元素
rpop(key):返回并删除名称为key的list中的尾元素
blpop(key1, key2,… key N, timeout):lpop命令的block版本。
brpop(key1, key2,… key N, timeout):rpop的block版本。
rpoplpush(srckey, dstkey):返回并删除名称为srckey的list的尾元素,并将该元素添加到名称为dstkey的list的头部
7)Set
sadd(key, member):向名称为key的set中添加元素member
srem(key, member) :删除名称为key的set中的元素member
spop(key) :随机返回并删除名称为key的set中一个元素
smove(srckey, dstkey, member) :移到集合元素
scard(key) :返回名称为key的set的基数
sismember(key, member) :member是否是名称为key的set的元素
sinter(key1, key2,…key N) :求交集
sinterstore(dstkey, (keys)) :求交集并将交集保存到dstkey的集合
sunion(key1, (keys)) :求并集
sunionstore(dstkey, (keys)) :求并集并将并集保存到dstkey的集合
sdiff(key1, (keys)) :求差集
sdiffstore(dstkey, (keys)) :求差集并将差集保存到dstkey的集合
smembers(key) :返回名称为key的set的所有元素
srandmember(key) :随机返回名称为key的set的一个元素
8)Hash
hset(key, field, value):向名称为key的hash中添加元素field
hget(key, field):返回名称为key的hash中field对应的value
hmget(key, (fields)):返回名称为key的hash中field i对应的value
hmset(key, (fields)):向名称为key的hash中添加元素field
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