【Redis补充】

Redis学习目录

2019-05-24

  1. Redis的官方定义
  2. Redis的安装和下载
  3. Redis的常见操作
    1. 1. 对于key的所有操作
    2. 2. 字符串操作
    3. 3. 链表操作
    4. 4. 集合set操作
    5. 5. 有序集合order set操作
    6. 6. Hash数据结构操作

REDIS的官方定义

Redis is an open source, BSD licensed, advanced key-value store. It is often referred to as a data structure server since keys can contain strings, hashes, lists, sets and sorted sets.
redis是开源,BSD许可,高级的key-value存储系统.

那Redis和MC相比,独特之处是啥:

  • redis可以用来做存储(storge), 而memcached只能用来做缓存(cache), 这个特点主要因为其有”持久化”的功能.
  • 对于memcached来说,存储的数据,只有1种类型–”字符串”,而redis则可以存储字符串,链表,哈希结构,集合,有序集合

REDIS的安装和下载

1:官方站点: redis.io 下载最新版或者最新stable版

2:解压源码并进入目录

3:不用configure

4:直接make

5:可选步骤: make test 测试编译情况
(可能出现: need tcl >8.4这种情况, yum install tcl)

6:安装到指定的目录,比如 /usr/local/redis

make  PREFIX=/usr/local/redis install
注: PREFIX要大写

7:make install之后, 得到如下几个文件

  • redis-benchmark 性能测试工具
  • redis-check-aof 日志文件检测工(比如断电造成日志损坏,可以检测并修复)
  • redis-check-dump 快照文件检测工具,效果类上
  • redis-cli 客户端
  • redis-server 服务端

8: 复制配置文件

Cp /path/redis.conf /usr/local/redis

9: 启动与连接

  • 启动

    path/to/redis/bin/redis-server  ./path/to/conf-file
    
    例:[root@localhost redis]# ./bin/redis-server ./redis.conf
    
  • 连接

    #/path/to/redis/bin/redis-cli [-h localhost -p 6379 ]
    

10:让redis以后台进程的形式运行

编辑conf配置文件,修改如下内容;
daemonize yes

易碰到的问题:时间错误.

原因: 源码是官方configure过的,但官方configure时,生成的文件有时间戳信息,所以如果你的虚拟机的时间不对,比如说是2022年,就可能会出错

解决: date -s ‘yyyy-mm-dd hh:mm:ss’ 重写时间
再 clock -w 写入cmos

REDIS的常见操作

1. 对于key的所有操作
  • del key1 key2 … keyn

    作用:删除1个或者多个键
    返回值:不存在的key忽略掉,返回真正删除的key的数量

  • rename key newkey

    作用:给key附一个新的key名
    注:如果说newkey的值已经存在,则newkey的原值被覆盖

  • renamenx key newkey

    作用:把key改名为newkey
    返回:发生修改返回1,未发生修改返回0
    
  • move key db

    redis 127.0.0.1:6379[1]> select 2
    OK
    redis 127.0.0.1:6379[2]> keys *(empty list or set)redis 127.0.0.1:6379[2]> select 0OKredis 127.0.0.1:6379> keys* 
    1) “name”
    2) “cc”
    3) “a”
    4) “b”
    redis 127.0.0.1:6379> move cc 2
    (integer) 1
    redis 127.0.0.1:6379> select 2
    OK
    redis 127.0.0.1:6379[2]> keys *
    1) “cc”
    redis 127.0.0.1:6379[2]> get cc
    “3”
    (注意: 一个redis进程,可以打开不止一个数据库, 默认打开16个数据库,从0到15编号,如果想打开更多数据库,可以从配置文件修改)
    
  • keys pattern

    pattern可选择如下:
    *: 通配任意多个字符?: 通配单个字符[]: 通配括号内的某1个字符redis 127.0.0.1:6379> flushdbOKredis 127.0.0.1:6379> keys* 
    (empty list or set)
    redis 127.0.0.1:6379> mset one 1 two 2 three 3 four 4
    OK
    redis 127.0.0.1:6379> keys o*1) “one”redis 127.0.0.1:6379> key* o
    (error) ERR unknown command ‘key’
    redis 127.0.0.1:6379> keys *o
    1) “two”
    redis 127.0.0.1:6379> keys ???
    1) “one”
    2) “two”
    redis 127.0.0.1:6379> keys on?
    1) “one”
    redis 127.0.0.1:6379> set ons yes
    OK
    redis 127.0.0.1:6379> keys on[eaw]
    1)”one”
    
  • randomkey 返回随机key

  • exists key 判断key是否存在 返回1/0

  • type key 返回key存储的值的类型 有string link set order set hash

  • ttl key 查询key的生命周期

  • expire key 整型值 设置key的生命周期

  • pexpire key 毫秒数, 设置生命周期

  • pttl key, 以毫秒返回生命周期

  • persist key 把指定key设置为永久有效

注:对于不存在的key或已过期的key/不过期的key,都返回-1
Redis2.8中,对于不存在的key,返回-2

2. 字符串操作
  • set key value [ex 秒数] / [px 毫秒数]

    set a 1 ex 10 , 10秒有效
    Set a 1 px 9000  , 9秒有效
    注: 如果ex,px同时写,以后面的有效期为准
    
    如 set a 1 ex 100 px 9000, 实际有效期是9000毫秒
    
  • mset multi set

    一次性设置多个键值
    mset key1 v1 key2 v2 ....
    
  • get key

    获取key的值
    
  • mget key1 key2 ..keyn

    获取多个key的值
    
  • getset key newvalue

    获取并返回旧值,设置新值
    
    redis 127.0.0.1:6379> set cnt 0
    OK
    redis 127.0.0.1:6379> getset cnt 1
    "0"
    redis 127.0.0.1:6379> getset cnt 2
    "1"
    
  • incr key

    作用: 指定的key的值加1,并返回加1后的值
    
  • incrby key number

    redis 127.0.0.1:6379> incrby age  90
    (integer) 92
    
  • incrbyfloat key floatnumber

    redis 127.0.0.1:6379> incrbyfloat age 3.5
    "95.5"
    
  • decr key

    redis 127.0.0.1:6379> set age 20
    OK
    redis 127.0.0.1:6379> decr age
    (integer) 19
    
  • decrby key number

    redis 127.0.0.1:6379> decrby age 3
    (integer) 16
    

应用场景

在登录的时候,可以控制频控

3. 链表操作
  • lpush key value

    作用: 把值插入到链表头部
    
  • rpop key

    作用: 返回并删除链表尾元素
    
  • rpush,lpop: 不解释

  • lrange key start stop

    作用: 返回链表中[start ,stop]中的元素
    规律: 左数从0开始,右数从-1开始
    
  • ltrim key start stop

    作用: 剪切key对应的链接,切[start,stop]一段,并把该段重新赋给key
    
  • lindex key index

    作用: 返回index索引上的值,
    如  lindex key 2
    
  • llen key

    作用:计算链接表的元素个数
    redis 127.0.0.1:6379> llen task
    (integer) 3
    redis 127.0.0.1:6379>
    
  • linsert key after|before search value

    作用: 在key链表中寻找’search’,并在search值之前|之后,.插入value
    注: 一旦找到一个search后,命令就结束了,因此不会插入多个value
    

场景: 长轮询Ajax,在线聊天时,能够用到

4. 集合set操作
  • sadd setname value1 value2

    作用: 往集合setname中增加元素
    
  • srem value1 value2

    作用: 删除集合中集为 value1 value2的元素
    返回值: 忽略不存在的元素后,真正删除掉的元素的个数
    
  • spop key

    作用: 返回并删除集合中key中1个随机元素
    
  • srandmember key

    作用: 返回集合key中,随机的1个元素.
    
  • sismember key value

    作用: 判断value是否在key集合中
    是返回1,否返回0
    
  • smembers key

    作用: 返回集中中所有的元素
    
  • scard key

    作用: 返回集合中元素的个数
    
  • smove source dest value

    作用:把source中的value删除,并添加到dest集合中
    
  • sinter s1 s2 s3

    作用: 求出s1 s2 s3 三个集合中的交集,并返回
    redis 127.0.0.1:6379> sadd s1 0 2 4 6
    (integer) 4
    redis 127.0.0.1:6379> sadd s2 1 2 3 4
    (integer) 4
    redis 127.0.0.1:6379> sadd s3 4 8 9 12
    (integer) 4
    redis 127.0.0.1:6379> sinter s1 s2 s3
    1) "4"
    redis 127.0.0.1:6379> sinter s3 s1 s2
    1)"4"
    
  • sinterstore dest s1 s2 s3

    作用: 求出s1 s2 s3 三个集合中的交集,并赋给dest
    
  • suion s1 s2 s3.. sn

    作用: 求出s1 s2 s3.. sn的并集,并返回
    
  • sdiff s1 s2 s3

    作用: 求出s1与s2 s3的差集
    即s1-s2-s3
    
    
5. 有序集合order set操作
  • zadd s1 score1 value1 score2 value2 ..

    redis 127.0.0.1:6379> zadd stu 18 lily 19 hmm 20 lilei 21 lilei
    (integer) 3
    
    
  • zrem s1 value1 value2 ..

    作用: 删除集合中的元素
    
    
  • zremrangebyscore sname min max

    作用: 按照socre来删除元素,删除score在[min,max]之间的
    redis 127.0.0.1:6379> zremrangebyscore stu 4 10
    (integer) 2
    redis 127.0.0.1:6379> zrange stu 0 -1
    1) "f"
    
    
  • zremrangebyrank sname start end

    作用: 按排名删除元素,删除名次在[start,end]之间的
    redis 127.0.0.1:6379> zremrangebyrank stu 0 1
    (integer) 2
    redis 127.0.0.1:6379> zrange stu 0 -1
    1) "c"
    2) "e"
    3) "f"
    4) "g"
    
    
  • zrank key member

    查询member的排名(升序 0名开始)
    
    
  • zrevrank key memeber

    查询 member的排名(降序 0名开始)
    
    
  • ZRANGE key start stop [WITHSCORES]

    把集合排序后,返回名次[start,stop]的元素
    默认是升续排列 
    Withscores 是把score也打印出来
    
    
  • zrevrange key start stop

    作用:把集合降序排列,取名字[start,stop]之间的元素
    
    
  • zrangebyscore key min max [withscores] limit offset N

    作用: 集合(升续)排序后,取score在[min,max]内的元素,
    并跳过 offset个, 取出N个
    redis 127.0.0.1:6379> zadd stu 1 a 3 b 4 c 9 e 12 f 15 g
    (integer) 6
    redis 127.0.0.1:6379> zrangebyscore stu 3 12 limit 1 2 withscores
    1) "c"
    2) "4"
    3) "e"
    4) "9"
    
    
  • zcard key

    返回元素个数
    
    
  • zcount key min max

    返回[min,max] 区间内元素的数量
    
    
6. Hash数据结构操作
  • hset key field value

    作用: 把hash表中 filed域的值设为value
    注:如果没有field域,直接添加,如果有,则覆盖原field域的值
    
    
  • hmset key field1 value1 [field2 value2 field3 value3 ……fieldn valuen]

    作用: 设置field1->N 个域, 对应的值是value1->N
    (对应PHP理解为  $key = array(file1=>value1, field2=>value2 ....fieldN=>valueN))
    
    
  • hget key field

    作用: 返回key中field域的值
    
    
  • hmget key field1 field2 fieldN

    作用: 返回key中field1 field2 fieldN域的值
    
    
  • hgetall key

    作用:返回key中,所有域与其值
    
    
  • hdel key field

    作用: 删除key中 field域
    
    
  • hlen key

    作用: 返回key中元素的数量
    
    
  • hexists key field

    作用: 判断key中有没有field域
    
    
  • hincrby key field value

    作用: 是把key中的field域的值增长整型值value
    
    
  • hincrby float key field value

    作用: 是把key中的field域的值增长浮点值value
    
    
  • hkeys key

    作用: 返回key中所有的field
    
    
  • hvals key

    作用: 返回key中所有的value
    

posted on 2019-05-24 16:49  黑粥  阅读(119)  评论(0编辑  收藏  举报

导航