redis 基本操作

1. 什么是Redis

Redis是由意大利人Salvatore Sanfilippo(网名:antirez)开发的一款内存高速缓存数据库。Redis全称为:Remote Dictionary Server,该软件使用C语言编写,Redis是一个key-value存储系统,它支持丰富的数据类型,如:string、list、set、zset(sorted set)、hash。

Redis特点:
Redis以内存作为数据存储介质,所以读写数据的效率极高,远远超过数据库。

Redis应用场景:
因为Redis交换数据快,所以在服务器中常用来存储一些需要频繁调取的数据,这样可以大大节省系统直接读取磁盘来获得数据的I/O开销,更重要的是可以极大提升速度。
将这种热点数据存到Redis(内存)中,要用的时候,直接从内存取,极大的提高了速度和节约了服务器的开销。

进入redis

redis-cli 
#不能进入,就安装:
sudo apt-get update
sudo apt-get install redis-server

redis五种数据类型、及操作

  • string 字符串

  • list 列表

  • hash 哈希

  • set 集合

  • sorted sets 有序集合

key 有5中数据类型:string、list、set、zset(sorted set)、hash。

value :都是字符串类型的

string

#设置
set key value     例:   ( set name 'jianeng' )
#  获取
get key           例:   ( get name   )
# key是唯一的,不能用同一个key 不然就会覆盖
 

查看过期时间

# -1 表示永久     -2 表示 不存在
ttl key         例:    ( ttl name )
 

设置过期时间

# 给已经存在 key,设置过期时间
expire key seconds   例:  ( expire name 20  )
# 设置 key的同时,设置过期时间
set key value ex seconds   例: ( set age 18 ex 20 )
setex key seconds value    例: ( setex sex 20 '男' )
 

追加

# 给已有的value,再添加新的值
# append key value
append name  love
#get name
redis 里面所有的 value。 都是字符串类型的
 

设置 / 获取 多个

 
#设置多个 string
mset key value  key value..
例子
mset username 'jianeng'  password  '123'
#获取多个
mget key key key ...
mget username password name 
 

key 操作

# 查看所有的key
 keys *
 keys n*
# 删除
 del key        例:  (del name)
 
# 查看key是否存在  ,存在返回 1, 不存在返回 0
 exists key 
# 查看key类型
 type key
 
运算
set num 1    # 自动识别,字符串里面的 整数
# +1
incr key        例 (incr num)
# -1
decr key        例 (decr num)
# +整数
incrby key increment              例 (incrby num 50)
# -整数
decrby key increment              例 (decrby num 50)
 

list

  • 设置

    #lpush  左添加  (栈)
    lpush  key  value     #例  lpush my_list a b c d
    #rpush  右添加   (队列)
    rpush  key  value     #例  rpush my_rlist a b c d
     
  • 查看

    # lrange  key  start  stop
    例  查看所有
    lrange my_list 0 -1
     
  • 获得list的元素个数

     
    llen key        #例  llen  my_list  
     
  • 查看位于lindex 位置上的元素

    lindex key  index    #例 lindex my_list  3
     
  • 删除

    • lpop 删除左边第一个

      lpop key        #例 lpop  my_rlist
       
  • rpop 删除右边第一个

     
    rpop key        #例 rpop  my_list
     
  • lrem 删除指定

    rpush  test_list  a a b b c d e a d f m c
    #lrem  key count  value
    #count > 0 从左往右 删除数量为count的value
    例 : lrem test_list 2 a
    #count = 0 删除所有的 value
    例 : lrem test_list 0 a
    #count < 0 从右往左 删除数量为count的value
    例 : lrem test_list -1 b
     

hash

  • 设置

    #  hset key field value
    例  user { name:jianeng}
    hset user name jianeng
     
  • 获取

    #  hget key field
    hget user name
     
  • 删除

    #  hdel key field
    hdel user name
     
  • 设置多个

    #hmset key field value [field value]
    例  user{name:jianeng , age:18, sex:male }
    hmset user name jianeng age 18 sex male
     
  • 获取多个

    # hmget key field field
    hmget user name age
  • 获取全部field value

    # hgetall key 
    例     itmes
    hgetall user
  • 获取所有的field

    # hkeys key
    例      keys
    hkeys user
  • 获取所有的value

    # hvals key 
    例     values  
    hvals user
  • 获取field的个数

    # hlen key
    例    
    hlen user
     

set 集合

  • 设置

    # sadd key value [value]    (唯一,无序)
    sadd my_set m n b v c x z b
     
  • 获取

    # smembers key
    smembers my_set
     
  • 删除

    • srem指定删除

      # srem key member
      srem my_set c
       
    • spop随机删除

      # spop  key
      spop my_set
       
  • 移动一个集合的值到另一个集合

    # smove oldkey newkey member
    smove my_set my_set2 z
     
  • 判断集合存在某个值

    # sismember key value
    sismember my_set2 b   
     
  • 交集

    # sinter key1 key2 ..
    sinter my_set my_set2
     

    把 key1 key2的交集合并到newkey

    # sinterstore newkey key1 key2
    sinterstore  new_set my_set my_set2 
  • 并集

    # sunion key1 key2 ...
    sunion my_set my_set2
     

    把 key1 key2的并集合并到newkey

    # sunionstore newkey key1 key2
    sunionstore new_set2 my_set my_set2
     
  • 差集

     
    # sdiff key1 key2
    sdiff my_set my_set2
     

    把 key1 key2的差集合并到newkey

    # sdiffstore newkey key1 key2
    sdiffstore new_set3 my_set my_set2
     
  • 获取集合个数

    # scard key
    scard my_set
     
  • 随机返回一个

    # srandmember key
    srandmember my_set
     

zset

  • 设置

    # zadd key score member
    zadd  my_zset 1 'one'
    zadd  my_zset 2 'two'
    zadd  my_zset 3 'three'
    zadd  my_zset 4 'four'
    zadd  my_zset 5 'five'
     
  • 获取

    • zrange

       
      #zrange key start stop    (withscores)
      zrange my_zset 0 -1  withscores
       
    • zrevrange倒序

      #zrevrange key start stop
      zrevrange my_zset 0 -1  withscores
  • 删除

    #zrem key member
    zrem my_zset two
     
  • 索引

    • zrank正序

      # zrank key member
      zrank my_zset three
       
    • zrevrank反序

       
      # zrevrank key member
      zrevrank my_zset three 
  • zcard 查看有序集合元素数

    # zcard key
    zcard my_zset
     
  • zrangebyscore 返回集合中 score 在给定区间的元素

    # zrange my_zset 0 -1 withscores
     zrangebyscore my_zset 2 3 withscores
    #返回了 score 在 2~3 区间的元素
  • zcount 返回集合中 score 在给定区间的数量

    # zcount key min max
    zcount my_zset 2 3
     
  • zscore : 查看score值

     
    # zscore key member
    zscore my_zset two
  • zremrangebyrank : 删除集合中排名在给定区间的元素(正向)

    # zrange my_zset 0 -1 withscores
    zremrangebyrank my_zset 1 3
     
  • zremrangebyscore : 删除集合中 score 在给定区间的元素

    # zrange my_zset 0 -1 withscores
    zremrangebyscore my_zset 3 5
     

Redis发布和订阅

#发布 
publish 频道 消息


# 订阅
subscribe 频道