Redis学习总结(JAVA篇)

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

Jedis是Redis官方首选的Java客户端开发包,Redis是一个开源的Key-Value数据缓存。

使用JAVA进行Redis开发需要安装Jedis客户端,并且会用到相关的jar包:

jedis.jar:开发过程中使用的最基本的jar包

commons-pool.jar:当需要连接池时需要的jar包

jedis开发可以针对String、list、set、map、entity进行不同的操作,即可以保存不同类型的key-value键值对。

1、连接Redis:参数1、redis服务器IP(这里为本地的电脑IP),参数2、端口(这里为本地的端口号),参数3、连接时间(需不需要该参数视具体情况而定)

Jedis jedis = new Jedis("127.0.1.1","6379",5000);

2、密码验证,当连接Redis时不需要密码验证的时候,就可以省略掉本行代码

jedis.auth("pwd");

3、开始连接

jedis.connect();

4、断开连接

jedis.disconnect();

5、jedis的一些常用操作:

a、列出所有的key

Set jedisKeys = jedis.keys("*");

b、查找指定的key

Set keys = jedis.keys("key");

c、移除指定的一个或多个key,如果key不存在,则忽略此命令:

jedis.del("key1","key2",...);

d、检查指定的key是否存在:

jedis.exists("key");

e、将存在的key1进行重命名为key2,当操作的key不存在或者key1与key2相同时,会报错

jedis.rename("key1","key2");

f、获取存储key值得类型(String、list、set、map、entity):

jedis.type("key");

g、设置key值得生存时间,当key过期时,该key会被自动删除:参数1、key值,参数2、生存时间,单位为秒

jedis.expire("key",10);

h、移除key值得生存时间,移除后该key永不过期

jedis.persist("key");

i、返回jedis中key值得个数:

jedis.dbSize();

6、jedis对String的操作:

a、添加key-value键值对:(如果存在相同的key,覆盖原来的value)

jedis.set("key","value");

b、添加key-value键值对:(如果key值存在则不做任何操作,不存在设值成功)

jedis.setnx("key", "value");

c、添加key-value键值对,并设置key值的有效期(如果key值存在则覆盖,设置成功返回‘OK’)

jedis.setex("key", seconds, "value")

d、修改对应key的value值

jedis.setrange("key", 6, "value")

e、同时设置一个或多个key-value键值对:(如果某个key-value存在会用新值覆盖原来的旧值,总是成功,成功返回OK)

jedis.mset("key1", "value1", "key2", "value2", ..., ...);

f、同时设置一个或多个 key-value键值对:(如果某个key-value存在返回0,所有操作都会回滚, 如果成功返回ok)

jedis.msetnx("key1", "value1", "key2", "value2",...,...)

g、通过key值获取对应的value值,如果key不存在 返回null

jedis.get("key");

h、通过key获取对应的value,然后通过key设置新的value值

jedis.getSet("key","value");

i、返回key对应的value值的指定字符

jedis.getrange("key", start, end);

j、返回多个key的value值:

jedis.mget("key1","key2",...);

k、返回key对应value加1后的值(原value值必须是String类型的Integer值)

jedis.incr("key");

l、返回key对应value减1后的值(原value值必须是String类型的Integer值)

jedis.decr("key");

m、返回指定key对应value加指定值后的新值,如果key不存在则认为原来的value为0(原value值必须是String类型的Integer值)

jedis.incrBy("key",num);

n、返回指定key对应value减指定值后的新值,如果key不存在则认为原来的value为0(原value值必须是String类型的Integer值)

jedis.decrBy("key",num);

o、给指定的key的值追加, 返回新字符串的长度

jedis.append("key","appValue");

p、取得指定key的value值的长度

jedis.strlen("key"); 

 7、jedis对list的操作:

在Redis中,List类型是按照插入顺序排序的字符串链表。和数据结构中的普通链表一样,我们可以在其头部(left)和尾部(right)添加新的元素。在插入时,如果该键并不

存在,Redis将为该键创建一个新的链表。与此相反,如果链表中所有的元素均被移除,那么该键也将会被从数据库中删除

a、从list的右边插入元素(插入的value值可以是一个或多个):

jedis.rpush("key","value1","value2",...);

b、从list的左边插入元素(插入的value值可以是一个或多个):

jedis.lpush("key","value1","value2",...);

c、返回指定Key关联的链表中元素的数量,如果该Key不存在,则返回0

jedis.llen("key");

d、返回指定范围内元素的列表。其中start的值也可以为负值,-1将表示链表中的最后一个元素,即尾部元素,-2表示倒数第二个并以此类推。该命令在获取元素时,start和end位置上的元素也会被取出。如果start的值大于链表中元素的数量,空链表将会被返回。如果end的值大于元素的数量,该命令则获取从start(包括start)开始,链表中剩余的所有元素

jedis.lrange("key",start,end);

e、该命令将仅保留指定范围内的元素,从而保证链接中的元素数量相对恒定。start和stop也可以为负值,-1表示尾部元素。如果start大于链表的尾部,或start大于stop,该命令不错报错,而是返回一个空的链表,与此同时该Key也将被删除。如果stop大于元素的数量,则保留从start开始剩余的所有元素。

jedis.ltrim("key",start,end);

f、返回链表中指定位置(index)的元素,0表示头部元素,如果index为-1,表示尾部元素

jedis.lindex("key",index);

g、给链表中指定位置的值替换为新值,0表示头部元素,如果index为-1,表示尾部元素

jedis.lset("key",index,"newValue");

h、在指定Key关联的链表中,删除前count个值等于value的元素。如果count大于0,从头向尾遍历并删除,如果count小于0,则从尾向头遍历并删除。如果count等于0,则删除链表中所有等于value的元素。如果指定的Key不存在,则直接返回0,返回被删除的元素数量

jedis.lrem("key",count,value);

i、从指定list按顺序取出元素(从右边),返回取出的元素:

jedis.rpop("key");

j、从指定list按顺序取出元素(从左边),返回取出的元素:

jedis.lpop("key");

8、jedis对set的操作:

a、向set中增加元素:

jedis.sadd("key","value");

b、查询指定key对应的所有value值:

jedis.smembers("key");

c、移除指定的key-value值:

jedis.srem("key","remValue");

d、判断当前value是否是指定key集合中的元素:

jedis.sismember("key", "value");

e、返回指定key集合元素的个数:

jedis.scard("key");

f、取交集:

jedis.sinter("key1","key2");

g、取并集

   jedis.sunion("key1","key2");

h、取差集:

jedis.sdiff("key1","key2");

9、jedis对map的操作:

a、向map中增加元素(key:关联map的key):

jedis.hmset("key",new HashMap());

b、从map集合中取指定的key的value值(key:关联map的key;mapKey:map中key-value的key,可以为一个或多个):

jedis.hmget("key","mapKey");

c、删除map中的某个键值(key:关联map的key,mapKey:map中key-value的key):

jedis.hdel("key","mapKey");

d、返回map集合中key值存放的值的个数():

jedis.hlen("key");

e、是否存在指定key值的记录:

jedis.exists("key");

f、返回map对象中的所有key:

jedis.hkeys("key");

g、返回map对象中的所有value:

jedis.hvalues("key");

h、向map中增加元素

jedis.hset("key","entryKey","entryValue");

i、判断某个值是否存在

jedis.hexists("hashs", "entryKey");

j、从map集合中取指定的key的value值(key:关联map的key;mapKey:map中key-value的key)

jedis.hget("key","entryKey");

k、为key中的域 field 的值加上增量 increment

jedis.hincrBy("hashs", "entryKey", 123l);

l、根据key获取指定的map

jedis.hgetall("key");

10、jedis对实体的操作:

   Redis服务器不能直接存储实体,故对实体的操作中需要进行序列化和反序列化。剩下的操作和jedis操作String、list、set、map基本类似,把之前的key值类型由String改为byte[]就OK啦!

a、实体序列化:

public static byte[] serialize(Object object) {

ObjectOutputStream oos = null;

ByteArrayOutputStream baos = null;

try {

baos = new ByteArrayOutputStream();

oos = new ObjectOutputStream(baos);

oos.writeObject(object);

byte[] bytes = baos.toByteArray();

return bytes;

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

b、反序列化:

public static Object unserialize(byte[] bytes) {

ByteArrayInputStream bais = null;

try {

bais = new ByteArrayInputStream(bytes);

ObjectInputStream ois = new ObjectInputStream(bais);

return ois.readObject();

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

c、从list的右边插入object元素(插入的value值可以是一个或多个):

jedis.rpush(byte[] key, byte[] obj);

d、根据指定的key获取list的长度:

jedis.llen(byte[] key);

e、从指定list按顺序取出元素(从右边),返回取出的元素:

jedis.rpop(byte[] key);

注:其他各种操作都类似jedis操作String、list、set、map,把之前的key值类型由String改为byte[]就OK啦!

10、Redis连接池配置等请http://www.baidu.com.

 Redis学习总结就此结束! 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值