您的位置:首页 > 数据库 > Redis

Redis Quick Start

2015-02-04 00:00 411 查看
摘要: Redis是一个开源,先进的key-value存储,并用于构建高性能,可扩展的Web应用程序的完美解决方案。

Redis从它的许多竞争继承来的三个主要特点:
Redis数据库完全在内存中,使用磁盘仅用于持久性。
相比许多键值数据存储,Redis拥有一套较为丰富的数据类型。
Redis可以将数据复制到任意数量的从服务器。

Redis 优势
异常快速:Redis的速度非常快,每秒能执行约11万集合,每秒约81000+条记录。
支持丰富的数据类型:Redis支持最大多数开发人员已经知道像列表,集合,有序集合,散...

Redis是一个开源,先进的key-value存储,并用于构建高性能,可扩展的Web应用程序的完美解决方案。

Redis从它的许多竞争继承来的三个主要特点:

Redis数据库完全在内存中,使用磁盘仅用于持久性。

相比许多键值数据存储,Redis拥有一套较为丰富的数据类型。

Redis可以将数据复制到任意数量的从服务器。

Redis 优势

异常快速:Redis的速度非常快,每秒能执行约11万集合,每秒约81000+条记录。

支持丰富的数据类型:Redis支持最大多数开发人员已经知道像列表,集合,有序集合,散列数据类型。这使得它非常容易解决各种各样的问题,因为我们知道哪些问题是可以处理通过它的数据类型更好。

操作都是原子性:所有Redis操作是原子的,这保证了如果两个客户端同时访问的Redis服务器将获得更新后的值。

多功能实用工具:Redis是一个多实用的工具,可以在多个用例如缓存,消息,队列使用(Redis原生支持发布/订阅),任何短暂的数据,应用程序,如Web应用程序会话,网页命中计数等。

Redis Java连接操作

jedis 是 Redis 官方首选的 Java 客户端开发包

package com.cache.redis.client;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.apache.commons.lang.SerializationException;
import org.apache.log4j.Logger;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.exceptions.JedisException;

public class RedisClient {

private static final Logger logger = Logger.getLogger(RedisClient.class);

private JedisPool pool;
private JedisPoolConfig config;

private static final String HOST = "127.0.0.1";
private static final int PORT = 6379;
private static final int TIMEOUT = 20000;
private static final int MAX_ACTIVE = 100;
private static final int MAX_IDLE = 100;
private static final int MAX_WAIT = 1000;
private static final boolean TEST_ON_BORROW = false;
private static final boolean TEST_ON_RETURN = true;

public RedisClient() {
}

/**
* 初始化JedisPool
*/
public void initPool() {
config = new JedisPoolConfig();
// 最大Jedis实例数
config.setMaxActive(MAX_ACTIVE);
// 最大Idle
config.setMaxIdle(MAX_IDLE);
// 最大等待wait时间
config.setMaxWait(MAX_WAIT);
// 获得一个jedis实例的时候是否检查连接可用性ping()
config.setTestOnBorrow(TEST_ON_BORROW);
// return 一个jedis实例给pool时,是否检查连接可用性
config.setTestOnReturn(TEST_ON_RETURN);
pool = new JedisPool(config, HOST, PORT, TIMEOUT);
}

/**
* JedisPool销毁
*/
public void destroyPool() {
if (null != pool) {
pool.destroy();
}
}

/**
* 获得jedis对象
*
* @return
* @throws JedisException
*/
private Jedis getJedis() throws JedisException {
Jedis jedis = null;
try {
jedis = pool.getResource();
} catch (JedisException e) {
logger.error("failed:jedisPool getResource.", e);
if (jedis != null) {
pool.returnBrokenResource(jedis);
}
}
return jedis;
}

/**
* jedis销毁
*
* @param jedis
* @param isBroken
*/
private void release(Jedis jedis, boolean isBroken) {
if (jedis != null) {
if (isBroken) {
pool.returnBrokenResource(jedis);
} else {
pool.returnResource(jedis);
}
}
}

/**
* 序列化
*
* @param obj
* @return
*/
public static byte[] serialize(Object obj) {
if (obj == null) {
return null;
}

ByteArrayOutputStream baos = null;
ObjectOutputStream out = null;
try {
baos = new ByteArrayOutputStream(512);
out = new ObjectOutputStream(baos);
out.writeObject(obj);
byte[] bytes = baos.toByteArray();
return bytes;

} catch (IOException ex) {
throw new SerializationException(ex);
} finally {
try {
if (out != null) {
out.close();
}
} catch (IOException ex) {
}
}
}

/**
* 反序列化
*
* @param objectData
* @return
*/
public static Object deserialize(byte[] objectData) {
if (objectData == null) {
throw new IllegalArgumentException("The byte[] must not be null");
}

ByteArrayInputStream bais = null;
ObjectInputStream in = null;
try {
bais = new ByteArrayInputStream(objectData);
in = new ObjectInputStream(bais);
return in.readObject();

} catch (ClassNotFoundException ex) {
throw new SerializationException(ex);
} catch (IOException ex) {
throw new SerializationException(ex);
} finally {
try {
if (in != null) {
in.close();
}
} catch (IOException ex) {
}
}
}

/**
* 删除dbIndex库中所有key
*
* @param dbIndex
* @return
*/
public String flushDB(int dbIndex) {
Jedis jedis = null;
boolean isBroken = false;
String result = "";
try {
jedis = getJedis();
jedis.select(dbIndex);
result = jedis.flushDB();
} catch (Exception e) {
isBroken = true;
logger.error("flushDB failed:", e);
} finally {
release(jedis, isBroken);
}

return result;
}

/**
* 删除所有key
*
* @return
*/
public String flushAll() {
Jedis jedis = null;
boolean isBroken = false;
String result = "";
try {
jedis = getJedis();
result = jedis.flushAll();
} catch (Exception e) {
isBroken = true;
logger.error("flushAll failed:", e);
} finally {
release(jedis, isBroken);
}

return result;
}

/**
* 判断指定key是否存在
*
* @param dbIndex
* @param key
* @return
*/
public boolean exists(int dbIndex, String key) {
Jedis jedis = null;
boolean isBroken = false;
boolean flag = false;
try {
jedis = getJedis();
flag = jedis.exists(key);
} catch (Exception e) {
isBroken = true;
logger.error("", e);
} finally {
release(jedis, isBroken);
}

return flag;
}

/**
* 添加Object到cache
*
* @param dbIndex
* @param key
* @param obj
* @param seconds
*/
public void addItem(int dbIndex, String key, Object obj, int seconds) {
Jedis jedis = null;
boolean isBroken = false;
try {
jedis = getJedis();
jedis.select(dbIndex);
if (seconds != 0) {
jedis.setex(key.getBytes(), seconds, serialize(obj));
} else {
jedis.set(key.getBytes(), serialize(obj));
}
} catch (Exception e) {
isBroken = true;
logger.error("addItem failed:", e);
} finally {
release(jedis, isBroken);
}
}

/**
* 获取指定key的Object
*
* @param dbIndex
* @param key
* @return
*/
public Object getItem(int dbIndex, String key) {
Jedis jedis = null;
byte[] data = null;
boolean isBroken = false;
try {
jedis = getJedis();
jedis.select(dbIndex);
data = jedis.get(key.getBytes());
if (data.length < 0 || data == null) {
return null;
}
return deserialize(data);
} catch (Exception e) {
isBroken = true;
logger.error(" getItem failed:", e);
return null;
} finally {
release(jedis, isBroken);
}
}

/**
* 添加Object到cache的List中
*
* @param dbIndex
* @param key
* @param obj
*/
public void addItemToList(int dbIndex, String key, Object obj) {
Jedis jedis = null;
boolean isBroken = false;
try {
jedis = getJedis();
jedis.select(dbIndex);
jedis.lpushx(key.getBytes(), serialize(obj));
} catch (Exception e) {
isBroken = true;
logger.error(" addItemToList failed:", e);
} finally {
release(jedis, isBroken);
}
}

/**
* 获取指定key的List
*
* @param dbIndex
* @param key
* @return
*/
public List<Object> getItemFromList(int dbIndex, String key) {
Jedis jedis = null;
List<Object> dataList = null;
boolean isBroken = false;
try {
jedis = getJedis();
jedis.select(dbIndex);
long len = jedis.llen(key.getBytes());
if (len <= 0) {
return null;
}
List<byte[]> byteList = jedis.lrange(key.getBytes(), 0, (int) (len - 1));
dataList = new ArrayList<Object>();
for (byte[] b : byteList) {
dataList.add(deserialize(b));
}

} catch (Exception e) {
isBroken = true;
logger.error(" getItemFromList failed:", e);
} finally {
release(jedis, isBroken);
}

return dataList;
}

/**
* 删除指定key
*
* @param dbIndex
* @param key
* @return
*/
public long delItem(int dbIndex, String key) {
Jedis jedis = null;
boolean isBroken = false;
long result = 0;
try {
jedis = getJedis();
jedis.select(dbIndex);
result = jedis.del(key.getBytes());
} catch (Exception e) {
isBroken = true;
logger.error(" delItem failed:", e);
} finally {
release(jedis, isBroken);
}

return result;
}

/**
* 添加Map到cache
*
* @param dbIndex
* @param key
* @param map
*/
public void addMap(int dbIndex, String key, Map<String, String> map) {
Jedis jedis = null;
boolean isBroken = false;
try {
jedis = getJedis();
jedis.select(dbIndex);

if (map != null && !map.isEmpty()) {
for (String mapKey : map.keySet()) {
jedis.hset(key, mapKey, map.get(mapKey));
}
}
} catch (Exception e) {
isBroken = true;
logger.error(" addMap failed:", e);
} finally {
release(jedis, isBroken);
}
}

/**
* 添加Map到cache
*
* @param dbIndex
* @param key
* @param map
*/
public void addMap(int dbIndex, String key, Map<String, String> map, int seconds) {
Jedis jedis = null;
boolean isBroken = false;
try {
jedis = getJedis();
jedis.select(dbIndex);

if (map != null && !map.isEmpty()) {
for (String mapKey : map.keySet()) {
jedis.hset(key, mapKey, map.get(mapKey));
}
}
if (seconds != 0) {
jedis.expire(key, seconds);
}
} catch (Exception e) {
isBroken = true;
logger.error(" addMap failed:", e);
} finally {
release(jedis, isBroken);
}
}

/**
* 获取指定key的Map
*
* @param dbIndex
* @param key
* @return
*/
public Map<String, String> getMap(int dbIndex, String key) {
Jedis jedis = null;
boolean isBroken = false;
Map<String, String> map = null;
try {
jedis = getJedis();
jedis.select(dbIndex);
map = jedis.hgetAll(key);
} catch (Exception e) {
isBroken = true;
logger.error(" getMap failed:", e);
} finally {
release(jedis, isBroken);
}

return map;
}

/**
* 获取指定key的Map中的field
*
* @param dbIndex
* @param key
* @param field
* @return
*/
public String getMapItem(int dbIndex, String key, String field) {
Jedis jedis = null;
boolean isBroken = false;
String result = null;
try {
jedis = getJedis();
jedis.select(dbIndex);
result = jedis.hget(key, field);
} catch (Exception e) {
isBroken = true;
logger.error(" getMapItem failed:", e);
} finally {
release(jedis, isBroken);
}

return result;
}

/**
* 判断指定key的Map中的field是否存在
*
* @param dbIndex
* @param key
* @param field
* @return
*/
public boolean isMapFieldExists(int dbIndex, String key, String field) {
Jedis jedis = null;
boolean isBroken = false;
boolean result = false;
try {
jedis = getJedis();
jedis.select(dbIndex);
result = jedis.hexists(key, field);
} catch (Exception e) {
isBroken = true;
logger.error(" isMapFieldExists failed:", e);
} finally {
release(jedis, isBroken);
}

return result;
}

/**
* 添加List到cache
*
* @param dbIndex
* @param key
* @param list
*/
public void addList(int dbIndex, String key, List<String> list) {
Jedis jedis = null;
boolean isBroken = false;
try {
jedis = getJedis();
jedis.select(dbIndex);
if (list != null && !list.isEmpty()) {
for (String value : list) {
jedis.lpush(key, value);
}
}
} catch (Exception e) {
isBroken = true;
logger.error(" addList failed:", e);
} finally {
release(jedis, isBroken);
}
}

/**
* 获取指定key的List
*
* @param dbIndex
* @param key
* @return
*/
public List<String> getList(int dbIndex, String key) {
Jedis jedis = null;
boolean isBroken = false;
List<String> list = null;
try {
jedis = getJedis();
jedis.select(dbIndex);
list = jedis.lrange(key, 0, -1);
} catch (Exception e) {
isBroken = true;
logger.error(" getList failed:", e);
} finally {
release(jedis, isBroken);
}

return list;
}

/**
* 添加Set到cache
*
* @param dbIndex
* @param key
* @param members
*/
public void addSet(int dbIndex, String key, Set<String> members) {
Jedis jedis = null;
boolean isBroken = false;
try {
jedis = getJedis();
jedis.select(dbIndex);
if (members != null && !members.isEmpty()) {
for (String member : members) {
jedis.sadd(key, member);
}
}
} catch (Exception e) {
isBroken = true;
logger.error(" addSet failed:", e);
} finally {
release(jedis, isBroken);
}
}

/**
* 获取指定key的Set
*
* @param dbIndex
* @param key
* @return
*/
public Set<String> getSet(int dbIndex, String key) {
Jedis jedis = null;
boolean isBroken = false;
Set<String> set = null;
try {
jedis = getJedis();
jedis.select(dbIndex);
set = jedis.smembers(key);
} catch (Exception e) {
isBroken = true;
logger.error(" getSet failed:", e);
} finally {
release(jedis, isBroken);
}

return set;
}

/**
* 添加byte[]到cache
*
* @param dbIndex
* @param key
* @param bytes
*/
public void addItemByte(int dbIndex, String key, byte[] bytes) {
Jedis jedis = null;
boolean isBroken = false;
try {
jedis = getJedis();
jedis.select(dbIndex);
if (bytes != null && bytes.length > 0) {
jedis.set(key.getBytes(), bytes);
}
} catch (Exception e) {
isBroken = true;
logger.error(" addItemByte failed:", e);
} finally {
release(jedis, isBroken);
}
}

/**
* 获取指定key的byte[]
*
* @param dbIndex
* @param key
* @return
*/
public byte[] getItemByte(int dbIndex, String key) {
Jedis jedis = null;
boolean isBroken = false;
byte[] bytes = null;
try {
jedis = getJedis();
jedis.select(dbIndex);
bytes = jedis.get(key.getBytes());
} catch (Exception e) {
isBroken = true;
logger.error(" getSet failed:", e);
} finally {
release(jedis, isBroken);
}

return bytes;
}

/**
* 添加String到cache
*
* @param dbIndex
* @param key
* @param value
*/
public void addString(int dbIndex, String key, String value) {
Jedis jedis = null;
boolean isBroken = false;
try {
jedis = getJedis();
jedis.select(dbIndex);
jedis.set(key, value);
} catch (Exception e) {
isBroken = true;
logger.error(" getSet failed:", e);
} finally {
release(jedis, isBroken);
}
}

/**
* 获取指定key的String
*
* @param dbIndex
* @param key
*/
public String getString(int dbIndex, String key) {
Jedis jedis = null;
boolean isBroken = false;
try {
jedis = getJedis();
jedis.select(dbIndex);
return jedis.get(key);
} catch (Exception e) {
isBroken = true;
logger.error(" getSet failed:", e);
return null;
} finally {
release(jedis, isBroken);
}

}

/**
* 指定key的String加1
*
* @param dbIndex
* @param key
* @return
*/
public long getIncr(int dbIndex, String key) {
Jedis jedis = null;
boolean isBroken = false;
long result = 0;
try {
jedis = getJedis();
jedis.select(dbIndex);
result = jedis.incr(key);
} catch (Exception e) {
isBroken = true;
logger.error(" getIncr failed:", e);
} finally {
release(jedis, isBroken);
}

return result;
}

/**
* 指定key的String加integer
*
* @param dbIndex
* @param key
* @return
*/
public long getIncrBy(int dbIndex, String key, long integer) {
Jedis jedis = null;
boolean isBroken = false;
long result = 0;
try {
jedis = getJedis();
jedis.select(dbIndex);
result = jedis.incrBy(key, integer);
} catch (Exception e) {
isBroken = true;
logger.error(" getIncrBy failed:", e);
} finally {
release(jedis, isBroken);
}

return result;
}

/**
* 指定key的String减1
*
* @param dbIndex
* @param key
* @return
*/
public long getDecr(int dbIndex, String key) {
Jedis jedis = null;
boolean isBroken = false;
long result = 0;
try {
jedis = getJedis();
jedis.select(dbIndex);
result = jedis.decr(key);
} catch (Exception e) {
isBroken = true;
logger.error(" getDecr failed:", e);
} finally {
release(jedis, isBroken);
}

return result;
}

/**
* 指定key的String减integer
*
* @param dbIndex
* @param key
* @return
*/
public long getDecr(int dbIndex, String key, long integer) {
Jedis jedis = null;
boolean isBroken = false;
long result = 0;
try {
jedis = getJedis();
jedis.select(dbIndex);
result = jedis.decrBy(key, integer);
} catch (Exception e) {
isBroken = true;
logger.error(" getDecr failed:", e);
} finally {
release(jedis, isBroken);
}

return result;
}

/**
* 删除指定key的Set中的元素itemValue
*
* @param dbIndex
* @param key
* @param itemValue
* @return
*/
public boolean removeSetItem(int dbIndex, String key, String itemValue) {
Jedis jedis = null;
boolean isBroken = false;
boolean flag = false;
try {
jedis = getJedis();
jedis.select(dbIndex);
Long result = jedis.srem(key, itemValue);
if (result == 1) {
flag = true;
}
} catch (Exception e) {
isBroken = true;
logger.error(" removeSetItem failed:", e);
} finally {
release(jedis, isBroken);
}

return flag;
}

/**
* 判断指定key的Set中的元素itemValue是否存在
*
* @param dbIndex
* @param key
* @param itemValue
* @return
*/
public boolean isSetItemExist(int dbIndex, String key, String itemValue) {
Jedis jedis = null;
boolean isBroken = false;
boolean flag = false;
try {
jedis = getJedis();
jedis.select(dbIndex);
flag = jedis.sismember(key, itemValue);
} catch (Exception e) {
isBroken = true;
logger.error(" removeSetItem failed:", e);
} finally {
release(jedis, isBroken);
}

return flag;
}

}

测试类

package com.cache.redis.client;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class RedisCilentTest {

private RedisClient client = null;
private static final int DB_INDEX = 0;

@Before
public void before() {
client = new RedisClient();
client.initPool();
}

@After
public void after() {
client.destroyPool();
}

@Test
public void testAddItem() {
String key = "name";
String str = "king";
client.addItem(DB_INDEX, key, str, 120);
Object o = client.getItem(DB_INDEX, key);
System.out.println(o);
}

@Test
public void testAddString() {
String key = "str-key-01";
String count = "9";
client.addString(DB_INDEX, key, count);
Object o = client.getString(DB_INDEX, key);
System.out.println(o);
}

@Test
public void testAddMap() {
Map<String, String> map = new HashMap<String, String>();
map.put("mk-01", "value-01");
map.put("mk-02", "value-02");
map.put("mk-03", "value-03");
map.put("mk-04", "value-04");
client.addMap(DB_INDEX, "map-key-01", map, 6000);
}

@Test
public void testGetMap() {
Map<String, String> rMap = client.getMap(DB_INDEX, "map-key-01");
if (rMap != null && !rMap.isEmpty()) {
for (String key : rMap.keySet()) {
System.out.println("key:" + key + "    value :" + rMap.get(key));
}
}
}

@Test
public void testAddSet() {
Set<String> set = new HashSet<String>();
set.add("set-value-01");
set.add("set-value-02");
set.add("set-value-03");
set.add("set-value-04");
client.addSet(DB_INDEX, "set-key-01", set);
}

@Test
public void testgetSet() {
String key = "set-key-01";
Set<String> set = new HashSet<String>();
set = client.getSet(DB_INDEX, key);
if (!set.isEmpty()) {
System.out.println("Key : " + key);
for (String value : set) {
System.out.print("value:" + value);
}
}
}

@Test
public void testAddList() {
List<String> list = new ArrayList<String>();
list.add("list-value-01");
list.add("list-value-02");
list.add("list-value-03");
list.add("list-value-04");
client.addList(DB_INDEX, "list-key-01", list);
}

@Test
public void testGetList() {
List<String> list = client.getList(DB_INDEX, "list-key-01");
if (list != null && list.size() > 0) {
for (String string : list) {
System.out.println(string);
}
}
}

@Test
public void testGetIncrBy() {
String key = "str-key-02";
int count = 80;
client.addString(DB_INDEX, key, String.valueOf(count));
long r = client.getIncrBy(DB_INDEX, key, 10);
System.out.println(r);
}

}


附:Jedis操作命令

一、常用数据类型简介:
redis常用五种数据类型:string,hash,list,set,zset(sorted set).
1.String类型

String是最简单的类型,一个key对应一个value

String类型的数据最大1G。

String类型的值可以被视作integer,从而可以让“INCR”命令族操作(incrby、decr、decrby),这种情况下,该integer的值限制在64位有符号数。
在list、set和zset中包含的独立的元素类型都是Redis String类型。

2.List类型

链表类型,主要功能是push、pop、获取一个范围的所有值等。其中的key可以理解为链表的名字。

在Redis中,list就是Redis String的列表,按照插入顺序排序。比如使用LPUSH命令在list头插入一个元素,使用RPUSH命令在list的尾插入一个元素。当这两个命令之一作用于一个空的key时,一个新的list就创建出来了。

List的最大长度是2^32-1个元素。

3.Set类型

集合,和数学中的集合概念相似。操作中的key理解为集合的名字。

在Redis中,set就是Redis String的无序集合,不允许有重复元素。

Set的最大元素数是2^32-1。

Redis中对set的操作还有交集、并集、差集等。

4.ZSet(Sorted Set)类型

Zset是set的一个升级版本,在set的基础上增加了一个顺序属性,这一属性在添加修改元素时可以指定,每次指定后zset会自动安装指定值重新调整顺序。可以理解为一张表,一列存value,一列存顺序。操作中的key理解为zset的名字。

Zset的最大元素数是2^32-1。

对于已经有序的zset,仍然可以使用SORT命令,通过指定ASC|DESC参数对其进行排序。

5.hash类型

hash是最接近关系数据库结构的数据类型,可以将数据库一条记录或程序中一个对象转换成hashmap存放在redis中。

二、jedis操作命令:
1.对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
2.对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的子串
3.对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秒,如果问题没有解决,则对key i+1开始的list执行pop操作。
brpop(key1, key2,… key N, timeout):rpop的block版本。参考上一命令。
rpoplpush(srckey, dstkey):返回并删除名称为srckey的list的尾元素,并将该元素添加到名称为dstkey的list的头部

4.对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的一个元素
5.对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的值为incre ment
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是所有集合对应元素中最小值和最大值。
6.对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
三、各种数据类型所对应的应用场景
1.String类型的应用场景
String是最常用的一种数据类型,普通的key/value存储.
2.list类型的应用场景
比较适用于列表式存储且顺序相对比较固定,例如:

省份、城市列表

品牌、厂商、车系、车型等列表

拆车坊专题列表...

3.set类型的应用场景
Set对外提供的功能与list类似,当需要存储一个列表数据,又不希望出现重复数据时,可选用set
4.zset(sorted set)类型的应用场景

zset的使用场景与set类似,区别是set不是自动有序的,而zset可以通过用户额外提供一个优先级(score)的参数来为成员排序,并且是插入有序的,即自动排序.当你需要一个有序的并且不重复的集合列表,那么可以选择zset数据结构。例如:

根据PV排序的热门车系车型列表

根据时间排序的新闻列表

5.hash类型的应用场景

类似于表记录的存储

页面视图所需数据的存储
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  NoSQL Redis Jedis QuickStart