您的位置:首页 > 数据库 > Redis

Redis数据库

2020-04-04 18:24 1211 查看

一、Redis基础知识

redis的客户端和服务端命令:

redis-server :服务器命令
启动一个redis的命令是:redis-server redis.windows.conf
redis-cli:客户端命令
启动一个客户端的redis命令:redis-cli  -p 6379

一个redis.windows.conf配置就是一个redis服务器。需要启动多个服务器时,只需要修改一下这个配置文件redis.windows.conf的名称,更改端口号,再用redis-server就可以启动。

要求:启动一个端口号在6380上的redis服务器。

1.创建配置文件如下:

2、在配置文件中,该端口号

3、用如下命令启动

4、验证:

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

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

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

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

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

2、redis的优点

  1. 读写速度快. 数据存放在内存中,数据结构类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)
  2. 支持丰富的数据类型,string,hash,list,set,sorted。
  3. 支持简单事务,watch
  4. 丰富的特性:可以用于缓存,消息队列,按key设置过期时间,到期后自动删除
  5. 支持数据持久化(将内存数据持久化到磁盘),支持AOF和RDB两种持久化方式,从而进行数据恢复操作,可以有效地防止数据丢失
  6. 支持主从(master-slave)复制来实现数据备份,主机会自动将数据同步到从机

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

  • redis-benchmark 性能测试工具
  • redis-check-aof 日志文件检测工(比如断电造成日志损坏,可以检测并修复)
  • redis-check-dump 快照文件检测工具,效果类上
  • redis-cli 客户端
  • redis-server 服务端
  • redis.windows.conf redis配置文件,在启动redis服务器的时候,必须要指定配置文件,那么相当于于一个配置文件就是一个redis数据库服务器。

redis服务器启动命令:

redis-server redis.windows.conf

3、redis基础命令:

  • keys * //返回键(key)
  • keys list* //返回名以list开头的所有键(key)
  • exists list1 //判断键名为list1的是否存在 存在返回1, 不存在返回0
  • del list1 //删除一个键(名为list1)
  • expire list1 10 //设置键名为list1的过期时间为10秒后 通过这种有效期可以做到自动删除,其实有效期到了,也不是立马删除的,删除的时机是有配置文件决定的。
  • ttl list1 //查看键名为list1的过期时间,若为-1表示已过期 或 永不过期
  • move age 1 //将键名age的转移到1数据库中。
  • select 1 //表示进入到1数据库中,默认在0数据库
  • persist age //移除age的过期时间。
  • flushdb:删除所有的数据 清除当前所在库的所有数据
  • flushall 清空所有数据
  • 二、redis数据类型

    (一)String字符串

    set

    get

    mset

    mget

    setnx

    msetnx

    incr

    decr

    incrby

    decrby

    setrange

    getrange

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

    127.0.0.1:6379> set name lijie

     

     

     get:根据key获取value值

    127.0.0.1:6379> get name

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

    127.0.0.1:6379> setnx name zs
    (integer) 0
    127.0.0.1:6379> setnx age 20
    (integer) 1

     setex:设置字符串,同时设置有效期。ex---expire(有效期)

    [code]127.0.0.1:6379> setex color 10 red
    OK
    立即查询
    127.0.0.1:6379> get color"red"
    10秒后查询
    127.0.0.1:6379> get color
    (nil)

    Setrange:替换字符串

    setrange 替换什么 从哪里开始(0) 替换成什么
    [code]127.0.0.1:6379> set email jalja@sina.com
    OK
    127.0.0.1:6379> get email
    "jalja@sina.com"
    127.0.0.1:6379> setrange email 6 163.com(integer) 14
    127.0.0.1:6379> get email
    "jalja@163.comm"

     Mset:一次设置多个key-value,返回OK表示全部设置成功,返回0表示全部失败。如果存在则替换。m--multi

    [code]127.0.0.1:6379> mset name1 zs name2 ls
    OK127.0.0.1:6379> get name1
    "zs"127.0.0.1:6379> get name2
    "ls"

     msetnx:一次设置多个不存在的key-value,返回1表示全部设置成功,返回0表示全部失败

    [code]127.0.0.1:6379> msetnx name3 kk name4 mm name2 LL(integer) 0127.0.0.1:6379> get name3
    (nil)127.0.0.1:6379> get name4
    (nil)

     getset:获取原值,并设置新值

    [code]127.0.0.1:6379> getset name4 UU
    (nil)127.0.0.1:6379> get name4
    "UU"
    127.0.0.1:6379> getset name4 RR
    "UU"

     getrange:获取key对应value的子字符串

    [code]127.0.0.1:6379> get email
    "jalja@163.comm"
    127.0.0.1:6379> getrange email 0 4
    "jalja"

     mget:一次获取多个key对应的value值,不存在返回nil

    [code]127.0.0.1:6379> mget name1 name2 name3 name4 name5
    1) "zs"
    2) "ls"
    3) (nil)
    4) "RR"
    5) (nil)

     incr:对key对应的value做加1操作,并返回新值

    [code]127.0.0.1:6379> get age
    "20"
    127.0.0.1:6379> incr age
    (integer) 21

     incrby:与incr类似,加指定值,key不存在的时候会设置key,并认为该key原来的value=0

    [code]127.0.0.1:6379> get age
    "21"
    127.0.0.1:6379> incrby age 9
    (integer) 30
    127.0.0.1:6379> incrby age -5
    (integer) 25
    127.0.0.1:6379> incrby height 10(integer) 10

     decr:对key对应的value做减1操作

    [code]127.0.0.1:6379> get height
    "10"
    127.0.0.1:6379> decr height
    (integer) 9
    127.0.0.1:6379> decr height
    (integer) 8

     decrby:对key对应的value减去指定的值

    [code]127.0.0.1:6379> get height
    "8"
    127.0.0.1:6379> decrby height 3
    (integer) 5
    127.0.0.1:6379> decrby height -3
    (integer) 8

     append:对key对应的vlaue字符串追加,返回新字符串的长度

    [code]127.0.0.1:6379> get name1
    "zs"
    127.0.0.1:6379> append name1 ML
    (integer) 4127.0.0.1:6379> get name1
    "zsML"

     strlen:获取key对应value的长度

    [code]127.0.0.1:6379> get name1
    "zsML"
    127.0.0.1:6379> strlen name1
    (integer) 4

     

    (二)Hash类型

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

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

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

     2.hget:获取指定field字段的值

    [code]127.0.0.1:6379> hget user:001 name
    (nil)

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

    [code]127.0.0.1:6379> hsetnx user:001 name ML(integer) 0
    127.0.0.1:6379> hsetnx user:001 age 1(integer) 1

     hmset:同时设置hash的多个file

    [code]127.0.0.1:6379> hmset user:002 name MM age 20
    OK
    127.0.0.1:6379> hget user:002 name
    "MM"
    127.0.0.1:6379> hget user:002 age
    "20"

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

    [code]127.0.0.1:6379> hmget user:002 name age
    1) "MM"
    2) "20"

     5、hincrby:对hash filed加上指定的值

    [code]127.0.0.1:6379> hget user:002 age
    "20"
    127.0.0.1:6379> hincrby user:002 age 5
    (integer) 25
    127.0.0.1:6379> hincrby user:002 age -5
    (integer) 20

     

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

    [code]127.0.0.1:6379> hexists user:002 name(integer) 1
    127.0.0.1:6379> hexists user:002 age(integer) 1
    127.0.0.1:6379> hexists user:002 height(integer) 0

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

    [code]127.0.0.1:6379> hlen user:002
    (integer) 2

     

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

    [code]127.0.0.1:6379> hget  user:002 age
    "20"
    127.0.0.1:6379> hdel user:002 age(integer) 1
    127.0.0.1:6379> hdel user:002 age(integer) 0
    127.0.0.1:6379> hget user:002 age
    (nil)

     

    9、hkeys:返回hash 的所有filed

    [code]127.0.0.1:6379> hkeys user:001
    1) "name"
    2) "age"
    127.0.0.1:6379> hkeys user:002
    1) "name"

     10、hvals:返回hash的所有value

    [code]127.0.0.1:6379> hvals user:001
    1) "zs"
    2) "1"
    127.0.0.1:6379> hvals user:002
    1) "MM"

     

    三)List类型

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

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

     

    [code]127.0.0.1:6379> lpush list1 "hello"(integer) 1
    127.0.0.1:6379> lpush list1 "word"
    (integer) 2

    2、lrange:获取list中的元素,

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

     

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

    [code]127.0.0.1:6379> rpush list2 10(integer) 1
    127.0.0.1:6379> rpush list2 11
    (integer) 2
    127.0.0.1:6379> lrange list2 0 -1
    1) "10"
    2) "11"
    

     

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

    [code]127.0.0.1:6379> lrange list2 0 -1
    1) "10"
    2) "11"
    127.0.0.1:6379> linsert list2 before 11 10.5
    (integer) 3
    127.0.0.1:6379> linsert list2 after 11 11.5
    127.0.0.1:6379> lrange list2 0 -1
    1) "10"
    2) "10.5"
    3) "11"
    4)"11.5"

     

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

    [code]127.0.0.1:6379> lrange list2 0 -1
    1) "10"
    2) "10.5"
    3) "11"
    127.0.0.1:6379> lset list2 1 10.00
    OK
    127.0.0.1:6379> lrange list2 0 -1
    1) "10"
    2) "10.00"
    3) "11"

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

    [code]127.0.0.1:6379> lrange list 0 -1
    1) "two"
    2) "one"
    3) "one"
    127.0.0.1:6379> lrem list 1 one(integer) 1
    127.0.0.1:6379> lrange list 0 -1
    1) "two"
    2) "one"

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

    [code]127.0.0.1:6379> lrange list2 0 -1
    1) "10"
    2) "10.00"
    3) "11"
    4) "12"
    127.0.0.1:6379> ltrim list2 1 2
    OK
    127.0.0.1:6379> lrange list2 0 -1
    1) "10.00"
    2) "11"

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

    [code]127.0.0.1:6379> lrange list 0 -1
    1) "two"
    2) "one"
    127.0.0.1:6379> lpop list
    "two"
    127.0.0.1:6379> lrange list 0 -1
    1) "one"

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

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

    [code]127.0.0.1:6379> lrange list 0 -1
    1) "one"
    127.0.0.1:6379> lrange list1 0 -1
    1) "word"
    2) "hello"
    127.0.0.1:6379> rpoplpush list1 list
    "hello"
    127.0.0.1:6379> lrange list 0 -1
    1) "hello"
    2) "one"
    127.0.0.1:6379> lrange list1 0 -1
    1) "word"

     

    11、lindex 返回名称为key的list中index位置的元素<===>list[index]

     

    [code]127.0.0.1:6379> lrange list 0 -1
    1) "hello"
    2) "one"
    127.0.0.1:6379> lindex list 1
    "one"

    12、llen:返回指定key对应list的长度<====> len(list)

    [code]127.0.0.1:6379> lrange list 0 -1
    1) "hello"
    2) "one"
    127.0.0.1:6379> llen list
    (integer) 2

    (三)Sets类型

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

    1、 sadd:向key对应的set集合中添加元素,返回1表示添加成功,返回0 表示失败

    [code]127.0.0.1:6379> sadd myset1 one(integer) 1
    127.0.0.1:6379> sadd myset1 two(integer) 1

    2、 Smembers:查看set集合中的元素

    [code]127.0.0.1:6379> smembers myset1
    1) "two"
    2) "one"

    3、srem:删除key对应set集合中的元素,返回1表示删除成功 0表示失败

     

    [code]127.0.0.1:6379> srem myset1 two(integer) 1

    4、spop:随机删除set中的一个元素并返回该元素

    [code]127.0.0.1:6379> smembers myset1
    1) "three"
    2) "one"
    3) "four"
    127.0.0.1:6379> spop myset1
    "four"
    127.0.0.1:6379> smembers myset1
    1) "three"
    2) "one"

    5、sdiff:返回给定set集合的差集 (以在前的set集合为标准)

    [code]127.0.0.1:6379> smembers myset1
    1) "three"
    2) "one"
    127.0.0.1:6379> smembers myset2
    1) "two"
    2) "one"
    127.0.0.1:6379> sdiff myset1 myset2
    1) "three"
    127.0.0.1:6379> sdiff myset2 myset1
    1) "two"

    6、sdiffstore:返回所有给定set集合的差集,并将差集添加到另外一个集合中

    [code]127.0.0.1:6379> smembers myset1
    1) "three"
    2) "one"
    127.0.0.1:6379> smembers myset2
    1) "two"
    2) "one"
    127.0.0.1:6379> sdiffstore myset3 =myset1 -myset2(integer) 1
    127.0.0.1:6379> smembers myset3
    1) "three"

    7、sinter:返回所有给定集合的交集

    [code]127.0.0.1:6379> smembers myset1
    1) "three"
    2) "one"
    127.0.0.1:6379> smembers myset2
    1) "two"
    2) "one"
    127.0.0.1:6379> sinter myset1 myset2
    1) "one"

    8、sinterstore:返回所有给定集合key的交集,并将结果存为另一个key

    [code]127.0.0.1:6379> smembers myset1
    1) "three"
    2) "one"
    127.0.0.1:6379> smembers myset2
    1) "two"
    2) "one"
    127.0.0.1:6379> sinterstore myset4 =myset1  myset2(integer) 1 

    9、sunion 返回所有给定集合的并集

    [code]127.0.0.1:6379> smembers myset1
    1) "three"
    2) "one"
    127.0.0.1:6379> smembers myset2
    1) "two"
    2) "one"
    127.0.0.1:6379> sunion myset1 myset2
    1) "three"
    2) "two"
    3) "one"

    10、sunionstore 返回所有给定集合的并集,并将结果存入另一个集合

    [code]127.0.0.1:6379> smembers myset1
    1) "three"
    2) "one"
    127.0.0.1:6379> smembers myset2
    1) "two"
    2) "one"
    127.0.0.1:6379> sunionstore myset5  myset1 myset2
    (integer) 3

    11、smove:从第一个集合中移除元素并将该元素添加到另一个集合中。

    [code]127.0.0.1:6379> smembers myset1
    1) "three"
    2) "one"
    127.0.0.1:6379> smembers myset5
    1) "three"
    2) "two"
    3) "one"
    127.0.0.1:6379> smove myset5 myset1 two(integer) 1
    127.0.0.1:6379> smembers myset5
    1) "three"
    2) "one"
    127.0.0.1:6379> smembers myset1
    1) "three"
    2) "two"
    3) "one"

    12、Scard:返回set集合中元素的个数 llen(list) strlen (str) hlen(hash)

    [code]127.0.0.1:6379> smembers myset1
    1) "three"
    2) "two"
    3) "one"
    127.0.0.1:6379> scard myset1
    (integer) 3

    13、sismember:测试member元素是否是名称为key的set集合 返回1:表示是 0:不是

    [code]127.0.0.1:6379> smembers myset1
    1) "three"
    2) "two"
    3) "one"
    127.0.0.1:6379> sismember myset1 tree(integer) 0
    127.0.0.1:6379> sismember myset1 three(integer) 1

    14、srandmember:随机返回set集合中的一个元素,但不删除该元素

     

    [code]127.0.0.1:6379> smembers myset1
    1) "three"
    2) "two"
    3) "one"
    127.0.0.1:6379>  srandmember myset1
    "one"

    (四)Sorted set (zset)类型

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

    1、zadd:向有序集合zset中添加元素并指定顺序,如果该元素已存在就更新元素顺序。

    [code]127.0.0.1:6379> zadd myzset1 1 one(integer) 1
    127.0.0.1:6379> zadd myzset1 2 two(integer) 1

    2、zrange:从zset集合中取元素 [withscores] 输出元素顺序号

    [code]127.0.0.1:6379> zadd myzset1 1 one(integer) 1
    127.0.0.1:6379> zadd myzset1 2 two(integer) 1
    127.0.0.1:6379> zrange myzset1 0 -1 withscores
    1) "one"
    2) "1"
    3) "two"
    4) "2"
    

    3、zrem:删除zset集合中指定的元素

    [code]127.0.0.1:6379> zrange myzset1 0 -1 withscores
    1) "one"
    2) "1"
    3) "two"
    4) "2"
    127.0.0.1:6379> zrem myzset1 two(integer) 1
    127.0.0.1:6379> zrange myzset1 0 -1 withscores
    1) "one"
    2) "1"

    4、zincrby:若zset中已经存在元素member、则该元素的score增加incrment否则向该集合中添加该元素,其score的值为increment

    例:改变myset1中one元素的顺序值

    [code]127.0.0.1:6379> zrange myzset1 0 -1 withscores
    1) "one"
    2) "1"
    127.0.0.1:6379> zincrby myzset1 2 one
    "3"
    127.0.0.1:6379> zrange myzset1 0 -1 withscores
    1) "one"
    2) "3"

    5、zrank:正序方式,获取指定元素的索引下标

    [code]127.0.0.1:6379> zrange myzset1 0 -1 withscores
    1) "one"
    2) "3"
    3) "four"
    4) "4"
    5) "five"
    6) "5"
    127.0.0.1:6379> zrank myzset1 four(integer) 1

    5、zrevrank:逆序的方式获取指定元素的索引下标,rev--reverse

    [code]127.0.0.1:6379> zrange myzset1 0 -1 withscores
    1) "one"
    2) "3"
    3) "four"
    4) "4"
    5) "five"
    6) "5"
    127.0.0.1:6379> zrevrank myzset1 four(integer) 1
    127.0.0.1:6379> zrevrank myzset1 five(integer) 0

    6、zrevrange:从zset集合中倒叙(score倒叙)获取元素

    [code]127.0.0.1:6379> zrange myzset1 0 -1 withscores
    1) "one"
    2) "3"
    3) "four"
    4) "4"
    5) "five"
    6) "5"
    127.0.0.1:6379> zrevrange myzset1 0 -1 withscores
    1) "five"
    2) "5"
    3) "four"
    4) "4"
    5) "one"
    6) "3"

    8、zrangebyscore:从zset集合中根据score顺序获取元素

    [code]127.0.0.1:6379> zrange myzset1 0 -1 withscores
    1) "one"
    2) "3"
    3) "four"
    4) "4"
    5) "five"
    6) "5"
    127.0.0.1:6379> zrangebyscore  myzset1 4 5 withscores
    1) "four"
    2) "4"
    3) "five"
    4) "5"

    9、zcount:返回集合中score在给定区间的数量

    [code]127.0.0.1:6379> zrange myzset1 0 -1 withscores
    1) "one"
    2) "3"
    3) "four"
    4) "4"
    5) "five"
    6) "5"
    127.0.0.1:6379> zcount myzset1 3 4
    (integer) 2

    10:zcard:返回zset集合中所有元素个数

    [code]127.0.0.1:6379> zrange myzset1 0 -1 withscores
    1) "one"
    2) "3"
    3) "four"
    4) "4"
    5) "five"
    6) "5"
    127.0.0.1:6379> zcard myzset1
    (integer) 3

    12、zremrangebyrank:删除集合中排名(下标)在给定区间的元素

    [code]127.0.0.1:6379> zrange myzset1 0 -1 withscores
    1) "one"
    2) "3"
    3) "four"
    4) "4"
    5) "five"
    6) "5"
    127.0.0.1:6379> zremrangebyrank myzset1 1 2
    (integer) 2
    127.0.0.1:6379> zrange myzset1 0 -1 withscores
    1) "one"
    2) "3"

    12、zremrangebyscore::删除集合中顺序(score值)在给定区间的元素

    [code]127.0.0.1:6379> zrange myzset1 0 -1 withscores
    1) "one"
    2) "3"
    3) "four"
    4) "4"
    5) "five"
    6) "5"
    127.0.0.1:6379> zremrangebyscore myzset1 3 4
    (integer) 2
    127.0.0.1:6379> zrange myzset1 0 -1 withscores
    1) "five"
    2) "5"

    rank是指下标索引:他是从0开始的

    score是指分数

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    • 点赞
    • 收藏
    • 分享
    • 文章举报
    fxd_dong 发布了7 篇原创文章 · 获赞 0 · 访问量 2326 私信 关注
    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: