文档章节

Redis之----Redis的数据类型和操作

笨小熊
 笨小熊
发布于 2016/05/16 18:19
字数 2532
阅读 17
收藏 0
点赞 2
评论 0

1.字符串(string)
  说明:redis字符串是字节序列,并且512兆为上限。

  a.设置

  (1).set:设置字符串,设置成功则返回“OK”;
      例如:set name "xjb" ;

  (2).setnx:如果key存在,则设置失败,返回0;key不存在,就会设置成功,返回1;
      例如:setnx name "xjb";

  (3).setex:设置key的对应的string值,并指定有效期.如果没有指定,则永久有效;
      例如:setex hairColor 10 "red";

  (4).setrange:将指定的字符串的子字符串从指定位置替换为被指定的字符串。如果被指定的字符串长度不够,则只替换被指定字符串的长度,剩余的长度还是继续拼接下去;
      例如:setrange email 6 "qq.com"

  (5).mset:一次设置多个key的值,成功返回“OK”表示所有的值都设置成功了;失败则返回0,表示所有的值都没有被设置;
      例如:mset key1 xjb1 key2 xjb2 key3 xjb3

  (6).msetnx:一次设置多个key的值,成功返回ok表示所有的值都设置了,失败返回0表示没有任何值被设置,但不会覆盖已经存在的key.
      例如:msetnx key1 xjb1 key2 xjb2 key3 xjb3 


  b.获取
  (1).get:获取设置了key的值,成功则返回设置了的值;失败则返回nil;
      例如:get name
  
  (2).getset:设置新值,并获取旧值;
      例如:getset name

  (3).getrange:获取指定key指定范围的子字符串;
      例如:getrange key2 0 5

  (4).mget批量获取;
      例如:mget key1 key2 key6 key7

  (5).incr:对指定的key自增1;
      例如:incr key6
  
  (6).incrby:对指定的key自增指定的值,如果key不存在,则设置key为0再自增。增量设置为正数则加,设置为负数则减;
      例如:incrby key2 7


  (7).decr:对指定的key自减1;

  
  (8).descby:对指定的key自增指定的值,如果key不存在,则设置key为0再自减。增量设置为正数则加,设置为负数则加;

 
  (9).append:给指定key的值追加被指定的字符串,并放回key的新值的长度(字符串拼接);
      例如:append key gmail.com  

  (10).strlen:返回指定key的值得长度;
      例如:strlen name;

  (11).expire:设置指定key的过期时间;
      例如:expire key 30;

 


2.哈希(hash)
  说明:redis的哈希是键值对的集合;redis的哈希是字符串字段和字符值之间的映射,他的添加和删除都是0和1(平均操作),被用来表示对象。

  a.设置
  (1).hset:设置一个哈希表,如果key不存在,则先创建;
      例如:hset user:001 name lijie
    
  (2).hsetnx:设置hash field为指定值,如果key存在,则返回0;如果key不存在,则先创建;
      例如:hsetnx myhash name lijie

  (3).hmset:批量设置多个值;
      例如:hmset user:001 username xjb pwd xjb desc xjb
           hmset user:002 username xjb2 pwd xjb2 desc xjb2
  
  (4).hincrby:获取指定key的值并自增指定的步长,然后返回增加后的值;
      例如:hincrby user:003 age 8
  
  (5).hexists:测试指定字段是否存在,存在则返回1,不存在就返回0;
      例如:hexists user:003 age

  (6).hdel:删除指定key的值,成功则返回1;失败返回0;
      例如:hdel user:003 xjb (没有hdel user:003的用法)

  b.获取:
  (1).hget:获取一个哈希表指定字段的值,如果成功,则返回对应值;如果失败,则返回nil;
      例如:hget user:001 name

  (2).hmget:批量获取指定key的值;
      例如:hmget user:001 name age

  (3).hlen:获取指定字段的数量;
      例如:hlen user:003  

  (4).hkeys:返回指定的字段名:
      例如:hkeys user:001

  (5).hvals:返回指定哈希表中的指定的值;
      例如:hvals user:001

  (6).hgetall:返回指定哈希表中所有的key和value:
      例如:hgetall user:001

 

3.链表(list):
说明:主要功能是push、pop、获取一个范围的所有值;redis的list类型是一个每个子元素都是string类型的双向链表;我们可以通过push、pop从链表的头部或者尾部添加删除元素,这样list既可以作为栈(先进后出:试管),又可以作为队列(先进先出:管道)。
   
  a.设置
  (1).lpush:向队列头部压入一个元素;
      例如:lpush list1 "hello"
 
  (2).lpushx:向队列头部压入一个元素,当且仅当队列存在;如果队列不存在,lpushx什么不做;
      例如:lpushx list1 "hello"

  (3).rpush;向队列尾部压如一个元素;
      例如:rpush list2 "word"

  (4).rpushx:向队列尾部部压入一个元素,当且仅当队列存在;如果队列不存在,lpushx什么不做;
      例如:lpushx list2 "hello"
  
  (5).linsert:在指定的前面或者后面压入一个元素,并返回列表中列表的个数;
      例如:linsert list3 before world wrong
           linsert list3 after  world test

  (6).lset:将列表中指定下标元素的元素替换掉;
      例如:lset list3 3 "test"

  (7).lrem:将列表中指定元素的n个指定的元素值,并返回删除的指定元素的个数;
      例如:lrem list3 2 "test" 

  (8).ltrim:保留指定范围的元素(删除其他元素);
      例如:ltrim list3 1 -1
      说明:后面的两个数是指定保留范围;

  (9).lpop:从链表的头部弹出(删除)元素,并返回弹出删除的元素;
      例如:lpop list3

  (10).lpop:从链表的尾部弹出(删除)元素,并返回弹出删除的元素;
      例如:rpop list3

  (11).rpoplpush:弹出第一个列表中的最后一个元素,添加到第二个列表中第一个元素;
      例如:rpoplpush list3 list4

  (12).linindex:返回指定链表中指定索引位置的元素;
      例如:linindex list3 3
 
  (13).llen:返回指定链表中元素的个数;
      例如:llen list3

  b.获取
  (1).lrange:获取指定范围的元素;
     例如:lpush list1 0 -1

 

4.无序集合(set)
  说明:它是string类型的无序集合,它的添加、删除和查找复杂度都是0和1,操作它可以去交集、并集、差集;这些操作可以实现sns中的好友推荐和blog中的tag功能。

   a.设置
   (1).sadd:向集合中添加一个或者多个元素,添加成功则返回1,失败则返回0;
       例如:sadd myset1 one two three
       说明:不可以重复添加同样的元素;

   (2).srem:删除集合中的一个元素,删除成功则返回1,失败则返回0;
       例如:srem myset2 one
  
   (3).spop:从集合中随机弹出(删除)一个元素;
       例如:spop myset2

   (4).sdiff:获取两个集合的差集;
       例如:sdiff myset1 myset2
       说明:以在前面的集合为标准。

   (5).sdiffstore:将两个集合的差集存贮到一个新的集合中;
       例如:sdiffstore myset3 myset1 myset2
       说明:将集合myset1和myset2的差集存储到myset3中


   (6).sinter:返回所有给定集合的交集;
       例如:sinter myset1 myset2
 
   (7).sinterstore:将两个集合的交集存贮到一个新的集合中;
       例如:sinterstore myset4 myset1 myset2
       说明:将集合myset1和myset2的差集存储到myset4中


   (8).sunion:返回所有给定集合的并集;
       例如:sunion myset1 myset2


   (9).sunionstore:将指定集合的并集存贮到新的集合中,并放回并集元素的个数;
       例如:sunion myset5 myset1 myset2

   
   (10).smove:将一个集合中指定元素移除到另一个指定集合中;
       例如:sunion myset1 myset6 three
       说明:将myset1的中的three元素移除,并添加到myset6中

   (11).scard:返回指定集合的元素的个数;
       例如:scard myset2
    
   (12).sismember:判断某个元素是否是指定集合的元素,是就返回1,否就返回0;
       例如:sismember myset1 three 

   (13).srandmember:随机返回指定集合的一个元素,但是不删除元素;
       例如:srandmember myset3


   b.获取
   (1).smumbers:获取某个集合中所有的元素;
       例如:smembers myset1 one

 

5.有序集合(zset)
  说明:它在无序集合的基础上增加了一个顺序属性,这个属性在添加修改元素的时候可以指定,每次制定后,zset会自动重新按新的值调准顺序;可以理解为有两列的mysql表,一列存value,一列存顺序。
 
  a.设置
  (1).zadd:向指定的集合中添加顺序和值;
     例如:zadd myzset1 1 one

  (2).zrem:删除指定集合中指定的元素
     例如:zrem myzset two

  (3).zincrdy:如果在名称为key的zset中已经存在元素member,则该元素的score(序列号)增加increment;否则向该集合中增加该元素,其score(序列号)的值为increment.最终都返回该指定元素的序列号。
     例如:zincrby myzset1 -2 one
     说明:将myzet中的one元素的序列号减少2;     

  (4).zrank:先把集合按score升序排序,并返回排序后指定集合中的元素的score(序列号)(执行完后排序不保留)
     例如:zrank myzset1 one(从0开始)

  (5).zrank:先把集合按score降序排序,并返回排序后指定集合中的元素的score(序列号)(执行完后排序不保留)
     例如:zrank myzset1 one(从0开始)
   

  b.获取
  (1).zrange:获取指集合的元素值(升序);
    例如:zrange myzset1 0 -1 withscores;//获取myzset1集合的所有元素,并显示集合
         zrange myzset1 0 -1;//获取myzset集合的所有元素,不显示集合

  (2).zrevrange:获取指集合的元素值(降序);
    例如:zrevrange myzset1 0 -1

  (3).zrangebyscore:获取指定score的值;
    例如:zrangebyscore myzset 2 3 withscore

  (4).zcount:获取指定区间元素的个数;
      例如:zcount myzsset 2 6 

  (5).zcard:返回集合中素有元素的个数;
      例如:zcard myzset

  (6).zremrangebyrank:删除集合指定范围的元素,并返回删除了元素的个数(按索引删除);
      例如:zremrangebyrank myzset1 2 4
      说明:将myzset按序列号按升序排序,然后删除索引在2-4之间的元素。

  (7).zremrangebyscore:删除集合指定范围的元素,并返回删除了元素的个数(按序列号删除)
      例如:zremrangebyscores myzset1 2 5
 

© 著作权归作者所有

共有 人打赏支持
笨小熊
粉丝 13
博文 150
码字总数 64409
作品 0
深圳
高级程序员
使用acl网络通信库的 redis c++ 模块开发 redis 应用

一、概述 (可以直接略过此段)redis 最近做为 nosql 数据服务应用越来越广泛,其相对于 memcached 的最大优点是提供了更加丰富的数据结构,所以应用场景就更为广泛。redis 的出现可谓是广大...

郑树新 ⋅ 2015/02/12 ⋅ 0

Redis spring 使用总结

1.1 Redis介绍 redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set –有序集合)和hash(哈希类型...

bill2candy ⋅ 2016/09/07 ⋅ 0

初识redis及实现session共享

1.Redis介绍及安装 Redis是当前比较热门的NOSQL系统之一, 它是一个key-value存储系统,和memcached类似,但在很大程度上补足了memcached的不足,它支持存储的value类型相对较多,包括String,Li...

陈小扁 ⋅ 2016/05/03 ⋅ 0

R语言与Redis的联合使用

分为4个章节。 Redis环境准备rredis函数库rredis基本使用操作rredis使用案例 每一章节,都会分为”文字说明部分”和”代码部分”,保持文字说明与代码的连贯性。 第一章 Redis环境准备 文字说...

openthings ⋅ 2015/07/02 ⋅ 0

Redis总结

一、基本概念 redis是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。 特点: Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。 ...

冰-冰 ⋅ 2016/08/30 ⋅ 0

Redis常用命令使用总结

redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类...

afreon ⋅ 2015/07/28 ⋅ 0

使用 Jedis 连接操作 Redis

Redis 简介 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。 Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久化,可以将内存中的数据保持在...

PengLei ⋅ 2017/10/15 ⋅ 0

基于C#的MongoDB数据库开发应用(4)--Redis的安装及使用

在前面介绍了三篇关于MongoDB数据库的开发使用文章,严格来讲这个不能归类于MongoDB数据库开发,不过Redis又有着和MongoDB数据库非常密切的关系,它们两者很接近,Redis主要是内存中的NoSQL...

walb呀 ⋅ 2017/12/04 ⋅ 0

什么是redis,他能做什么?

什么是redis,redis能做什么,redis的应用场景 1. 什么是Redis Redis是由意大利人Salvatore Sanfilippo(网名:antirez)开发的一款内存高速缓存数据库。Redis全称为:Remote Dictionary Ser...

Allen_Jol ⋅ 03/25 ⋅ 0

Java Spring 与 Redis 操作封装源码

Redis是一个开源,先进的key-value存储,并用于构建高性能,可扩展的Web应用程序的完美解决方案。 Redis从它的许多竞争继承来的三个主要特点: Redis数据库完全在内存中,使用磁盘仅用于持久...

afreon ⋅ 2015/10/14 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

zblog2.3版本的asp系统是否可以超越卢松松博客的流量[图]

最近访问zblog官网,发现zlbog-asp2.3版本已经进入测试阶段了,虽然正式版还没有发布,想必也不久了。那么作为aps纵横江湖十多年的今天,blog2.2版本应该已经成熟了,为什么还要发布这个2.3...

原创小博客 ⋅ 今天 ⋅ 0

聊聊spring cloud的HystrixCircuitBreakerConfiguration

序 本文主要研究一下spring cloud的HystrixCircuitBreakerConfiguration HystrixCircuitBreakerConfiguration spring-cloud-netflix-core-2.0.0.RELEASE-sources.jar!/org/springframework/......

go4it ⋅ 今天 ⋅ 0

二分查找

二分查找,也称折半查找、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于...

人觉非常君 ⋅ 今天 ⋅ 0

VS中使用X64汇编

需要注意的是,在X86项目中,可以使用__asm{}来嵌入汇编代码,但是在X64项目中,再也不能使用__asm{}来编写嵌入式汇编程序了,必须使用专门的.asm汇编文件来编写相应的汇编代码,然后在其它地...

simpower ⋅ 今天 ⋅ 0

ThreadPoolExecutor

ThreadPoolExecutor public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, ......

4rnold ⋅ 昨天 ⋅ 0

Java正无穷大、负无穷大以及NaN

问题来源:用Java代码写了一个计算公式,包含除法和对数和取反,在页面上出现了-infinity,不知道这是什么问题,网上找答案才明白意思是负的无穷大。 思考:为什么会出现这种情况呢?这是哪里...

young_chen ⋅ 昨天 ⋅ 0

前台对中文编码,后台解码

前台:encodeURI(sbzt) 后台:String param = URLDecoder.decode(sbzt,"UTF-8");

west_coast ⋅ 昨天 ⋅ 0

实验楼—MySQL基础课程-挑战3实验报告

按照文档要求创建数据库 sudo sercice mysql startwget http://labfile.oss.aliyuncs.com/courses/9/createdb2.sqlvim /home/shiyanlou/createdb2.sql#查看下数据库代码 代码创建了grade......

zhangjin7 ⋅ 昨天 ⋅ 0

一起读书《深入浅出nodejs》-node模块机制

node 模块机制 前言 说到node,就不免得提到JavaScript。JavaScript自诞生以来,经历了工具类库、组件库、前端框架、前端应用的变迁。通过无数开发人员的努力,JavaScript不断被类聚和抽象,...

小草先森 ⋅ 昨天 ⋅ 0

Java桌球小游戏

其实算不上一个游戏,就是两张图片,不停的重画,改变ball图片的位置。一个左右直线碰撞的,一个有角度碰撞的。 左右直线碰撞 package com.bjsxt.test;import javax.swing.*;import j...

森林之下 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部