redis命令介绍(常见的操作命令)及其实例客户端的写法

http://redis.io/commands

  • BLPOP key
    [key ...] timeout删除,并获得该列表中的第一元素,或阻塞,直到有一个可用
  • BRPOP key
    [key ...] timeout删除,并获得该列表中的最后一个元素,或阻塞,直到有一个可用
  • BRPOPLPUSH source
    destination timeout弹出一个列表的值,将它推到另一个列表,并返回它;或阻塞,直到有一个可用
  • LINDEX key
    index获取一个元素,通过其索引列表

二:redis的使用实例:

1)pom.xml里面引用jedis的包即可:

<!-- redis -->

<dependency>

<groupId> redis.clients</groupId >

<artifactId> jedis</artifactId >

<version> 2.6.0</ version>

<type> jar</ type>

<scope> compile</ scope>

</dependency>

2)RedisClient代码如下:注意细细体会shardedJedisPool 
和 jedisPool 的用法

package apptools.tdt.util;

import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;

import java.util.Set;

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;

import redis.clients.jedis.SortingParams;

public class RedisClient
{

public static void main(String[]
args) {

RedisClient cli = new RedisClient();

cli.show();

}

private final Jedis jedis ;//
非切片额客户端连接

private JedisPool jedisPool ;//
非切片连接池

private final ShardedJedis shardedJedis; //
切片额客户端连接

private ShardedJedisPool shardedJedisPool ;//
切片连接池

public RedisClient()
{

initialPool();

initialShardedPool();

shardedJedis = shardedJedisPool .getResource();

jedis = jedisPool.getResource();

// jedis.slaveof(host,
port);

}

/**

* 初始化非切片池

*/

private void initialPool()
{

// 池基本配置

JedisPoolConfig config = new JedisPoolConfig();

// config.setMaxActive(20);

config.setMaxIdle(5);

// config.setMaxWait(1000l);

config.setTestOnBorrow( false);

jedisPool = new JedisPool(config, "10.2.10.29",
6379);

}

/**

* 初始化切片池

*/

private void initialShardedPool()
{

// 池基本配置

JedisPoolConfig config = new JedisPoolConfig();

// config.setMaxActive(20);

config.setMaxIdle(5);

// config.setMaxWait(1000l);

config.setTestOnBorrow( false);

// slave链接

List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>();

shards.add( new JedisShardInfo("10.2.10.27" ,
6379, "master1" ));

shards.add( new JedisShardInfo("10.2.10.28" ,
6379, "master2" ));

// 构造池

shardedJedisPool = new ShardedJedisPool(config,
shards);

// shardedJedisPool.getResource().sla

}

public void show()
{

KeyOperate();

System. out.println("##############################StringOperate#############################################" );

StringOperate();

System. out.println("##########################ListOperate#################################################" );

ListOperate();

System. out.println("##########################SetOperate#################################################" );

SetOperate();

System. out.println("###########################SortedSetOperate################################################" );

SortedSetOperate();

System. out.println("###########################HashOperate################################################" );

HashOperate();

System. out.println("###########################################################################" );

jedisPool.returnResource(jedis );

shardedJedisPool.returnResource(shardedJedis );

}

private void KeyOperate()
{

System. out.println("======================key==========================" );

// 清空数据

System. out.println("清空库中所有数据:" + jedis .flushDB());

// 判断key否存在

System. out.println("判断key999键是否存在:" + shardedJedis.exists("key999" ));

System. out.println("新增key001,value001键值对:" + shardedJedis.set("key001" , "value001" ));

System. out.println("判断key001是否存在:" + shardedJedis.exists("key001" ));

// 输出系统中所有的key

System. out.println("新增key002,value002键值对:" + shardedJedis.set("key002" , "value002" ));

System. out.println("系统中所有键如下:" );

Set<String> keys = jedis.keys( "*");

Iterator<String> it = keys.iterator();

while (it.hasNext())
{

String key = it.next();

System. out.println(key);

}

// 删除某个key,若key不存在,则忽略该命令。

System. out.println("系统中删除key002:
" + jedis .del("key002" ));

System. out.println("判断key002是否存在:" + shardedJedis.exists("key002" ));

// 设置 key001的过期时间

System. out.println("设置
key001的过期时间为5秒:" + jedis.expire("key001" ,
5));

try {

Thread. sleep(2000);

catch (InterruptedException
e) {

}

// 查看某个key的剩余生存时间,单位【秒】.永久生存或者不存在的都返回-1

System. out.println("查看key001的剩余生存时间:" + jedis.ttl("key001" ));

// 移除某个key的生存时间

System. out.println("移除key001的生存时间:" + jedis.persist("key001" ));

System. out.println("查看key001的剩余生存时间:" + jedis.ttl("key001" ));

// 查看key所储存的值的类型

System. out.println("查看key所储存的值的类型:" + jedis.type("key001" ));

/*

* 一些其他方法:1、修改键名:jedis.rename("key6", "key0"); 2、将当前db的key移动到给定的 db当中:jedis.move("foo",
1)

*/

}

private void StringOperate()
{

System. out.println("======================String_1==========================" );

// 清空数据

System. out.println("清空库中所有数据:" + jedis .flushDB());

System. out.println("=============增=============" );

jedis.set( "key001", "value001" );

jedis.set( "key002", "value002" );

jedis.set( "key003", "value003" );

System. out.println("已新增的3个键值对如下:" );

System. out.println(jedis .get("key001" ));

System. out.println(jedis .get("key002" ));

System. out.println(jedis .get("key003" ));

System. out.println("=============删=============" );

System. out.println("删除key003键值对:" + jedis .del("key003" ));

System. out.println("获取key003键对应的值:" + jedis .get("key003" ));

System. out.println("=============改=============" );

// 1、直接覆盖原来的数据

System. out.println("直接覆盖key001原来的数据:" + jedis.set("key001" , "value001-update" ));

System. out.println("获取key001对应的新值:" + jedis .get("key001" ));

// 2、直接覆盖原来的数据

System. out.println("在key002原来值后面追加:" + jedis.append("key002" , "+appendString" ));

System. out.println("获取key002对应的新值" + jedis .get("key002" ));

System. out.println("=============增,删,查(多个)=============" );

/**

mset,mget 同时新增,修改,查询多个键值对
等价于: jedis.set("name","ssss"); jedis.set(" jarorwar","xxxx");

*/

System. out.println("一次性新增key201,key202,key203,key204及其对应值:" + jedis .mset("key201" , "value201" , "key202" , "value202" , "key203" , "value203" , "key204", "value204" ));

System. out.println("一次性获取key201,key202,key203,key204各自对应的值:" + jedis .mget("key201" , "key202" , "key203" , "key204" ));

System. out.println("一次性删除key201,key202:" + jedis .del(new String[]
{ "key201" , "key202" }));

System. out.println("一次性获取key201,key202,key203,key204各自对应的值:" + jedis .mget("key201" , "key202" , "key203" , "key204" ));

System. out.println();

// jedis 具备的功能shardedJedis中也可直接使用,下面测试一些前面没用过的方法

System. out.println("======================String_2==========================" );

// 清空数据

System. out.println("清空库中所有数据:" + jedis .flushDB());

System. out.println("=============新增键值对时防止覆盖原先值=============" );

System. out.println("原先key301不存在时,新增key301:" + shardedJedis.setnx("key301" , "value301" ));

System. out.println("原先key302不存在时,新增key302:" + shardedJedis.setnx("key302" , "value302" ));

System. out.println("当key302存在时,尝试新增key302:" + shardedJedis.setnx("key302" , "value302_new" ));

System. out.println("获取key301对应的值:" + shardedJedis.get("key301" ));

System. out.println("获取key302对应的值:" + shardedJedis.get("key302" ));

System. out.println("=============超过有效期键值对被删除=============" );

// 设置key的有效期,并存储数据

System. out.println("新增key303,并指定过期时间为2秒" + shardedJedis.setex("key303" ,
2, "key303-2second" ));

System. out.println("获取key303对应的值:" + shardedJedis.get("key303" ));

try {

Thread. sleep(3000);

catch (InterruptedException
e) {

}

System. out.println("3秒之后,获取key303对应的值:" + shardedJedis.get("key303" ));

System. out.println("=============获取原值,更新为新值一步完成=============" );

System. out.println("key302原值:" + shardedJedis .getSet("key302" , "value302-after-getset" ));

System. out.println("key302新值:" + shardedJedis .get("key302" ));

System. out.println("=============获取子串=============" );

System. out.println("获取key302对应值中的子串:" + shardedJedis.getrange("key302" ,
5, 7));

}

private void ListOperate()
{

System. out.println("======================list==========================" );

// 清空数据

System. out.println("清空库中所有数据:" + jedis .flushDB());

System. out.println("=============增=============" );

shardedJedis.lpush("stringlists" , "vector" );

shardedJedis.lpush("stringlists" , "ArrayList" );

shardedJedis.lpush("stringlists" , "vector" );

shardedJedis.lpush("stringlists" , "vector" );

shardedJedis.lpush("stringlists" , "LinkedList" );

shardedJedis.lpush("stringlists" , "MapList" );

shardedJedis.lpush("stringlists" , "SerialList" );

shardedJedis.lpush("stringlists" , "HashList" );

shardedJedis.lpush("numberlists" , "3" );

shardedJedis.lpush("numberlists" , "1" );

shardedJedis.lpush("numberlists" , "5" );

shardedJedis.lpush("numberlists" , "2" );

System. out.println("所有元素-stringlists:" + shardedJedis.lrange("stringlists" ,
0, -1));

System. out.println("所有元素-numberlists:" + shardedJedis.lrange("numberlists" ,
0, -1));

System. out.println("=============删=============" );

// 删除列表指定的值 ,第二个参数为删除的个数(有重复时),后add进去的值先被删,类似于出栈

System. out.println("成功删除指定元素个数-stringlists:" + shardedJedis.lrem("stringlists" ,
2, "vector" ));

System. out.println("删除指定元素之后-stringlists:" + shardedJedis.lrange("stringlists" ,
0, -1));

// 删除区间以外的数据

System. out.println("删除下标0-3区间之外的元素:" + shardedJedis.ltrim("stringlists" ,
0, 3));

System. out.println("删除指定区间之外元素后-stringlists:" + shardedJedis.lrange("stringlists" ,
0, -1));

// 列表元素出栈

System. out.println("出栈元素:" + shardedJedis .lpop("stringlists" ));

System. out.println("元素出栈后-stringlists:" + shardedJedis.lrange("stringlists" ,
0, -1));

System. out.println("=============改=============" );

// 修改列表中指定下标的值

shardedJedis.lset("stringlists" ,
0, "hello list!" );

System. out.println("下标为0的值修改后-stringlists:" + shardedJedis.lrange("stringlists" ,
0, -1));

System. out.println("=============查=============" );

// 数组长度

System. out.println("长度-stringlists:" + shardedJedis.llen("stringlists" ));

System. out.println("长度-numberlists:" + shardedJedis.llen("numberlists" ));

// 排序

/*

* list中存字符串时必须指定参数为alpha,如果不使用SortingParams,而是直接使用sort("list"), 会出现"ERR One or more scores can‘t be converted into double"

*/

SortingParams sortingParameters = new SortingParams();

sortingParameters.alpha();

sortingParameters.limit(0, 3);

System. out.println("返回排序后的结果-stringlists:" + shardedJedis.sort("stringlists" ,
sortingParameters));

System. out.println("返回排序后的结果-numberlists:" + shardedJedis.sort("numberlists" ));

// 子串: start为元素下标,end也为元素下标;-1代表倒数一个元素,-2代表倒数第二个元素

System. out.println("子串-第二个开始到结束:" + shardedJedis.lrange("stringlists" ,
1, -1));

// 获取列表指定下标的值

System. out.println("获取下标为2的元素:" + shardedJedis.lindex("stringlists" ,
2) + "\n" );

}

private void SetOperate()
{

System. out.println("======================set==========================" );

// 清空数据

System. out.println("清空库中所有数据:" + jedis .flushDB());

System. out.println("=============增=============" );

System. out.println("向sets集合中加入元素element001:" + jedis.sadd("sets" , "element001" ));

System. out.println("向sets集合中加入元素element002:" + jedis.sadd("sets" , "element002" ));

System. out.println("向sets集合中加入元素element003:" + jedis.sadd("sets" , "element003" ));

System. out.println("向sets集合中加入元素element004:" + jedis.sadd("sets" , "element004" ));

System. out.println("查看sets集合中的所有元素:" + jedis.smembers("sets" ));

System. out.println();

System. out.println("=============删=============" );

System. out.println("集合sets中删除元素element003:" + jedis.srem("sets" , "element003" ));

System. out.println("查看sets集合中的所有元素:" + jedis.smembers("sets" ));

/*

* System.out.println("sets集合中任意位置的元素出栈:"+jedis.spop("sets"));//注:出栈元素位置居然不定?--无实际意义 System.out.println("查看sets集合中的所有元素:"+jedis.smembers("sets"));

*/

System. out.println();

System. out.println("=============改=============" );

System. out.println();

System. out.println("=============查=============" );

System. out.println("判断element001是否在集合sets中:" + jedis.sismember("sets" , "element001" ));

System. out.println("循环查询获取sets中的每个元素:" );

Set<String> set = jedis.smembers( "sets");

Iterator<String> it = set.iterator();

while (it.hasNext())
{

Object obj = it.next();

System. out.println(obj);

}

System. out.println();

System. out.println("=============集合运算=============" );

System. out.println("sets1中添加元素element001:" + jedis.sadd("sets1" , "element001" ));

System. out.println("sets1中添加元素element002:" + jedis.sadd("sets1" , "element002" ));

System. out.println("sets1中添加元素element003:" + jedis.sadd("sets1" , "element003" ));

System. out.println("sets1中添加元素element002:" + jedis.sadd("sets2" , "element002" ));

System. out.println("sets1中添加元素element003:" + jedis.sadd("sets2" , "element003" ));

System. out.println("sets1中添加元素element004:" + jedis.sadd("sets2" , "element004" ));

System. out.println("查看sets1集合中的所有元素:" + jedis.smembers("sets1" ));

System. out.println("查看sets2集合中的所有元素:" + jedis.smembers("sets2" ));

System. out.println("sets1和sets2交集:" + jedis .sinter("sets1" , "sets2"));

System. out.println("sets1和sets2并集:" + jedis .sunion("sets1" , "sets2"));

System. out.println("sets1和sets2差集:" + jedis .sdiff("sets1" , "sets2"));//
差集:set1中有,set2中没有的元素

}

private void SortedSetOperate()
{

System. out.println("======================zset==========================" );

// 清空数据

System. out.println(jedis .flushDB());

System. out.println("=============增=============" );

System. out.println("zset中添加元素element001:" + shardedJedis.zadd("zset" ,
7.0, "element001" ));

System. out.println("zset中添加元素element002:" + shardedJedis.zadd("zset" ,
8.0, "element002" ));

System. out.println("zset中添加元素element003:" + shardedJedis.zadd("zset" ,
2.0, "element003" ));

System. out.println("zset中添加元素element004:" + shardedJedis.zadd("zset" ,
3.0, "element004" ));

System. out.println("zset集合中的所有元素:" + shardedJedis.zrange("zset" ,
0, -1));// 按照权重值排序

System. out.println();

System. out.println("=============删=============" );

System. out.println("zset中删除元素element002:" + shardedJedis.zrem("zset" , "element002" ));

System. out.println("zset集合中的所有元素:" + shardedJedis.zrange("zset" ,
0, -1));

System. out.println();

System. out.println("=============改=============" );

System. out.println();

System. out.println("=============查=============" );

System. out.println("统计zset集合中的元素中个数:" + shardedJedis.zcard("zset" ));

System. out.println("统计zset集合中权重某个范围内(1.0——5.0),元素的个数:" + shardedJedis .zcount("zset" ,
1.0, 5.0));

System. out.println("查看zset集合中element004的权重:" + shardedJedis.zscore("zset" , "element004" ));

System. out.println("查看下标1到2范围内的元素值:" + shardedJedis.zrange("zset" ,
1, 2));

}

private void HashOperate()
{

System. out.println("======================hash==========================" );

// 清空数据

System. out.println(jedis .flushDB());

System. out.println("=============增=============" );

System. out.println("hashs中添加key001和value001键值对:" + shardedJedis.hset("hashs" , "key001" , "value001" ));

System. out.println("hashs中添加key002和value002键值对:" + shardedJedis.hset("hashs" , "key002" , "value002" ));

System. out.println("hashs中添加key003和value003键值对:" + shardedJedis.hset("hashs" , "key003" , "value003" ));

System. out.println("新增key004和4的整型键值对:" + shardedJedis.hincrBy("hashs" , "key004" ,
4l));

System. out.println("hashs中的所有值:" + shardedJedis.hvals("hashs" ));

System. out.println();

System. out.println("=============删=============" );

System. out.println("hashs中删除key002键值对:" + shardedJedis.hdel("hashs" , "key002" ));

System. out.println("hashs中的所有值:" + shardedJedis.hvals("hashs" ));

System. out.println();

System. out.println("=============改=============" );

System. out.println("key004整型键值的值增加100:" + shardedJedis.hincrBy("hashs" , "key004" ,
100l));

System. out.println("hashs中的所有值:" + shardedJedis.hvals("hashs" ));

System. out.println();

System. out.println("=============查=============" );

System. out.println("判断key003是否存在:" + shardedJedis.hexists("hashs" , "key003" ));

System. out.println("获取key004对应的值:" + shardedJedis.hget("hashs" , "key004" ));

System. out.println("批量获取key001和key003对应的值:" + shardedJedis.hmget("hashs" , "key001" , "key003" ));

System. out.println("获取hashs中所有的key:" + shardedJedis.hkeys("hashs" ));

System. out.println("获取hashs中所有的value:" + shardedJedis.hvals("hashs" ));

System. out.println();

}

}

3)redis的server配置方案

172 redis 和 171 redis 做切片

170 redis 启动两个redis实例

./redis-server --port 6381 --slaveof 10.8.116.171 6379 &
./redis-server --port 6382 --slaveof 10.8.116.172 6379 &

4)遇到报错:

MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data
set are disabled. Please check Redis logs for details about the error.

redis-cli

shutdown nosave 或者shudown save 即可;然后重启即OK;

5)实际工作中需要考虑close的问题和线程安全的问题:具体使用和用法如下:

一:建一个单例的连接池:

package apptools.tdt.util;

import java.util.ArrayList;

import java.util.List;

import org.apache.commons.lang.StringUtils;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import redis.clients.jedis.JedisPoolConfig;

import redis.clients.jedis.JedisShardInfo;

import redis.clients.jedis.ShardedJedisPool;

import apptools.tdt.commons.log.EnviromentTool;

public class RedisShardedJedisPool
{

private static final Logger log =
LoggerFactory.getLogger(RedisShardedJedisPool. class);

private final static byte[] temp_lock = new byte[1];

private static RedisShardedJedisPool redisShardedJedisPool = null;

private static final String redis_key = "redis.servercache.ip";

private ShardedJedisPool shardedJedisPool ;//
切片连接池

private RedisShardedJedisPool()
{

initialShardedPool();

}

public ShardedJedisPool
getShardedJedisPool() {

return shardedJedisPool ;

}

public static RedisShardedJedisPool
getRedisShardedJedisPool() {

synchronized (temp_lock )
{

if (redisShardedJedisPool == null)
{

redisShardedJedisPool = new RedisShardedJedisPool();

}

return redisShardedJedisPool ;

}

}

/**

* 初始化切片池

*/

private void initialShardedPool()
{

// 池基本配置

JedisPoolConfig config = new JedisPoolConfig();

// config.setMaxActive(20);

config.setMaxIdle(10);

// config.setMaxWait(1000l);

config.setTestOnBorrow( false);

// slave链接

List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>();

String redisServer = EnviromentTool. getValue(redis_key);

if (StringUtils.isNotBlank(redisServer))
{

String rs[] = redisServer.split( ",");

for (int i
= 0; i < rs.length; i++) {

String server[] = rs[i].split( ":");

log.info("RedisServer
is :" + server[0] + ":" +
server[1]);

shards.add( new JedisShardInfo(server[0],
Integer.valueOf(server[1]), "master" +
i));

}

// shards.add(new
JedisShardInfo("10.8.116.171", 6379, "master2"));

else {

shards.add( new JedisShardInfo("10.2.10.27" ,
6379, "master" ));

}

// 构造池

shardedJedisPool = new ShardedJedisPool(config,
shards);

}

}

二:建一个shardedJedis 的client端

package apptools.tdt.util;

import java.text.MessageFormat;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import redis.clients.jedis.ShardedJedis;

public class RedisClient
{

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

public static final String chart_key = "chart_{1}" ;

public static final int two_hour =
60 * 60 * 2;

private final ShardedJedis shardedJedis; //
切片额客户端连接

public RedisClient()
{

shardedJedis =
RedisShardedJedisPool.getRedisShardedJedisPool().getShardedJedisPool().getResource();

}

public ShardedJedis
getShardedJedis() {

return shardedJedis ;

}

public void closeShardedJedis()
{

shardedJedis.close();

}

public static void main(String []
args) {

Object[] arguments = { new Long(1), "MyDisk" };

System. out.println("xxxx" +
MessageFormat.format(RedisClient.chart_key,
arguments));

RedisClient cli = new RedisClient();

// 判断key否存在

System. out.println("判断key999键是否存在:" +
cli.getShardedJedis().exists("key999" ));

System. out.println("新增key001,value001键值对:" +
cli.getShardedJedis().set("key001" , "value001" ));

System. out.println("判断key001是否存在:" +
cli.getShardedJedis().exists("key001" ));

// 输出系统中所有的key

System. out.println("新增key002,value002键值对:" +
cli.getShardedJedis().set("key002" , "value002" ));

System. out.println("新增key001,value001键值对:" +
cli.getShardedJedis().set("abc" , "value001" ));

cli.closeShardedJedis();

}

}

3:用到地方写法:

          try {

Object[] arguments = { new Long(1),
String.valueOf(id) };

String chart_key = MessageFormat.format(RedisClient.chart_key,
arguments);

RedisClient cli = new RedisClient();

String chartJsonString = "";

if (cli.getShardedJedis().exists(chart_key))
{

chartJsonString = cli.getShardedJedis().get(chart_key);

else {

chartJsonString = JSON.toJSONString(chartOperateService.getChartJSONByFilterId(id));

cli.getShardedJedis().setex(chart_key, RedisClient.two_hour ,
chartJsonString);

}

cli.closeShardedJedis();

System. out.println(chart_key
+ ":::" + chartJsonString);

return JSON.parseObject(chartJsonString,
HashMap. class);

catch (Exception
e) {

return chartOperateService .getChartJSONByFilterId (id);

}

时间: 2024-11-05 09:55:29

redis命令介绍(常见的操作命令)及其实例客户端的写法的相关文章

2016022604 - redis命令介绍

Redis keys命令用于在Redis的管理键. Redis keys命令使用语法如下所示: redis最新版本目前是3.0.7 redis 127.0.0.1:6379> COMMAND KEY_NAME 常见的命令方法,设置缓存,获取缓存,清除缓存 设置缓存成功,会提示OK:删除缓存成功会显示(integer)1,如果已经不存在或者删除失败,会显示(integer) 0

redis常用命令、常见错误、配置技巧等分享

转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/117.html?1455860236 1. redis查看当前所有的key 代码如下: KEYS * 2. 查看当前redis的配置信息? 代码如下: CONFIG GET * 3. MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk

Dockerfile命令介绍及实例

Dockerfile命令介绍及实例 当你在使用 Docker构建镜像的时候,每一个命令都会在前一个命令的基础上形成一个新层.这些基础镜像可以用于创建新的容器.本篇文章将手把手教您如何从基础镜像,一步一步,一层一层的从Dockerfile构建容器的过程. 基础镜像可以用于创建Docker容器.镜像可以非常基础,仅仅包含操作系统:也可以非常丰富,包含灵巧的应用栈,随时可 以发布.当你在使用 Docker构建镜像的时候,每一个命令都会在前一个命令的基础上形成一个新层.这些基础镜像可以用于创建新的容器.

redis学习(二) redis数据结构介绍以及常用命令

redis数据结构介绍 我们已经知道redis是一个基于key-value数据存储的数据结构数据库,这里的key指的是string类型,而对应的value则可以是多样的数据结构.其中包括下面五种类型: 1.string 字符串 string字符串类型是redis最基础的数据存储类型.string是最基础的一种数据类型,其可以拓展为某种特定类型,例如普通文本,json字符串,二进制数据等等.就本质上来说,接下来要介绍的hash,list,set等其内部最基础的组成单位依然是string,只不过re

Redis的使用模式之计数器模式实例

转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/123.html?1455853785 Redis 是目前 NoSQL 领域的当红炸子鸡,它象一把瑞士军刀,小巧.锋利.实用,特别适合解决一些使用传统关系数据库难以解决的问题.打算写一系列 Redis 使用模式的文章,深入总结介绍 Redis 常见的使用模式,以供大家参考. 常见汇总计数器? 汇总计数是系统常见功能,比如网站通常需要统计注册用户数,网站总浏览次数等等. 使用

redis实战笔记(3)-第3章 Redis命令

第3章 Redis命令 本章主要内容 字符串命令. 列表命令和集合命令 散列命令和有序集合命令 发布命令与订阅命令 其他命令 在每个不同的数据类型的章节里, 展示的都是该数据类型所独有的. 最具代表性的命令. 首先让我们来看看, 除了GET和SET之外, Redis的字符串还支持哪些命令. 3.1 字符串 在Redis里面, 字符串可以存储以下3种类型的值. 字节串( byte string) . 整数. 浮点数. 除了自 增操作和自 减操作之外, Redis还拥有对字节串的其中一部分内容进行读

Redis(Windows安装方法与Java调用实例 &amp; 配置文件参数说明 &amp; Java使用Redis所用Jar包 &amp; Redis与Memcached的区别)

Windows下Redis的安装使用 0.前言 因为是初次使用,所以是在windows下进行安装和使用,参考了几篇博客,下面整理一下 1.安装Redis 官方网站:http://redis.io/ 官方下载:http://redis.io/download 可以根据需要下载不同版本 windows版:https://github.com/MSOpenTech/redis github的资源可以ZIP直接下载的(这个是给不知道的同学友情提示下) 下载完成后 可以右键解压到 某个硬盘下 比如D:\R

redis学习(一) redis的介绍与安装

redis简单介绍 redis全称remote-dictionary-server 直译为远程字典服务器, 是一个高性能的key-value存储系统,也被称为数据结构服务器,因为其所存储的数据值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等常见的数据结构类型. 由于redis的数据操作是基于内存的,其可用性远远高于基于硬盘的传统数据库,因此被广泛的应用于高并发,海量数据读写的场景. linux下安装

redis cluster介绍

讲解分布式数据存储的核心算法,数据分布的算法 hash算法 -> 一致性hash算法(memcached) -> redis cluster,hash slot算法 一.概述 1.我们的memcache客户端(这里我看的spymemcache的源码),使用了一致性hash算法ketama进行数据存储节点的选择.与常规的hash算法思路不同,只是对我们要存储数据的key进行hash计算,分配到不同节点存储.一致性hash算法是对我们要存储数据的服务器进行hash计算,进而确认每个key的存储位置