Redis相关命令及Jedis的demo(转)

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: org.springframework.data.redis.core.RedisTemplate在List操作时的一个注意事项:BoundListOperations boundListOperations = redisTemplate.boundListOps("key");org.springframework.data.redis.core.BoundListOperations中range api使用的是lrange命令,因此要使用lpush存放最新的元素,lpush存放老的数据。

org.springframework.data.redis.core.RedisTemplate在List操作时的一个注意事项:
BoundListOperations boundListOperations = redisTemplate.boundListOps("key");

org.springframework.data.redis.core.BoundListOperations中
range api使用的是lrange命令,因此要使用lpush存放最新的元素,lpush存放老的数据。
截取API trim使用的ltrim命令,默认从左边截取。

LTRIM key start stop

Trim an existing list so that it will contain only the specified range of elements specified. Both start and stop are zero-based indexes, where 0 is the first element of the list (the head), 1 the next element and so on.

For example: LTRIM foobar 0 2 will modify the list stored at foobar so that only the first three elements of the list will remain.

start and end can also be negative numbers indicating offsets from the end of the list, where -1 is the last element of the list, -2 the penultimate element and so on.

Out of range indexes will not produce an error: if start is larger than the end of the list, or start > end, the result will be an empty list (which causes key to be removed).
If end is larger than the end of the list(will do nothing), Redis will treat it like the last element of the list.

A common use of LTRIM is together with LPUSH / RPUSH. For example:

LPUSH mylist someelement
LTRIM mylist 0 99

This pair of commands will push a new element on the list, while making sure that the list will not grow larger than 100 elements. This is very useful when using Redis to store logs for example. It is important to note that when used in this way LTRIM is an O(1) operation because in the average case just one element is removed from the tail of the list.



连接操作相关的命令

  • quit:关闭连接(connection)
  • auth:简单密码认证

持久化

  • save:将数据同步保存到磁盘
  • bgsave:将数据异步保存到磁盘
  • lastsave:返回上次成功将数据保存到磁盘的Unix时戳
  • shundown:将数据同步保存到磁盘,然后关闭服务

远程服务控制

  • info:提供服务器的信息和统计
  • monitor:实时转储收到的请求
  • slaveof:改变复制策略设置
  • config:在运行时配置Redis服务器

对value操作的命令

  • exists(key):确认一个key是否存在
  • del(key):删除一个key
  • type(key):返回值的类型
  • keys(pattern):返回满足给定pattern的所有key
  • randomkey:随机返回key空间的一个
  • keyrename(oldname, 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的value
  • setnx(key, value):添加string,名称为key,值为value
  • setex(key, time, value):向库中添加string,设定过期时间time
  • mset(key N, value N):批量设置多个string的值
  • msetnx(key N, value N):如果所有名称为key i的string都不存在
  • 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之间的元素
  • ltrim(key, start, end):截取名称为key的list
  • lindex(key, index):返回名称为key的list中index位置的元素
  • lset(key, index, value):给名称为key的list中index位置的元素赋值
  • lrem(key, count, value):删除count个key的list中值为value的元素
  • lpop(key):返回并删除名称为key的list中的首元素
  • rpop(key):返回并删除名称为key的list中的尾元素
  • blpop(key1, key2,… key N, timeout):lpop命令的block版本。
  • 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) :移到集合元素
  • scard(key) :返回名称为key的set的基数
  • sismember(key, member) :member是否是名称为key的set的元素
  • sinter(key1, key2,…key N) :求交集
  • sinterstore(dstkey, (keys)) :求交集并将交集保存到dstkey的集合
  • sunion(key1, (keys)) :求并集
  • sunionstore(dstkey, (keys)) :求并集并将并集保存到dstkey的集合
  • sdiff(key1, (keys)) :求差集
  • sdiffstore(dstkey, (keys)) :求差集并将差集保存到dstkey的集合
  • smembers(key) :返回名称为key的set的所有元素
  • srandmember(key) :随机返回名称为key的set的一个元素

对Hash操作的命令

  • hset(key, field, value):向名称为key的hash中添加元素field
  • hget(key, field):返回名称为key的hash中field对应的value
  • hmget(key, (fields)):返回名称为key的hash中field i对应的value
  • hmset(key, (fields)):向名称为key的hash中添加元素field
  • 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

http://www.cnblogs.com/liuling/p/2014-4-19-03.html

使用Java操作Redis需要jedis-2.1.0.jar,下载地址:http://files.cnblogs.com/liuling/jedis-2.1.0.jar.zip

如果需要使用Redis连接池的话,还需commons-pool-1.5.4.jar,下载地址:http://files.cnblogs.com/liuling/commons-pool-1.5.4.jar.zip

复制代码
  1 package com.test;
  2 
  3 import java.util.HashMap;  4 import java.util.Iterator;  5 import java.util.List;  6 import java.util.Map;  7  8 import org.junit.Before;  9 import org.junit.Test;  10  11 import redis.clients.jedis.Jedis;  12  13 public class TestRedis {  14 private Jedis jedis;  15  16  @Before  17 public void setup() {  18 //连接redis服务器,192.168.0.100:6379  19 jedis = new Jedis("192.168.0.100", 6379);  20 //权限认证  21 jedis.auth("admin");  22  }  23  24 /**  25  * redis存储字符串  26 */  27  @Test  28 public void testString() {  29 //-----添加数据----------  30 jedis.set("name","xinxin");//向key-->name中放入了value-->xinxin  31 System.out.println(jedis.get("name"));//执行结果:xinxin  32  33 jedis.append("name", " is my lover"); //拼接  34 System.out.println(jedis.get("name"));  35  36 jedis.del("name"); //删除某个键  37 System.out.println(jedis.get("name"));  38 //设置多个键值对  39 jedis.mset("name","liuling","age","23","qq","476777XXX");  40 jedis.incr("age"); //进行加1操作  41 System.out.println(jedis.get("name") + "-" + jedis.get("age") + "-" + jedis.get("qq"));  42  43  }  44  45 /**  46  * redis操作Map  47 */  48  @Test  49 public void testMap() {  50 //-----添加数据----------  51 Map<String, String> map = new HashMap<String, String>();  52 map.put("name", "xinxin");  53 map.put("age", "22");  54 map.put("qq", "123456");  55 jedis.hmset("user",map);  56 //取出user中的name,执行结果:[minxr]-->注意结果是一个泛型的List  57 //第一个参数是存入redis中map对象的key,后面跟的是放入map中的对象的key,后面的key可以跟多个,是可变参数  58 List<String> rsmap = jedis.hmget("user", "name", "age", "qq");  59  System.out.println(rsmap);  60  61 //删除map中的某个键值  62 jedis.hdel("user","age");  63 System.out.println(jedis.hmget("user", "age")); //因为删除了,所以返回的是null  64 System.out.println(jedis.hlen("user")); //返回key为user的键中存放的值的个数2  65 System.out.println(jedis.exists("user"));//是否存在key为user的记录 返回true  66 System.out.println(jedis.hkeys("user"));//返回map对象中的所有key  67 System.out.println(jedis.hvals("user"));//返回map对象中的所有value  68  69 Iterator<String> iter=jedis.hkeys("user").iterator();  70 while (iter.hasNext()){  71 String key = iter.next();  72 System.out.println(key+":"+jedis.hmget("user",key));  73  }  74  }  75  76 /**  77  * jedis操作List  78 */  79  @Test  80 public void testList(){  81 //开始前,先移除所有的内容  82 jedis.del("java framework");  83 System.out.println(jedis.lrange("java framework",0,-1));  84 //先向key java framework中存放三条数据  85 jedis.lpush("java framework","spring");  86 jedis.lpush("java framework","struts");  87 jedis.lpush("java framework","hibernate");  88 //再取出所有数据jedis.lrange是按范围取出,  89 // 第一个是key,第二个是起始位置,第三个是结束位置,jedis.llen获取长度 -1表示取得所有  90 System.out.println(jedis.lrange("java framework",0,-1));  91  92 jedis.del("java framework");  93 jedis.rpush("java framework","spring");  94 jedis.rpush("java framework","struts");  95 jedis.rpush("java framework","hibernate");  96 System.out.println(jedis.lrange("java framework",0,-1));  97  }  98  99 /** 100  * jedis操作Set 101 */ 102  @Test 103 public void testSet(){ 104 //添加 105 jedis.sadd("user","liuling"); 106 jedis.sadd("user","xinxin"); 107 jedis.sadd("user","ling"); 108 jedis.sadd("user","zhangxinxin"); 109 jedis.sadd("user","who"); 110 //移除noname 111 jedis.srem("user","who"); 112 System.out.println(jedis.smembers("user"));//获取所有加入的value 113 System.out.println(jedis.sismember("user", "who"));//判断 who 是否是user集合的元素 114 System.out.println(jedis.srandmember("user")); 115 System.out.println(jedis.scard("user"));//返回集合的元素个数 116  } 117 118  @Test 119 public void test() throws InterruptedException { 120 //jedis 排序 121 //注意,此处的rpush和lpush是List的操作。是一个双向链表(但从表现来看的) 122 jedis.del("a");//先清除数据,再加入数据进行测试 123 jedis.rpush("a", "1"); 124 jedis.lpush("a","6"); 125 jedis.lpush("a","3"); 126 jedis.lpush("a","9"); 127 System.out.println(jedis.lrange("a",0,-1));// [9, 3, 6, 1] 128 System.out.println(jedis.sort("a")); //[1, 3, 6, 9] //输入排序后结果 129 System.out.println(jedis.lrange("a",0,-1)); 130  } 131 132  @Test 133 public void testRedisPool() { 134 RedisUtil.getJedis().set("newname", "中文测试"); 135 System.out.println(RedisUtil.getJedis().get("newname")); 136  } 137 }
复制代码

 

Redis连接池:

复制代码
 1 package com.test;
 2 
 3 import redis.clients.jedis.Jedis;  4 import redis.clients.jedis.JedisPool;  5 import redis.clients.jedis.JedisPoolConfig;  6  7 public final class RedisUtil {  8  9 //Redis服务器IP 10 private static String ADDR = "192.168.0.100"; 11 12 //Redis的端口号 13 private static int PORT = 6379; 14 15 //访问密码 16 private static String AUTH = "admin"; 17 18 //可用连接实例的最大数目,默认值为8; 19 //如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。 20 private static int MAX_ACTIVE = 1024; 21 22 //控制一个pool最多有多少个状态为idle(空闲的)的jedis实例,默认值也是8。 23 private static int MAX_IDLE = 200; 24 25 //等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException; 26 private static int MAX_WAIT = 10000; 27 28 private static int TIMEOUT = 10000; 29 30 //在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的; 31 private static boolean TEST_ON_BORROW = true; 32 33 private static JedisPool jedisPool = null; 34 35 /** 36  * 初始化Redis连接池 37 */ 38 static { 39 try { 40 JedisPoolConfig config = new JedisPoolConfig(); 41  config.setMaxActive(MAX_ACTIVE); 42  config.setMaxIdle(MAX_IDLE); 43  config.setMaxWait(MAX_WAIT); 44  config.setTestOnBorrow(TEST_ON_BORROW); 45 jedisPool = new JedisPool(config, ADDR, PORT, TIMEOUT, AUTH); 46 } catch (Exception e) { 47  e.printStackTrace(); 48  } 49  } 50 51 /** 52  * 获取Jedis实例 53  * @return 54 */ 55 public synchronized static Jedis getJedis() { 56 try { 57 if (jedisPool != null) { 58 Jedis resource = jedisPool.getResource(); 59 return resource; 60 } else { 61 return null; 62  } 63 } catch (Exception e) { 64  e.printStackTrace(); 65 return null; 66  } 67  } 68 69 /** 70  * 释放jedis资源 71  * @param jedis 72 */ 73 public static void returnResource(final Jedis jedis) { 74 if (jedis != null) { 75  jedisPool.returnResource(jedis); 76  } 77  } 78 }

http://www.cnblogs.com/liuling/p/2014-4-19-04.html

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
27天前
|
NoSQL Java Redis
redis的基本命令,并用netty操作redis(不使用springboot或者spring框架)就单纯的用netty搞。
这篇文章介绍了Redis的基本命令,并展示了如何使用Netty框架直接与Redis服务器进行通信,包括设置Netty客户端、编写处理程序以及初始化Channel的完整示例代码。
34 1
redis的基本命令,并用netty操作redis(不使用springboot或者spring框架)就单纯的用netty搞。
|
21天前
|
缓存 NoSQL 测试技术
Redis如何解决频繁的命令往返造成的性能瓶颈!
Redis如何解决频繁的命令往返造成的性能瓶颈!
|
26天前
|
缓存 NoSQL Redis
Redis命令:列表模糊删除详解
Redis命令:列表模糊删除详解
23 3
|
28天前
|
NoSQL 关系型数据库 MySQL
Redis 事务特性、原理、具体命令操作全方位诠释 —— 零基础可学习
本文全面阐述了Redis事务的特性、原理、具体命令操作,指出Redis事务具有原子性但不保证一致性、持久性和隔离性,并解释了Redis事务的适用场景和WATCH命令的乐观锁机制。
143 0
Redis 事务特性、原理、具体命令操作全方位诠释 —— 零基础可学习
|
12天前
|
NoSQL Redis 数据安全/隐私保护
Redis 命令
10月更文挑战第15天
20 0
|
2月前
|
NoSQL 网络协议 Java
[Redis] 渐进式遍历+使用jedis操作Redis+使用Spring操作Redis
[Redis] 渐进式遍历+使用jedis操作Redis+使用Spring操作Redis
36 7
|
2月前
|
NoSQL Java 网络安全
[Redis] 渐进式遍历+使用jedis操作Redis+使用Spring操作Redis
[Redis] 渐进式遍历+使用jedis操作Redis+使用Spring操作Redis
|
2月前
|
JSON NoSQL Java
redis的java客户端的使用(Jedis、SpringDataRedis、SpringBoot整合redis、redisTemplate序列化及stringRedisTemplate序列化)
这篇文章介绍了在Java中使用Redis客户端的几种方法,包括Jedis、SpringDataRedis和SpringBoot整合Redis的操作。文章详细解释了Jedis的基本使用步骤,Jedis连接池的创建和使用,以及在SpringBoot项目中如何配置和使用RedisTemplate和StringRedisTemplate。此外,还探讨了RedisTemplate序列化的两种实践方案,包括默认的JDK序列化和自定义的JSON序列化,以及StringRedisTemplate的使用,它要求键和值都必须是String类型。
redis的java客户端的使用(Jedis、SpringDataRedis、SpringBoot整合redis、redisTemplate序列化及stringRedisTemplate序列化)
|
2月前
|
监控 NoSQL Redis
redis-server --service-install redis.windows.conf --loglevel verbose 命令的作用是什么?
redis-server --service-install redis.windows.conf --loglevel verbose 命令的作用是什么?
63 3
|
2月前
|
存储 缓存 NoSQL
Redis 过期删除策略与内存淘汰策略的区别及常用命令解析
Redis 过期删除策略与内存淘汰策略的区别及常用命令解析
59 0