Redis(REmote DIctionary Server) 是一个遵守BSD协议、支持网络、可基于内存亦可持久化的日志型key-value存储系统。

KEY

  常用指令:

指令
注释
备注
exits key 
检测指定 key 是否存在
 1 : 存在,0 : 不存在
del key1 key2......keyN 
删除给定 key
返回删除 key 的数目,0 表示给定 key 都不存在
type key 
返回给定 key 值的类型
none : key 不在         string   : 字符类型
list       : 链表类型      set       : 无序集合类型
keys pattern 
返回匹配指定模式的所有 key
 
randomkey 
随机返回一个 key
如果当前数据库是空的,返回空串
rename oldkey newkey 
重命名一个 key
如果 newkey 已存在,将会被覆盖newkey的值.
expire key seconds
设置key 的过期时间,单位是秒。
返回 1 : 成功,0 :key 不存在
ttl key 
返回key的剩余过期秒数
-1 : key未设置过期时间, -2:key不存在
persist key
清除key的过期时间
1 : 成功  0:key不存在或者没有设置过期时间

VALUE

  Redis 提供五种数据类型:String,Hash,List,Set 及 ZSet。

  • String

     String 是最基本的类型,而且 String 类型是二进制安全的,意思是 Redis 的 String 可以 包含任何数据。

    常用指令:

指令
注释
例子
set key value
存数据
set username 'winn'
get key  
取数据
get username
mset key1 value1... keyn valuen 
一次存多个键值对
mset uname 'winn' pwd '123'
mget key1 ... keyn
一次取多个值
mget uname pwd

    Java使用:

@Test
public void testString() {
   Jedis jedis = new Jedis("localhost");
    jedis.set("name","winn");
    System.out.println(jedis.get("name"));
    //拼接
    jedis.append("name", " is my lover");
    System.out.println(jedis.get("name"));
    jedis.del("name");
    System.out.println(jedis.get("name"));
    //设置多个键值对
    jedis.mset("name","winn","age","27","qq","174754613");
    //进行加1操作
    jedis.incr("age");
    System.out.println(jedis.get("name") + "-" + jedis.get("age") + "-" + jedis.get("qq"));//执行结果:winn-28-174754613
}
  • Hash

    Hash 是一个 String 类型的 field 和 value 的映射表,最大可以包含(2^32 -1)个键值对。增删操作的时间复杂度为 O(1)。

              Hash 特别适合用于存储对象,将一个对象存储在 Hash 类型中会占用更少的内存,并且可以更方便的存取整个对象。【省内存的原因是新建一个 Hash 对象时开始是用 zipmap(又称为 smallhash)来存储的。这个 zipmap 其实并不是hash table,但是 zipmap 相比正常的 hash 实现,可以节省不少 hash 本身需要的一些元数据存储开销。尽管 zipmap 的添加、删除、查找都是 O(n),但是由于一般对象的 field 数量都不太多,所以使用 zipmap的添加删除平均还是 O(1)。如果 field 或者 value的大小超出一定限制(在配置文件中指定)后,redis会在内部自动将zipmap替换成正常的hash实现.
#配置字段最多  个
hash-max-zipmap-entries #配置 value 最大为 字节
hash-max-zipmap-value

    常用指令:

指令
注释
例子
hmset key field1 value1 ... fieldn valuen
存数据
hmset user name 'winn' sex 'man'
hget key
取数据
hget user name
hgetall key
获取对象
 
HKEYS key
夺取对象中的所有filed
 
HVALS key
夺取对象中的所有value
 
 @Test
public void testHash(){
     Jedis jedis = new Jedis("localhost");
Map<String, String> map = new HashMap<>();
map.put("name", "xinxin");
map.put("age", "22");
map.put("qq", "123456"); jedis.hmset("user",map); List<String> rsmap = jedis.hmget("user", "name", "age", "qq");
System.out.println(rsmap); //删除map中的某个键值
jedis.hdel("user","age");
System.out.println(jedis.hmget("user", "age")); //null //hlen 返回key中的field-value个数
System.out.println(jedis.hlen("user")); //2
//exists 判断key是否存在
System.out.println(jedis.exists("user"));//true
//hkeys 返回所有的field
System.out.println(jedis.hkeys("user"));//[name, qq]
//hvals 返回所有的value
System.out.println(jedis.hvals("user"));//[xinxin, 123456] Iterator<String> iter=jedis.hkeys("user").iterator();
while (iter.hasNext()){
String key = iter.next();
System.out.println(key+":"+jedis.hmget("user",key));
}
}
  • List(双向链表类型)

     List 是一个链表结构,可以理解为一个每个子元素都是 String 类型的双向链表。主要功能是 push、pop、获取一个范围内的所有值等。

    常用指令:

指令
注释
例子
lpush listName value
将value存入list的表头
lpush listData demo
rpush listName value
将value存入list的表尾
rpush listData demo
lrange listName startIndex endIndex
返回下标在[startIndex, endIndex]中的值
lrange listData 0 10

    Java使用:

@Test
public void testList(){
    Jedis jedis = new Jedis("localhost");
    if(jedis.keys("*") != null){
        jedis.flushDB();
    }
    //rpush : 在表尾添加数据
    jedis.rpush("db","This","is","redis");
    jedis.rpush("db","demo");
    //lpush : 在表头添加数据
    jedis.lpush("db","Begin : ");
    //lrange : 获取链表中的值 、 llen : 获取链表长度
    System.out.println(jedis.lrange("db", 0, jedis.llen("db")));
    //-1表示最后一个元素
    System.out.println(jedis.lrange("db", 0, -1));
    //排序 : 排序默认以数字作为对象,值被解释为双精度浮点数,然后进行比较。
    //System.out.println(jedis.sort("db"));
}
  • Set
     Set 是无序集合,且不允许重复的成员。最大可以包含(2^32 -1)个元素。增删查操作的时间复杂度为 O(1)。
               Set 的是通过 hashtable 实现的, hashtable 会随着添加或者删除自动的调整大小。 需要注意的是调整 hashtable 大小时候需要同步(获取写锁),会阻塞其他读写操作。
               关于 Set 集合类型 除了基本的添加删除操作,还包含集合的取并集(union),交集(intersection), 差集(difference)。
    常用指令:
指令
注释
例子
sadd key member
将value存入set
sadd setData set demo
smembers key
返回key中的数据
sembers setData
sismbers key
 判断key是否存在  sismembers setData
SDIFF key1 [key2]
返回给定所有集合的差集
 
SINTER key1 [key2]
返回给定所有集合的交集
 
SUNION key1 [key2]
返回所有给定集合的并集
 

    Java使用:

@Test
public void testSet(){
   Jedis jedis = new Jedis("localhost");
//添加
jedis.sadd("user","liuling");
jedis.sadd("user","xinxin");
jedis.sadd("user","ling");
jedis.sadd("user","zhangxinxin");
jedis.sadd("user","who");
//srem : 移除value
jedis.srem("user","who");
System.out.println(jedis.smembers("user"));//获取所有加入的value
System.out.println(jedis.sismember("user", "who"));//判断 who 是否是user集合的元素
System.out.println(jedis.srandmember("user"));//随机返回一个value
System.out.println(jedis.scard("user"));//返回集合的元素个数   jedis.sadd("customer","ling");
  jedis.sadd("customer","xinxin");
  jedis.sadd("customer","winn");
  jedis.sadd("customer","nicole");
  jedis.sadd("customer","sam");
  //并集
  System.out.println(jedis.sunion("user","customer"));
  //差集 : 返回user中customer不包含的value
  System.out.println(jedis.sdiff("user","customer"));
  //交集
  System.out.println(jedis.sinter("user","customer"));
}
  • ZSet(有序集合类型Sorted Set)

    Sorted Set 是有序集合,且不允许重复的成员。它在 Set 的基础上增加了一个顺序属性(score),这一属性在添加修改元素的时候可以指定,每次指定后,会自动重新按新的值调整顺序。

    常用指令:

指令
注释
例子
zadd key score member
存数据
zset zsetData 0 demo
zrange key startScore endScore  [WITHSCORES]
取score在[startScore, endScore]之间的数据
zrange zsetData 0  10

     Java使用:

@Test
public void testZSet(){
   Jedis jedis = new Jedis("localhost");
    jedis.zadd("user",1,"winn");
    jedis.zadd("user",2,"sam");
    jedis.zadd("user",5,"nicole");
    jedis.zadd("user",4,"roy");
    Set<String> user = jedis.zrange("user", 0, -1);
    System.out.println(user);
}

补充

  • 系统常用指令
指令
注释
备注
keys name
获取指定key
keys * 获取所有key
flushdb
清除当前数据库的所有数据
 
flushall
清除所有数据库的所有数据
 
besize
返回数据库中key的数量
 
config set field value 设置系统参数 config set maxmemory 100mb
config get field 查看系统参数 config get maxmemory
 
  • Java使用Redis事务
/**
* 使用事务
* Redis事务可以理解为一个打包的批量执行脚本,中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做。
*
*/
@Test
public void testTrans() {
//开启事务
Transaction tx = jedis.multi();
for (int i = 0; i < 1000; i++) {
tx.set("t" + i, "t" + i);
}
//执行事务
tx.exec();
System.out.println(jedis.get("t100"));
}

Redis之数据类型及命令的更多相关文章

  1. Redis系列(二):Redis的数据类型及命令操作

    原文链接(转载请注明出处):Redis系列(二):Redis的数据类型及命令操作 Redis 中常用命令 Redis 官方的文档是英文版的,当然网上也有大量的中文翻译版,例如:Redis 命令参考.这 ...

  2. Redis常用数据类型及命令

    Redis数据类型 Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合). 注意: 命令的关键词,如set ...

  3. redis基本数据类型及命令

    一.key相关命令 redis本质上是key-value数据库.所以key操作适用于redis的任何数据类型缓存. 1.exists key判断是否存在key,存在返回1,不存在返回0 2.del k ...

  4. Redis五大数据类型常用命令脑图

  5. redis常用数据类型与命令

    注意:LPUSH 和LPOP按照栈进行操作,RPUSH和RPOP按照队列进行操作 zremrangebyscore key score开始  score结束//根据score删除 zremrangeb ...

  6. Redis的数据类型及其常用命令

    快速入门Redis 首先安装redis: windows下安装redis Linux下安装redis 1. 什么是redis Redis属于nosql(非关系型数据库) 关系型数据库是基于关系表的数据 ...

  7. 【数据库】Redis(2)--Redis的常用数据类型及命令

    1.Redis主要数据类型分类 Redis中存储数据常用的数据类型主要有五种:String.List.Set.Sorted Set.Hash,这五种数据结构在Redis中存储数据的命令掌握对于我们后期 ...

  8. 大数据学习day31------spark11-------1. Redis的安装和启动,2 redis客户端 3.Redis的数据类型 4. kafka(安装和常用命令)5.kafka java客户端

    1. Redis Redis是目前一个非常优秀的key-value存储系统(内存的NoSQL数据库).和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list ...

  9. 解析Redis操作五大数据类型常用命令

    摘要:分享经常用到一些命令和使用场景总结,以及对Redis中五大数据类型如何使用cmd命令行的形式进行操作的方法. 本文分享自华为云社区<Redis操作五大数据类型常用命令解析>,作者:灰 ...

随机推荐

  1. Kafka源码分析及图解原理之Producer端

    一.前言 任何消息队列都是万变不离其宗都是3部分,消息生产者(Producer).消息消费者(Consumer)和服务载体(在Kafka中用Broker指代).那么本篇主要讲解Producer端,会有 ...

  2. 相同类中方法间调用时日志Aop失效处理

    本篇分享的内容是在相同类中方法间调用时Aop失效处理方案,该问题我看有很多文章描述了,不过大多是从事务角度分享的,本篇打算从日志aop方面分享(当然都是aop,失效和处理方案都是一样),以下都是基于s ...

  3. 使用eclipse Debug时总是被URLClassLoader这个类拦截,不能进入到要调试的类里面去

    打开Debug,如图去掉前面的两个对号,重新debug即可:

  4. windows 服务 安装、卸载

    1.新建项目 选中windows服务 2.添加安装程序 3.修改安装代码 ServiceProcessInstaller processInstall; ServiceInstaller servic ...

  5. MySQL什么时候适合建索引,什么时候不适合建索引

    1.什么事索引(本质:数据结构) 索引是帮助MySQL高效获取数据的数据结构. 2.优势: 1.提高数据检索的效率,降低数据库IO成本 2.通过索引对数据进行排序,降低数据排序的成本,降低了CPU的消 ...

  6. IntelliJ IDEA远程连接tomcat,实现单步调试

    web项目部署到tomcat上之后,有时需要打断点单步调试,如果用的是Intellij idea,可以通过如下方法实现: 开启debug端口,启动tomcat 以tomcat7.0.75为例,打开bi ...

  7. Charles 修改请求/compose和Compose New

    本文参考:撰写工具/compose和Compose New 撰写工具/compose和Compose New compose 是在原有的请求基础上,修改: 可以写各种状态: – URL: – Meth ...

  8. 49 (OC)* layoutSubviews和drawRect调用

    layoutSubviews:  简单的说就是你如果想调用此方法.不要直接调用,需要调用setNeedsLayout方法来刷新布局! drawRect:刷新布局 一:layoutSubviews在以下 ...

  9. [C++] 重载运算符与类型转换(2)——函数调用运算符和类型转换运算符

    1.这两个应该是C++中比较高级的用法了. 一.函数调用运算符   1.重载函数调用运算符(),必须是成员函数,一个类可以定义多个不同版本的调用运算符,相互之间应该在参数数量或者类型上有所区别.   ...

  10. 欢迎加入强哥的 Android 开发交流群

    最近建了一个 Android 开发交流群,但不限于交流移动端.前端和后端等相关技术. 本群的宗旨:让所有学习的群友都有进步的机会. 1. 经验交流 在我们学习时遇到困境,或者开发过程中遇到难题,都可以 ...