zoukankan      html  css  js  c++  java
  • 【数据库】redis基本操作

        文档:Redis高级应用.note
        链接:http://note.youdao.com/noteshare?id=81f2ab61838b75ed5c938f74c22bff1d&sub=D225B90DF5CA4160939CBD2851687B4B

    一、redis和memcached相比,的独特之处

      1、redis可以持久化数据到硬盘,memcached只能做缓存。

        redis可以用来做存储(storge),也就是redis可以将数据持久化到硬盘。 而memccached是用来做缓存(cache) 这个特点主要因为其有”持久化”的功能.

      2、redis相比于memcached,其支持的数据类型更多。

        存储的数据有”结构”,对于memcached来说,存储的数据,只有1种类型--”字符串”, 而redis则可以存储字符串,链表,哈希结构,集合,有序集合

    二、redis的优点

      1、读写速度快. 数据存放在内存中,数据结构类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)

      2、支持丰富的数据类型,string,hash,list,set,sorted

      3、支持简单事务,watch

      4、丰富的特性:可以用于缓存,消息队列按key设置过期时间,到期后自动删除

      5、支持数据持久化(将内存数据持久化到磁盘),支持AOF和RDB两种持久化方式,从而进行数据恢复操作,可以有效地防止数据丢失

      6、支持主从(master-slave)复制来实现数据备份,主机会自动将数据同步到从机

    三、Redis目录下的重要文件的意义

      1、redis-benchmark 性能测试工具

      2、redis-check-aof 日志文件检测工(比如断电造成日志损坏,可以检测并修复)

      3、redis-check-dump 快照文件检测工具,效果类上

      4、redis-cli 客户端

      5、redis-server 服务端

      6、redis.windows.conf redis配置文件,在启动redis服务器的时候,必须要指定配置文件,那么相当于于一个配置文件就是一个redis数据库服务器。

      redis服务器启动命令:   

    1 redis-server redis.windows.conf

    四、redis基础命令

      1、keys * //返回键(key)

      2、keys list* //返回名以list开头的所有键(key)

      3、exists list1 //判断键名为list1的是否存在 存在返回1, 不存在返回0

      4、del list1 //删除一个键(名为list1)

      5、expire list1 10 //设置键名为list1的过期时间为10秒后

      6、ttl list1 //查看键名为list1的过期时间,若为-1表示已过期 或 永不过期

      7、move age 1 //将键名age的转移到1数据库中。

      8、select 1 //表示进入到1数据库中,默认在0数据库

      9、persist age //移除age的过期时间。

      10、flushdb:删除所有的数据 清除当前所在库的所有数据

      11、flushall 清空所有数据

    二、redis数据类型

      1、String字符串

        set——get

        mset——mget

        setnx——msetnx

        incr——decr

        incrby——decrby

        setrange——getrange   

        set方法:设置key对应的值为string类型的value,如果该key已经存在,则覆盖key对应的value值。所以在redis中key只能有一个。
    1 127.0.0.1:6379> set name lijie

        get:根据key获取value值

    1 127.0.0.1:6379> get name

        Setnx:设置一个不存的字符串,返回0 表示设置失败,已存在。返回1 表示设置新值成功,nx是not exist的意思。

    1 127.0.0.1:6379> setnx name zs
    2 (integer) 0
    3 127.0.0.1:6379> setnx age 20
    4 (integer) 1  
       setex:设置字符串,同时设置有效期。ex---expire(有效期)
    1 127.0.0.1:6379> setex color 10 red
    2 OK
    3 立即查询
    4 127.0.0.1:6379> get color"red"
    5 10秒后查询
    6 127.0.0.1:6379> get color
    7 (nil)
        Setrange:替换字符串——要替换什么, 从哪里开始(0), 替换成什么
    1 127.0.0.1:6379> set email jalja@sina.com
    2 OK
    3 127.0.0.1:6379> get email
    4 "jalja@sina.com"
    5 127.0.0.1:6379> setrange email 6 163.com
    6 (integer) 14
    7 127.0.0.1:6379> get email
    8 "jalja@163.comm"
        Mset:一次设置多个key-value,返回OK表示全部设置成功,返回0表示全部失败。如果存在则替换。m--multi
    1 127.0.0.1:6379> mset name1 zs name2 ls
    2 OK
    3 127.0.0.1:6379> get name1
    4 "zs"
    5 127.0.0.1:6379> get name2
    6 "ls"
        msetnx:一次设置多个不存在的key-value,返回1表示全部设置成功,返回0表示全部失败。
    1 127.0.0.1:6379> msetnx name3 kk name4 mm name2 LL
    2 (integer) 0
    3 127.0.0.1:6379> get name3
    4 (nil)
    5 127.0.0.1:6379> get name4
    6 (nil)
        getset:获取原值,并设置新值
    1 127.0.0.1:6379> getset name4 UU
    2 (nil)
    3 127.0.0.1:6379> get name4
    4 "UU"
    5 127.0.0.1:6379> getset name4 RR
    6 "UU"
        getrange:获取key对应value的子字符串
    1 127.0.0.1:6379> get email
    2 "jalja@163.comm"
    3 127.0.0.1:6379> getrange email 0 4
    4 "jalja"
        mget:一次获取多个key对应的value值,不存在返回nil
    1 127.0.0.1:6379> mget name1 name2 name3 name4 name5
    2 1) "zs"
    3 2) "ls"
    4 3) (nil)
    5 4) "RR"
    6 5) (nil)
        incr:对key对应的value做加1操作,并返回新值
    1 127.0.0.1:6379> get age
    2 "20"
    3 127.0.0.1:6379> incr age
    4 (integer) 21
        incrby:与incr类似,加指定值,key不存在的时候会设置key,并认为该key原来的value=0
    1 127.0.0.1:6379> get age
    2 "21"
    3 127.0.0.1:6379> incrby age 9
    4 (integer) 30
    5 127.0.0.1:6379> incrby age -5
    6 (integer) 25
    7 127.0.0.1:6379> incrby height 10
    8 (integer) 10
        decr:对key对应的value做减1操作
    1 127.0.0.1:6379> get height
    2 "10"
    3 127.0.0.1:6379> decr height
    4 (integer) 9
    5 127.0.0.1:6379> decr height
    6 (integer) 8
        decrby:对key对应的value减去指定的值
    1 127.0.0.1:6379> get height
    2 "8"
    3 127.0.0.1:6379> decrby height 3
    4 (integer) 5
    5 127.0.0.1:6379> decrby height -3
    6 (integer) 8
        append:对key对应的vlaue字符串追加,返回新字符串的长度
    1 127.0.0.1:6379> get name1
    2 "zs"
    3 127.0.0.1:6379> append name1 ML
    4 (integer) 4
    5 127.0.0.1:6379> get name1
    6 "zsML"
        strlen:获取key对应value的长度
    1 127.0.0.1:6379> get name1
    2 "zsML"
    3 127.0.0.1:6379> strlen name1
    4 (integer) 4

      2、Hash类型

        Redis hash 是一个string类型的filed和value的映射表、它的添加、删除操作都是O(1)(平均操作)。Hash特别适合存储对象。相较于对象的每个字段存成单个string类型。将一个对象存储在hash类型中会占用更少的内存,并且可以更方便存取整个对象。

        hset:设置hash filed 为指定值,如果key不存在,则先创建。key存在则替换

    1 127.0.0.1:6379> hset user:001 name zs
    2 (integer) 1
    3 127.0.0.1:6379> hget user:001 name
    4 "zs"
    5 #设置一个user:001 的用户的name为zs(可以将user:001看做一个表)

        hget:获取指定field字段的值

    1 127.0.0.1:6379> hget user:001 name
    2 (nil)

        hsetnx:设置hash filed 为指定值,如果key不存在,则先创建。如果存在则返回0表示设置失败

    1 127.0.0.1:6379> hsetnx user:001 name ML
    2 (integer) 0
    3 127.0.0.1:6379> hsetnx user:001 age 1
    4 (integer) 1

        hmset:同时设置hash的多个file

    1 127.0.0.1:6379> hmset user:002 name MM age 20
    2 OK
    3 127.0.0.1:6379> hget user:002 name
    4 "MM"
    5 127.0.0.1:6379> hget user:002 age
    6 "20"

        hmget:获取全部指定的hash filed,必须指定获取的key的名称

    1 127.0.0.1:6379> hmget user:002 name age
    2 1) "MM"
    3 2) "20"

        hincrby:对hash filed加上指定的值

    1 127.0.0.1:6379> hget user:002 age
    2 "20"
    3 127.0.0.1:6379> hincrby user:002 age 5
    4 (integer) 25
    5 127.0.0.1:6379> hincrby user:002 age -5
    6 (integer) 20

        hexists:测试指定的filed是否存在,返回1表示存在,返回0表示不存在

    1 127.0.0.1:6379> hexists user:002 name
    2 (integer) 1
    3 127.0.0.1:6379> hexists user:002 age
    4 (integer) 1
    5 127.0.0.1:6379> hexists user:002 height
    6 (integer) 0

        hlen:返回指定hash的field的数量

    1 127.0.0.1:6379> hlen user:002
    2 (integer) 2

        hdel 删除指定hash 的filed字段,返回1表示删除成功0:表示删除失败

    1 127.0.0.1:6379> hget  user:002 age
    2 "20"
    3 127.0.0.1:6379> hdel user:002 age
    4 (integer) 1
    5 127.0.0.1:6379> hdel user:002 age
    6 (integer) 0
    7 127.0.0.1:6379> hget user:002 age
    8 (nil)

        hkeys:返回hash 的所有filed

    1 127.0.0.1:6379> hkeys user:001
    2 1) "name"
    3 2) "age"
    4 127.0.0.1:6379> hkeys user:002
    5 1) "name"

        hvals:返回hash的所有value

    1 127.0.0.1:6379> hvals user:001
    2 1) "zs"
    3 2) "1"
    4 127.0.0.1:6379> hvals user:002
    5 1) "MM"

      3、List类型

        List是一个链表结构,主要功能是push、pop,获取一个范围的所有值等等,操作中key理解为链表的名字。Redis的list类型其实就是一个每个子元素都是string类型的双向链表。我们可以通过push、pop操作链表的头部或者链表尾部添加元素,这样list既可以作为栈,又可以作为队列。

        lpush:在key对应list的头部添加字符串元素,返回list中元素的个数

    1 127.0.0.1:6379> lpush list1 "hello"
    2 (integer) 1
    3 127.0.0.1:6379> lpush list1 "word"
    4 (integer) 2

        lrange:获取list中的元素

    1 127.0.0.1:6379> lrange list1 0 -1(0:第一个,-1:最后一个)
    2 1) "word"
    3 2) "hello"

        rpush:在key对应的list尾部添加元素

    1 127.0.0.1:6379> rpush list2 10
    2 (integer) 1
    3 127.0.0.1:6379> rpush list2 11
    4 (integer) 2
    5 127.0.0.1:6379> lrange list2 0 -1
    6 1) "10"
    7 2) "11"

        linsert:在key对应list的特定位置前或后添加字符串

     1 127.0.0.1:6379> lrange list2 0 -1
     2 1) "10"
     3 2) "11"
     4 127.0.0.1:6379> linsert list2 before 11 10.5
     5 (integer) 3
     6 127.0.0.1:6379> linsert list2 after 11 11.5
     7 127.0.0.1:6379> lrange list2 0 -1
     8 1) "10"
     9 2) "10.5"
    10 3) "11"
    11 4)"11.5"

        lset:更改list中指定下标的元素,返回ok表示设置成功

     1 127.0.0.1:6379> lrange list2 0 -1
     2 1) "10"
     3 2) "10.5"
     4 3) "11"
     5 127.0.0.1:6379> lset list2 1 10.00
     6 OK
     7 127.0.0.1:6379> lrange list2 0 -1
     8 1) "10"
     9 2) "10.00"
    10 3) "11"

        lrem:从key对应list中删除n个和value相同的元素(n<0 从尾部删除,n=0 全部删除,n>0从头部删除。

    1 127.0.0.1:6379> lrange list 0 -1
    2 1) "two"
    3 2) "one"
    4 3) "one"
    5 127.0.0.1:6379> lrem list 1 one
    6 (integer) 1
    7 127.0.0.1:6379> lrange list 0 -1
    8 1) "two"
    9 2) "one"

        ltrim:保留list中指定范围的数据,其他的都不要了

     1 127.0.0.1:6379> lrange list2 0 -1
     2 1) "10"
     3 2) "10.00"
     4 3) "11"
     5 4) "12"
     6 127.0.0.1:6379> ltrim list2 1 2
     7 OK
     8 127.0.0.1:6379> lrange list2 0 -1
     9 1) "10.00"
    10 2) "11"

        lpop:从list的头部删除元素,并返回该元素

    1 127.0.0.1:6379> lrange list 0 -1
    2 1) "two"
    3 2) "one"
    4 127.0.0.1:6379> lpop list
    5 "two"
    6 127.0.0.1:6379> lrange list 0 -1
    7 1) "one"

        rpop:从list尾部删除元素,并返回该元素

        rpoplpush:从第一个list的尾部删除元素,并添加到第二个list的头部 

     1 127.0.0.1:6379> lrange list 0 -1
     2 1) "one"
     3 127.0.0.1:6379> lrange list1 0 -1
     4 1) "word"
     5 2) "hello"
     6 127.0.0.1:6379> rpoplpush list1 list
     7 "hello"
     8 127.0.0.1:6379> lrange list 0 -1
     9 1) "hello"
    10 2) "one"
    11 127.0.0.1:6379> lrange list1 0 -1
    12 1) "word"   
        lindex 返回名称为key的list中index位置的元素<===>list[index]
    1 127.0.0.1:6379> lrange list 0 -1
    2 1) "hello"
    3 2) "one"
    4 127.0.0.1:6379> lindex list 1
    5 "one"
        llen:返回指定key对应list的长度<====> len(list)
    1 127.0.0.1:6379> lrange list 0 -1
    2 1) "hello"
    3 2) "one"
    4 127.0.0.1:6379> llen list
    5 (integer) 2

      4、Sets类型

        Set是一个string类型的无序集合,不允许重复。Set是通过hash table实现的。添加、删除、查找的复杂度都是0(1)。对集合我们可以取并集、交集、差集。

        sadd:向key对应的set集合中添加元素,返回1表示添加成功,返回0 表示失败
    1 127.0.0.1:6379> sadd myset1 one
    2 (integer) 1
    3 127.0.0.1:6379> sadd myset1 two
    4 (integer) 1
        Smembers:查看set集合中的元素  
    1 127.0.0.1:6379> smembers myset1
    2 1) "two"
    3 2) "one"
        srem:删除key对应set集合中的元素,返回1表示删除成功 0表示失败
    1 127.0.0.1:6379> srem myset1 two
    2 (integer) 1
        spop:随机删除set中的一个元素并返回该元素
    1 127.0.0.1:6379> smembers myset1
    2 1) "three"
    3 2) "one"
    4 3) "four"
    5 127.0.0.1:6379> spop myset1
    6 "four"
    7 127.0.0.1:6379> smembers myset1
    8 1) "three"
    9 2) "one"
        sdiff:返回给定set集合的差集 (以在前的set集合为标准)
     1 127.0.0.1:6379> smembers myset1
     2 1) "three"
     3 2) "one"
     4 127.0.0.1:6379> smembers myset2
     5 1) "two"
     6 2) "one"
     7 127.0.0.1:6379> sdiff myset1 myset2
     8 1) "three"
     9 127.0.0.1:6379> sdiff myset2 myset1
    10 1) "two"
        sdiffstore:返回所有给定set集合的差集,并将差集添加到另外一个集合中
     1 127.0.0.1:6379> smembers myset1
     2 1) "three"
     3 2) "one"
     4 127.0.0.1:6379> smembers myset2
     5 1) "two"
     6 2) "one"
     7 127.0.0.1:6379> sdiffstore myset3 =myset1 -myset2
     8 (integer) 1
     9 127.0.0.1:6379> smembers myset3
    10 1) "three"
        sinter:返回所有给定集合的交集
    1 127.0.0.1:6379> smembers myset1
    2 1) "three"
    3 2) "one"
    4 127.0.0.1:6379> smembers myset2
    5 1) "two"
    6 2) "one"
    7 127.0.0.1:6379> sinter myset1 myset2
    8 1) "one"
        sinterstore:返回所有给定集合key的交集,并将结果存为另一个key
    1 127.0.0.1:6379> smembers myset1
    2 1) "three"
    3 2) "one"
    4 127.0.0.1:6379> smembers myset2
    5 1) "two"
    6 2) "one"
    7 127.0.0.1:6379> sinterstore myset4 =myset1  myset2
    8 (integer) 1 
        sunion 返回所有给定集合的并集
     1 127.0.0.1:6379> smembers myset1
     2 1) "three"
     3 2) "one"
     4 127.0.0.1:6379> smembers myset2
     5 1) "two"
     6 2) "one"
     7 127.0.0.1:6379> sunion myset1 myset2
     8 1) "three"
     9 2) "two"
    10 3) "one"
        sunionstore 返回所有给定集合的并集,并将结果存入另一个集合
    1 127.0.0.1:6379> smembers myset1
    2 1) "three"
    3 2) "one"
    4 127.0.0.1:6379> smembers myset2
    5 1) "two"
    6 2) "one"
    7 127.0.0.1:6379> sunionstore myset5  myset1 myset2
    8 (integer) 3
        smove:从第一个集合中移除元素并将该元素添加到另一个集合中。
     1 127.0.0.1:6379> smembers myset1
     2 1) "three"
     3 2) "one"
     4 127.0.0.1:6379> smembers myset5
     5 1) "three"
     6 2) "two"
     7 3) "one"
     8 127.0.0.1:6379> smove myset5 myset1 two
     9 (integer) 1
    10 127.0.0.1:6379> smembers myset5
    11 1) "three"
    12 2) "one"
    13 127.0.0.1:6379> smembers myset1
    14 1) "three"
    15 2) "two"
    16 3) "one"
        Scard:返回set集合中元素的个数 llen(list) strlen (str) hlen(hash)
    1 127.0.0.1:6379> smembers myset1
    2 1) "three"
    3 2) "two"
    4 3) "one"
    5 127.0.0.1:6379> scard myset1
    6 (integer) 3
        sismember:测试member元素是否是名称为key的set集合 返回1:表示是 0:不是
    1 127.0.0.1:6379> smembers myset1
    2 1) "three"
    3 2) "two"
    4 3) "one"
    5 127.0.0.1:6379> sismember myset1 tree
    6 (integer) 0
    7 127.0.0.1:6379> sismember myset1 three
    8 (integer) 1
        srandmember:随机返回set集合中的一个元素,但不删除该元素
    1 127.0.0.1:6379> smembers myset1
    2 1) "three"
    3 2) "two"
    4 3) "one"
    5 127.0.0.1:6379>  srandmember myset1
    6 "one" 

      5、Sorted set (zset)类型

        Sorted set是set的一个升级版,他在set的基础上增加了一个顺序属性,这一属性在添加元素的时候可以指定,每次指定后,zset会自动重新按新的值挑战顺序。可以理解为有两列的mysql表,一列存value,一列存顺序。操作key理解为zset的名字。

        zadd:向有序集合zset中添加元素并指定顺序,如果该元素已存在就更新元素顺序。
    1 127.0.0.1:6379> zadd myzset1 1 one
    2 (integer) 1
    3 127.0.0.1:6379> zadd myzset1 2 two
    4 (integer) 1
        zrange:从zset集合中取元素 [withscores] 输出元素顺序号
    1 127.0.0.1:6379> zadd myzset1 1 one
    2 (integer) 1
    3 127.0.0.1:6379> zadd myzset1 2 two
    4 (integer) 1
    5 127.0.0.1:6379> zrange myzset1 0 -1 withscores
    6 1) "one"
    7 2) "1"
    8 3) "two"
    9 4) "2"
        zrem:删除zset集合中指定的元素
     1 127.0.0.1:6379> zrange myzset1 0 -1 withscores
     2 1) "one"
     3 2) "1"
     4 3) "two"
     5 4) "2"
     6 127.0.0.1:6379> zrem myzset1 two
     7 (integer) 1
     8 127.0.0.1:6379> zrange myzset1 0 -1 withscores
     9 1) "one"
    10 2) "1"
        zincrby:若zset中已经存在元素member、则该元素的score增加incrment否则向该集合中添加该元素,其score的值为increment
    1 127.0.0.1:6379> zrange myzset1 0 -1 withscores
    2 1) "one"
    3 2) "1"
    4 127.0.0.1:6379> zincrby myzset1 2 one
    5 "3"
    6 127.0.0.1:6379> zrange myzset1 0 -1 withscores
    7 1) "one"
    8 2) "3"
        zrank:正序方式,获取指定元素的索引下标
    1 127.0.0.1:6379> zrange myzset1 0 -1 withscores
    2 1) "one"
    3 2) "3"
    4 3) "four"
    5 4) "4"
    6 5) "five"
    7 6) "5"
    8 127.0.0.1:6379> zrank myzset1 four
    9 (integer) 1
        zrevrank:逆序的方式获取指定元素的索引下标,rev--reverse
     1 127.0.0.1:6379> zrange myzset1 0 -1 withscores
     2 1) "one"
     3 2) "3"
     4 3) "four"
     5 4) "4"
     6 5) "five"
     7 6) "5"
     8 127.0.0.1:6379> zrevrank myzset1 four
     9 (integer) 1
    10 127.0.0.1:6379> zrevrank myzset1 five
    11 (integer) 0
        zrevrange:从zset集合中倒叙(score倒叙)获取元素
     1 127.0.0.1:6379> zrange myzset1 0 -1 withscores
     2 1) "one"
     3 2) "3"
     4 3) "four"
     5 4) "4"
     6 5) "five"
     7 6) "5"
     8 127.0.0.1:6379> zrevrange myzset1 0 -1 withscores
     9 1) "five"
    10 2) "5"
    11 3) "four"
    12 4) "4"
    13 5) "one"
    14 6) "3"
        zrangebyscore:从zset集合中根据score顺序获取元素
     1 127.0.0.1:6379> zrange myzset1 0 -1 withscores
     2 1) "one"
     3 2) "3"
     4 3) "four"
     5 4) "4"
     6 5) "five"
     7 6) "5"
     8 127.0.0.1:6379> zrangebyscore  myzset1 4 5 withscores
     9 1) "four"
    10 2) "4"
    11 3) "five"
    12 4) "5"
        zcount:返回集合中score在给定区间的数量
    1 127.0.0.1:6379> zrange myzset1 0 -1 withscores
    2 1) "one"
    3 2) "3"
    4 3) "four"
    5 4) "4"
    6 5) "five"
    7 6) "5"
    8 127.0.0.1:6379> zcount myzset1 3 4
    9 (integer) 2
        zcard:返回zset集合中所有元素个数
    1 127.0.0.1:6379> zrange myzset1 0 -1 withscores
    2 1) "one"
    3 2) "3"
    4 3) "four"
    5 4) "4"
    6 5) "five"
    7 6) "5"
    8 127.0.0.1:6379> zcard myzset1
    9 (integer) 3
        zremrangebyrank:删除集合中排名(下标)在给定区间的元素
     1 127.0.0.1:6379> zrange myzset1 0 -1 withscores
     2 1) "one"
     3 2) "3"
     4 3) "four"
     5 4) "4"
     6 5) "five"
     7 6) "5"
     8 127.0.0.1:6379> zremrangebyrank myzset1 1 2
     9 (integer) 2
    10 127.0.0.1:6379> zrange myzset1 0 -1 withscores
    11 1) "one"
    12 2) "3"
        zremrangebyscore::删除集合中顺序(score值)在给定区间的元素
      
     1 127.0.0.1:6379> zrange myzset1 0 -1 withscores
     2 1) "one"
     3 2) "3"
     4 3) "four"
     5 4) "4"
     6 5) "five"
     7 6) "5"
     8 127.0.0.1:6379> zremrangebyscore myzset1 3 4
     9 (integer) 2
    10 127.0.0.1:6379> zrange myzset1 0 -1 withscores
    11 1) "five"
    12 2) "5"
  • 相关阅读:
    delphi与JAVA的webservice架构
    process执行DOS命令
    DELPHI+JAVA 之间使用WebService
    一步一步用delphi实现webservice
    集合接口
    再次郑重声明
    京东的crm做的不错,赞一个
    vs 2010 ClickOnce 发布设置界面,系统必选包中缺少 fx2.0 的解决方法
    使用vs2010生成clickonce安装引导程序的方法
    用 Axialis IconWorkshop 将ico图标转换成gif图标
  • 原文地址:https://www.cnblogs.com/Tree0108/p/12104770.html
Copyright © 2011-2022 走看看