redis的常用命令操作 及用java操作Redis(Jedis)
一 redis的命令操作
MySql、Oracle等关系型数据库我们一般都通过SQL语句对数据进行操作,但是非关系型数据库没有SQL(NOSQL),我们一般都是通过相应的客户端命令进行数据操作。
1.key
命令 |
描述 |
keys * |
查询当前库的所有键 |
exists <key> |
判断某个键是否存在 |
type <key> |
查看键的类型 |
del <key> |
删除某个键 |
expire <key> <seconds> |
为键值设置过期时间,单位秒。 |
ttl <key> |
查看还有多少秒过期,-1表示永不过期,-2表示已过期 |
dbsize |
查看当前数据库的key的数量 |
flushdb |
清空当前库 |
flushall |
通杀全部库 |
获取当前键的所有key值:
命令:keys *
判断某个键是否存在 : exists <key>
查看键的数据类型
为键值设置过期时间:expire <key> <seconds>
查看还有多少秒过期,-1表示永不过期,-2表示已过期: ttl <key>
2 String
命令 |
描述 |
get <key> |
查询指定键对应的值 |
set <key> <value> |
添加键值对 |
append <key> <value> |
将给定的value追加到原值的末尾 |
strlen <key> |
获得值的长度 |
setnx <key> <value> |
只有在 key 不存在时设置 key 的值 |
incr <key> |
将 key 中储存的数字值增1,只能对数字值操作,如果为空,新增值为1 |
decr <key> |
将 key 中储存的数字值减1,只能对数字值操作,如果为空,新增值为-1 |
incrby / decrby <key> <step> |
将 key 中储存的数字值增减。自定义步长(增幅)。 |
mset <key1> <value1> <key2> <value2> ······ |
同时设置一个或多个 key-value对。 |
mget <key1> <key2> <key3> ······ |
同时获取一个或多个 value。 |
msetnx <key1> <value1> <key2> <value2> ······ |
同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。 |
getrange <key> <start> <end> |
获得值的范围,类似java中的substring。 |
setrange <key> <start> <value> |
用value覆写key所储存的字符串值,从起始位置开始。 SETRANGE 命令会确保字符串足够长以便将 value 设置在指定的偏移量上,如果给定 key 原来储存的字符串长度比偏移量小(比如字符串只有 5 个字符长,但你设置的 offset 是 10 ),那么原字符和偏移量之间的空白将用零字节(zerobytes, "\x00" )来填充 |
setex <key> <expire> <value> |
设置键值的同时,设置过期时间,单位秒。 |
getset <key> <value> |
以新换旧,设置了新值同时获得旧值。 |
同时设置一个或多个 key-value对 同时获取一个或多个 value。
1) 获得值的范围,类似java中的substring : getrange <key> <start> <end>
2) 用value覆写key所储存的字符串值,从起始位置开始。 SETRANGE 命令会确保字符串足够长以便将 value 设置在指定的偏移量上,如果给定 key 原来储存的字符串长度比偏移量小(比如字符串只有 5 个字符长,但你设置的 offset 是 10 ),那么原字符和偏移量之间的空白将用零字节(zerobytes, "\x00" )来填充 : setrange <key> <start> <value>
设置键值的同时设置过期时间
以新换旧:设置新值的同时获取旧值
3 list
命令 |
描述 |
lpush/rpush <key> <value1> <value2> <value3> ······ |
从左边/右边插入一个或多个值 |
lpop/rpop <key> |
从左边/右边吐出一个值, 值在键在,值光键亡。 |
rpoplpush <key1> <key2> |
从key1列表右边吐出一个值,插到key2列表左边 |
lrange <key> <index><end> |
按照索引下标获得一段元素(从到左) |
lindex <key> <index> |
按照索引下标获得对应的单个元素(从右到左) |
llen <key> |
获得列表长度 |
linsert <key> before|after <value> <newvalue> |
在value的前面(后面)插入newvalue插入值 |
lrem <key> <n> <value> |
从左边删除n个value(从左到右)
|
4 set
命令 |
描述 |
sadd <key> <value1> <value2> <value3> ······ |
将一个或多个元素加入到集合 key 当中,已经存在于集合的元素将被忽略。 |
smembers <key> |
取出该集合的所有值。 |
sismember <key> <value> |
判断集合key是否为含有该value值,有返回1,没有返回0 |
srem <key> <value1> <value2> ······ |
删除集合中的某个元素。 |
spop <key> |
随机从该集合中吐出一个值 |
srandmember <key> <n> |
随机从该集合中取出n个值。不会从集合中删除 |
sinter <key1> <key2> |
返回两个集合的交集元素。 |
sunion <key1> <key2> |
返回两个集合的并集元素 |
sdiff <key1> <key2> |
返回两个集合的差集元素。 |
5 hash
命令 |
描述 |
hset <key> <field> <value> |
给key集合中的field键赋值value。 |
hget <key1> <field> |
从key1集合field取出value。 |
hmset <key1> <field1> <value1> <field2> <value2> |
批量设置hash的值 |
hexists <key> <field> |
查看哈希表 key 中,给定域 field 是否存在。 |
hkeys <key> |
列出该hash集合的所有field |
hvals <key> |
列出该hash集合的所有value |
hincrby <key> <field> <increment> |
为哈希表 key 中的域 field 的值加上增量 increment。 |
hsetnx <key> <field> <value> |
将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在 |
6 zset
命令 |
描述 |
zadd <key> <score1> <value1> <score2> <value2> |
将一个或多个 member 元素及其 score 值加入到有序集 key 当中。 |
zrange <key> <start> <stop> [ WITHSCORES ] |
返回有序集 key 中,下标在start,stop之间的元素, 带WITHSCORES,可以让分数一起和值返回到结果集. |
zrangebyscore <key> <min> <max> WITHSCORES |
返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。有序集成员按 score 值递增(从小到大)次序排列。 |
zrevrangebyscore <key> <max> <min> WITHSCORES |
同上,改为从大到小排列. |
zincrby <key> <increment> <value> |
为元素的score加上增量 |
zrem <key> <value> |
删除该集合下,指定值的元素 |
zcount <key> <min> <max> |
统计该集合,分数区间内的元素个数 |
zrank <key> <value> |
返回该值在集合中的排名,从0开始。 |
二 JavaAPI操作Redis
Java操作Redis这个技术叫Jedis
注:1)使用之前记住需要关闭防火墙
2)
3)连接之前要保证redis服务器端开启
4.1、环境准备
使用eclipse操作,需要导入两个jar包: commons-pool-1.6.jar和jedis-3.0.1.jar
4.2、建立连接
注意:redis配置文件中有bind 绑定IP,我们可以将这个配置注释掉(上边的图片),注释掉之后就是所有的电脑都可以连接上来。
打印PONG说明连接成功
4.3 操作
import org.junit.Test;
import redis.clients.jedis.Jedis;
public class JedisTest {
@Test
public void testString() {
//java操作redis我们需要使用Jedis对象
//连接本地redis服务
Jedis jedis=new Jedis("192.168.132.101",6379);
//jedis.auth("123"); //有密码时需要加入密码
//查看服务是否运行 打印PONG说明连接成功
System.out.println(jedis.ping());
}
}
后边的操作都针对与此
(1 )key 操作
(2)String操作
//String操作
jedis.set("k1","nihao");
System.out.println(jedis.get("k1"));
System.out.println("----------------------------------------");
jedis.mset("k2","hello","k3","tom");
System.out.println(jedis.mget("k1","k2","k3"));
(3) set操作
//set操作
jedis.sadd("set1", "huanying");
jedis.sadd("set01", "nihao","hello","tom","nihao","amy");
//取出该集合中的所有值
Set<String> s1 = jedis.smembers("set01");
for (String string : s1) {
System.out.println(string);
}
//和上边操作一样
for (Iterator iterator = s1.iterator(); iterator.hasNext();) {
String string = (String) iterator.next();
System.out.println("---------------"+string); }
jedis.srem("set01","amy");//删除集合中的某个元素。
(4)list操作
//list操作
jedis.lpush("k22", "pp aa cc","sazd","oo","yy","oo");
List<String> list=jedis.lrange("k22", 0, 2); //结果:oo yy oo
for (String element : list) {
System.out.println(element);
}
(5)Hash操作
//hash操作
jedis.hset("hash1", "username", "Tom");
System.out.println("++++++"+jedis.hget("hash1", "username"));
Map map=new HashMap();
map.put("telephone","18833011104");
map.put("address", "tianjin");
map.put("email", "[email protected]");
jedis.hset("hash2", map);
List result=jedis.hmget("hash2", "telephone","email");
for (Object object : result) {
System.out.println("-------"+object);
}
(6) zset操作
//zset操作
//格式:jedis.zadd(key, score, value)
jedis.zadd("zset1", 78.2, "amy");
jedis.zadd("zset1", 81, "tom");
jedis.zadd("zset1", 27.6, "hello");
jedis.zadd("zset1", 79, "baibai");
//获取key值下的所有值
Set s=jedis.zrange("zset1", 0, -1);
for (Object object : s) {
System.out.println("-----"+object);
}
for (Iterator iterator = s.iterator(); iterator.hasNext();) {
String string = (String) iterator.next();
System.out.println("++++"+string);
}