美文网首页
Redis基本使用

Redis基本使用

作者: xiaohan_zhang | 来源:发表于2020-09-25 11:25 被阅读0次
    安装
    • 下载并安装
      $ wget http://download.redis.io/releases/redis-6.0.8.tar.gz
      $ tar xzf redis-6.0.8.tar.gz
      $ cd redis-6.0.8
      $ make
      make完后 redis-6.0.8目录下会出现编译后的redis服务程序redis-server, 还有用于测试的客户端程序redis-cli, 两个程序位于安装目录 src 目录下。

    • 启动redis服务

    1. 用的是默认配置
      $ cd src
      $ ./redis-server
    2. 使用自己的配置文件
      $ cd src
      $ ./redis-server /root/redis-6.0.8/redis.conf
    • 端口号冲突:
      Could not create server TCP listening socket 127.0.0.1:6379: bind: Address already in use

    $ ps -ef | grep redis

    $ kill -9 10096
    重新启动redis
    $ ./redis-server /root/redis-6.0.8/redis.conf

    • 内存警告
      overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add ‘vm.overcommit_memory = 1’ to/etc/sysctl.conf and then reboot or run the command ‘sysctl vm.overcommit_memory=1’ for this to take effect.
      解决办法:将vm.overcommit_memory = 1添加到/etc/sysctl.conf中,然后执行sysctl -p生效配置。

    • 警告
      The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128
      解决办法:将net.core.somaxconn = 1024添加到/etc/sysctl.conf中,然后执行sysctl -p生效配置。

    • 警告
      you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix thisissue run the command ‘echo never > /sys/kernel/mm/transparent_hugepage/enabled’ as root, and add it to your /etc/rc.local in order to retain thesetting after a reboot. Redis must be restarted after THP is disabled.
      解决办法:将echo never > /sys/kernel/mm/transparent_hugepage/enabled添加到/etc/rc.local中,然后执行source /etc/rc.local生效配置。

    • 启动客户端
      $ ./redis-cli
      $ ./redis-cli --raw 支持中文


      退出
      127.0.0.1:6379> exit
    • 选择数据库
      Redis默认有从0-15,16个数据库,默认选择0号数据库。
      选择2号数据库:
      $ select 2

    Redis数据类型

    Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。

    • 添加/修改字符串值
      set: 键不存在,添加;键存在,修改
    1. 添加键值对
      set key value
    2. 添加键值对,同时设置过期时间
      setex key seconds value
    3. 同时添加多个键值对
      mset key1 value1 key2 value2 key value3....
    4. 追加值(在原有值后拼接)
      append key str
    5. 获取单个值
      get key
    6. 获取多个值
      mget key1 key2 key3...
    7. 删除键值对
      del key
    8. 删除多个键
      del key1 key2...
    9. 查找键(支持通配符)
      keys name
      keys *
    10. 判断键是否存在
      exists key
      如果键存在,返回1; 不存在,返回0
    11. 查看键对应value是什么类型
      type key
    12. 设置已有键的过期时间
      expire key seconds
    13. 查看键有效时间
      ttl key
      返回 >0 代表有效时间,单位:秒
      返回 -1 为永远有效
      返回 -2 为键不存在
    # 没有过期时间
    redis 127.0.0.1:6379> SET name "xiaobai"
    OK
    redis 127.0.0.1:6379> GET name
    "xiaobai"
    redis 127.0.0.1:6379> SET name "xiaohuang"
    OK
    redis 127.0.0.1:6379> GET name
    "xiaohuang"
    
    # 设置过期时间5秒(5秒后数据自动删除)
    127.0.0.1:6379> setex gender 5 "男"
    OK
    127.0.0.1:6379> get gender
    "男"
    127.0.0.1:6379> get gender # 5秒之后
    (nil)
    
    # 同时添加多个键值对
    127.0.0.1:6379> mset name1 "xiaoyi" name2 "xiaoer" name3 "xiaosan"
    OK
    127.0.0.1:6379> get name1
    "xiaoyi"
    127.0.0.1:6379> get name3
    "xiaosan"
    
    # 追加值
    127.0.0.1:6379> set name "test"
    OK
    127.0.0.1:6379> get name
    "test"
    127.0.0.1:6379> append name "123"
    (integer) 7
    127.0.0.1:6379> get name
    "test123"
    
    # 获取多个值
    127.0.0.1:6379> mget name1 name2 name3
    1) "xiaoyi"
    2) "xiaoer"
    3) "xiaosan"
    # 查找键
    127.0.0.1:6379> keys name
    1) "name"
    127.0.0.1:6379> keys *
    1) "name"
    2) "name2"
    3) "name3"
    4) "name1"
    127.0.0.1:6379> keys ?ame
    1) "name"
    # 判断键是否存在
    127.0.0.1:6379> exists name
    (integer) 1
    # 查看key对应value的类型
    127.0.0.1:6379> type name
    string
    # 设置name3的过期时间为100秒
    127.0.0.1:6379> expire name3 100
    (integer) 1
    # 查看name的有效时间
    127.0.0.1:6379> ttl name
    (integer) -1
    
    • Redis 哈希(Hash)
      Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。


      Redis hash表
    1. 设置单个字段
      hset key field value
      如果字段不存在,则添加;存在,则修改
    2. 设置多个字段
      hmset key field1 value1 filed2 value2...
    3. 获取指定键所有字段
      hkeys key
    4. 获取一个字段值
      hget key filed
    5. 获取多个字段值
      hmget key filed1 filed2...
    6. 获取所有字段值
      hvals key
    7. 获取所有字段和值
      hgetall key
    8. 删除指定字段
      hdel key field1 field2...
    9. 删除整个hash值
      del key
    # 增加一个hash键值对,字段为name,值为Luffy
    127.0.0.1:6379> hset user name 'Luffy'
    (integer) 1
    # 增加一个hash键值对,字段为age,值为16
    127.0.0.1:6379> hset user age 16
    (integer) 1
    # 增加多个hash键值对
    127.0.0.1:6379> hmset user1 name 'Naruto' age 17
    OK
    
    # 获取user键的所有字段
    127.0.0.1:6379> hkeys user
    1) "name"
    2) "age"
    # 获取user键对应的hash的name字段值
    127.0.0.1:6379> hget user name
    "Luffy"
    # 获取user键对应hash的name、age字段值
    127.0.0.1:6379> hmget user name age
    1) "Luffy"
    2) "16"
    # 获取user键对应hash的所有字段值
    127.0.0.1:6379> hvals user
    1) "Luffy"
    2) "16"
    # 获取user键对应hash的所有字段和值
    127.0.0.1:6379> hgetall user
    1) "name"
    2) "Luffy"
    3) "age"
    4) "16"
    
    # 删除user键对应hash的age字段
    127.0.0.1:6379> hdel user age
    (integer) 1
    127.0.0.1:6379> hgetall user
    1) "name"
    2) "Luffy"
    # 删除user键值对
    127.0.0.1:6379> del user
    (integer) 1
    
    • Redis 列表(List)
      Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。


      Redis list
    1. 列表左侧插入值
      lpush key value1 value2...
    2. 列表右侧插入值
      rpush key value1 value2...
    3. 在指定值前面或后面插入值
      linsert key before value 插入的值
      linsert key after value 插入的值
    4. 获取列表指定范围的值
      lrange key start stop
      lrange key 0 -1 获取列表所有值
      索引从左侧开始,第一个值是0;
      索引可以是负数,表示从尾部开始,-1表示最后一个值;
    5. 获取列表长度
      llen key
    6. 修改指定索引位置的值
      lset key index value
    7. 将列表中前count次出现的值删除
      lrem key count value
      count > 0,从头往尾删;
      count < 0,从尾往头删;
      count = 0,全部删除;
    # 键students添加list值 左侧
    127.0.0.1:6379> lpush students 'xiaohong' 'xiaolan' 'xiaolv' 'xiaozi'
    (integer) 4
    # 右侧添加
    127.0.0.1:6379> rpush students 'xiaohuang'
    (integer) 5
    # 在'xiaozi'前面插入值
    127.0.0.1:6379> linsert students before 'xiaozi' 'qian'
    (integer) 7
    # 在'xiaozi'后面插入值
    127.0.0.1:6379> linsert students after 'xiaozi' 'hou'
    (integer) 8
    # 获取列表下标 0-3的值
    127.0.0.1:6379> lrange students 0 3
    1) "zuoce"
    2) "qian"
    3) "xiaozi"
    4) "hou"
    # 获取students列表所有值
    127.0.0.1:6379> lrange students 0 -1
    1) "zuoce"
    2) "qian"
    3) "xiaozi"
    4) "hou"
    5) "xiaolv"
    6) "xiaolan"
    7) "xiaohong"
    8) "xiaohuang"
    # 获取列表长度
    127.0.0.1:6379> llen students
    (integer) 8
    # 修改'xiaolv'为'xiaohei'
    127.0.0.1:6379> lset students 4 'xiaohei'
    OK
    
    127.0.0.1:6379> lpush test a b c a b c a a
    (integer) 8
    # 删除test列表中出现的前2个c
    127.0.0.1:6379> lrem test 2 c
    (integer) 2
    127.0.0.1:6379> lrange test 0 -1
    1) "a"
    2) "a"
    3) "b"
    4) "a"
    5) "b"
    6) "a"
    # 删除test列表中出现的前1个b
    127.0.0.1:6379> lrem test 1 b
    (integer) 1
    127.0.0.1:6379> lrange test 0 -1
    1) "a"
    2) "a"
    3) "a"
    4) "b"
    5) "a"
    # 删除test列表中所有的a
    127.0.0.1:6379> lrem test 0 a
    (integer) 4
    127.0.0.1:6379> lrange test 0 -1
    1) "b"
    
    • Redis 集合(Set)
      Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的。
      只能添加、删除,不能修改。


      Redis Set
    1. 集合添加值
      sadd key value1 value2...
    2. 集合元素数量
      scard key
    3. 查询集合所有元素
      smembers key
    4. 删除指定值
      srem key value
    # 集合添加元素
    127.0.0.1:6379> sadd set_test 'aa' 'bb' 'cc'
    (integer) 3
    # 集合元素数量
    127.0.0.1:6379> scard set_test
    (integer) 3
    # 查询set_test集合元素
    127.0.0.1:6379> smembers set_test
    1) "aa"
    2) "cc"
    3) "bb"
    # 删除'bb'
    127.0.0.1:6379> srem set_test bb
    (integer) 1
    127.0.0.1:6379> smembers set_test
    1) "aa"
    2) "cc"
    
    • Redis 有序集合(sorted set)
      Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
      每个元素都会关联一个分数(score),分数(score)可以为负数,redis通过分数(score)来为集合中的成员进行从小到大的排序。

    有序集合的成员是唯一的,但分数(score)却可以重复。
    只能添加、删除,不能修改。


    Redis zset
    1. zset中添加值
      zadd key score1 value1 score2 value2...
    2. 获取zset指定范围内的值
      zrange key start stop
      zrange key start stop withscores 同时获取score
    3. 通过score获取值
      zrangebyscore key min max
      zrangebyscore key min max withscores
      min表示score开始值;max表示score结束值;
    4. 通过值得到score
      zscore key value
    5. 删除指定值
      zrem key value1 value2...
    6. 删除score在指定范围内的值
      zremrangebyscore key min max
    # 添加元素
    127.0.0.1:6379> zadd zet_test 1 aaa 3 bbb 2 ccc
    (integer) 3
    # 获取下标为0~1的元素
    127.0.0.1:6379> zrange zet_test 0 1
    1) "aaa"
    2) "ccc"
    # 获取zet_test集合中的所有元素
    127.0.0.1:6379> zrange zet_test 0 -1
    1) "aaa"
    2) "ccc"
    3) "bbb"
    # 获取集合中元素和score
    127.0.0.1:6379> zrange zet_test 0 -1 withscores
    1) "aaa"
    2) "1"
    3) "ccc"
    4) "2"
    5) "bbb"
    6) "3"
    # 返回score在0 - 2之间的值
    127.0.0.1:6379> zrangebyscore zet_test 0 2
    1) "aaa"
    2) "ccc"
    # 返回值‘ccc’的score
    127.0.0.1:6379> zscore zet_test ccc
    "2"
    
    # 删除指定值
    127.0.0.1:6379> zrem zet_test eee
    (integer) 1
    # 删除score在1 - 3区间的值
    127.0.0.1:6379> zremrangebyscore zet_test 1 3
    (integer) 3
    

    相关文章

      网友评论

          本文标题:Redis基本使用

          本文链接:https://www.haomeiwen.com/subject/dgtfuktx.html