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); } }
Category Archives: KV
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服务器 |