美文网首页
redis基础

redis基础

作者: xiang205012 | 来源:发表于2018-06-13 17:37 被阅读9次
redis安装

    下载redis源码包,安装gcc编译环境,make,make install prefic=/xxx/xxx(指定安装路径,不指定默认安装在/usr/local下)。安装后如下图:


redis安装.png

将解压包下的redis.conf复制到安装目录bin下。

redis启动服务端:./redis-server 服务端默认端口是6379,默认启动时是有图形的,如果不需要图形显示可以更改redis.conf中的daemonize=yes 。然后再使用带配置文件的启动方式启动:./redis-server redis.conf 。查看是否启动:ps aux|grep redis

redis服务端关闭:kill xxx(redis进程号),kill -9 xxx(-9表示强制杀死),使用客户端关闭:./redis-cli shutdown

redis启动客户端:./redis-cli 如果在同一台机器上就会自动连接到redis服务端,如果不在同一台机器上:./redis-cli -h 192.168.157.4 -p 6379(-h指定IP,-p指定端口)
客户端判断服务端是否正常:ping 如果返回PONG则正常

redis基本操作命令
  • 对value操作的命令
    exists(key):确认一个key是否存在
    del(key):删除一个key
    type(key):返回值的类型
    keys(pattern):返回满足给定pattern的所有key
    randomkey:随机返回key空间的一个key
    rename(oldname, newname):将key由oldname重命名为newname,若
    newname存在则删除newname表示的key
    dbsize:返回当前数据库中key的数目
    expire:设定一个key的活动时间(s)
    ttl:获得一个key的活动时间
    select(index):按索引查询
    move(key, dbindex):将当前数据库中的key转移到有dbindex索引的数据库
    flushdb:删除当前选择数据库中的所有key
    flushall:删除所有数据库中的所有key

  • 对String操作的命令

SET key value [EX seconds] [PX milliseconds] [NX|XX]  #设置key为指定的字符串值。
#参数:
#EX seconds – 设置键key的过期时间,单位时秒
#PX milliseconds – 设置键key的过期时间,单位时毫秒
#NX – 只有键key不存在的时候才会设置key的值
#XX – 只有键key存在的时候才会设置key的值

set(key, value):给数据库中名称为key的string赋予值value
get(key):返回数据库中名称为key的string的value
getset(key, value):给名称为key的string赋予上一次的value
mget(key1, key2,…, key N):返回库中多个string(它们的名称为key1,key2…)的value
setnx(key, value):如果不存在名称为key的string,则向库中添加string,名称为key,值为value
setex(key, time, value):向库中添加string(名称为key,值为value)同时,设定过期时间time
mset(key1, value1, key2, value2,…key N, value N):同时给多个string赋值,名称为key i的string赋值value i
msetnx(key1, value1, key2, value2,…key N, value N):如果所有名称为key i的string都不存在,则向库中添加string,名称key i赋值为value i
incr(key):名称为key的string增1操作
incrby(key, integer):名称为key的string增加integer
decr(key):名称为key的string减1操作
decrby(key, integer):名称为key的string减少integer
append(key, value):名称为key的string的值附加value
substr(key, start, end):返回名称为key的string的value的子串

  • 对List操作的命令
    rpush(key, value):在名称为key的list尾添加一个值为value的元素
    lpush(key, value):在名称为key的list头添加一个值为value的 元素
    llen(key):返回名称为key的list的长度
    lrange(key, start, end):返回名称为key的list中start至end之间的元素(下标从0开始,下同)
    ltrim(key, start, end):截取名称为key的list,保留start至end之间的元素
    lindex(key, index):返回名称为key的list中index位置的元素
    lset(key, index, value):给名称为key的list中index位置的元素赋值为value
    lrem(key, count, value):删除count个名称为key的list中值为value的元素。count为0,删除所有值为value的元素,count>0从 头至尾删除count个值为value的元素,count<0从尾到头删除|count|个值为value的元素。 lpop(key):返回并删除名称为key的list中的首元素 rpop(key):返回并删除名称为key的list中的尾元素 blpop(key1, key2,… key N, timeout):lpop命令的block版本。即当timeout为0时,若遇到名称为key i的list不存在或该list为空,则命令结束。如果timeout>0,则遇到上述情况时,等待timeout秒,如果问题没有解决,则对 keyi+1开始的list执行pop操作。
    brpop(key1, key2,… key N, timeout):rpop的block版本。参考上一命令。
    rpoplpush(srckey, dstkey):返回并删除名称为srckey的list的尾元素,并将该元素添加到名称为dstkey的list的头部
  • 对Set操作的命令
    sadd(key, member):向名称为key的set中添加元素member
    srem(key, member) :删除名称为key的set中的元素member
    spop(key) :随机返回并删除名称为key的set中一个元素
    smove(srckey, dstkey, member) :将member元素从名称为srckey的集合移到名称为dstkey的集合
    scard(key) :返回名称为key的set的基数
    sismember(key, member) :测试member是否是名称为key的set的元素
    sinter(key1, key2,…key N) :求交集
    sinterstore(dstkey, key1, key2,…key N) :求交集并将交集保存到dstkey的集合
    sunion(key1, key2,…key N) :求并集
    sunionstore(dstkey, key1, key2,…key N) :求并集并将并集保存到dstkey的集合
    sdiff(key1, key2,…key N) :求差集
    sdiffstore(dstkey, key1, key2,…key N) :求差集并将差集保存到dstkey的集合
    smembers(key) :返回名称为key的set的所有元素
    srandmember(key) :随机返回名称为key的set的一个元素
  • 对zset(sorted set)操作的命令
    zadd(key, score, member):向名称为key的zset中添加元素member,score用于排序。如果该元素已经存在,则根据score更新该元素的顺序。
    zrem(key, member) :删除名称为key的zset中的元素member
    zincrby(key, increment, member) :如果在名称为key的zset中已经存在元素member,则该元素的score增加increment;否则向集合中添加该元素,其score的值为increment
    zrank(key, member) :返回名称为key的zset(元素已按score从小到大排序)中member元素的rank(即index,从0开始),若没有member元素,返回“nil”
    zrevrank(key, member) :返回名称为key的zset(元素已按score从大到小排序)中member元素的rank(即index,从0开始),若没有member元素,返回“nil”
    zrange(key, start, end):返回名称为key的zset(元素已按score从小到大排序)中的index从start到end的所有元素
    zrevrange(key, start, end):返回名称为key的zset(元素已按score从大到小排序)中的index从start到end的所有元素
    zrangebyscore(key, min, max):返回名称为key的zset中score >= min且score <= max的所有元素 zcard(key):返回名称为key的zset的基数 zscore(key, element):返回名称为key的zset中元素element的score zremrangebyrank(key, min, max):删除名称为key的zset中rank >= min且rank <= max的所有元素 zremrangebyscore(key, min, max) :删除名称为key的zset中score >= min且score <= max的所有元素
    zunionstore / zinterstore(dstkeyN, key1,…,keyN, WEIGHTS w1,…wN, AGGREGATE SUM|MIN|MAX):对N个zset求并集和交集,并将最后的集合保存在dstkeyN中。对于集合中每一个元素的score,在进行 AGGREGATE运算前,都要乘以对于的WEIGHT参数。如果没有提供WEIGHT,默认为1。默认的AGGREGATE是SUM,即结果集合中元素 的score是所有集合对应元素进行SUM运算的值,而MIN和MAX是指,结果集合中元素的score是所有集合对应元素中最小值和最大值。
  • 对Hash操作的命令
    hset(key, field, value):向名称为key的hash中添加元素field<—>value
    hget(key, field):返回名称为key的hash中field对应的value
    hmget(key, field1, …,field N):返回名称为key的hash中field i对应的value
    hmset(key, field1, value1,…,field N, value N):向名称为key的hash中添加元素field i<—>value i
    hincrby(key, field, integer):将名称为key的hash中field的value增加integer
    hexists(key, field):名称为key的hash中是否存在键为field的域
    hdel(key, field):删除名称为key的hash中键为field的域
    hlen(key):返回名称为key的hash中元素个数
    hkeys(key):返回名称为key的hash中所有键
    hvals(key):返回名称为key的hash中所有键对应的value
    hgetall(key):返回名称为key的hash中所有的键(field)及其对应的value
redis设置key过期时间
  • 设置
    Redis 有四个不同的命令可以用于设置键的生存时间(键可以存在多久)或过期时间(键什么时候会被删除) :

    1. EXPlRE <key> <ttl> 命令用于将键key 的生存时间设置为ttl 秒。
    2. PEXPIRE <key> <ttl> 命令用于将键key 的生存时间设置为ttl 毫秒。
    3. EXPIREAT <key> < timestamp> 命令用于将键key 的过期时间设置为timestamp所指定的秒数时间戳。
    4. PEXPIREAT <key> < timestamp > 命令用于将键key 的过期时间设置为timestamp所指定的毫秒数时间戳。
  • 移除
        PERSIST命令可以移除一个键的过期时间,PERSIST message(key名)

  • 查看
        TTL 命令和PTTL 命令接受一个带有生存时间或者过期时间的键,返回这个键的剩余生存时间,也就是,返回距离这个键被服务器自动删除还有多长时间
        TTL message(key名)

redis内存和持久化

    内存和持久化之间没有什么关系,不会因为内存满了而进行持久化,他们各自有各自的机制

内存

    设置maxmemory参数,maxmemory是bytes字节类型,最好不要超过实际内存的四分之三,如果是4G的内存,最大可设成3G。
    如果内存满了,会报错:OOM command not allowed when used memory > ‘maxmemory’ 所以在设置内存时还要设置一个参数:maxmemory-policy用来控制,它默认是noeviction模式,一共有六种模式:
    volatile-lru -> 根据LRU算法生成的过期时间来删除。
    allkeys-lru -> 根据LRU算法删除任何key。
    volatile-random -> 根据过期设置来随机删除key。
    allkeys->random -> 无差别随机删。
    volatile-ttl -> 根据最近过期时间来删除(辅以TTL)
    noeviction -> 谁也不删,直接在写操作时返回错误。

持久化

持久化相关命令:
    save:将数据同步保存到磁盘
    bgsave:将数据异步保存到磁盘
    lastsave:返回上次成功将数据保存到磁盘的Unix时戳
    shundown:将数据同步保存到磁盘,然后关闭服务

redis持久化有两种方式:
    1、以.rdb文件持久化存储(默认)
    2、以.aof文件持久化存储,需要修改配置文件中的appendonly为yes

  • .rdb方式可以通过redis.conf中的save来配置
redis .rdb默认配置如下:
save 900 1
save 300 10
save 60 10000
这个配置意思是,如果900秒内有一个key发生变化就往磁盘保存一次,
如果300秒内有10个key发生变化就往磁盘保存一次,
如果60秒内有10000个key发生变化就往磁盘保存一次。
  • .aof方式是每秒都往磁盘保存一次

    总结:aof方式数据的丢失率远低于rdb,但对服务器性能消耗大。如果只用redis做缓存建议使用rdb方式,因为即使数据丢了,还可以去数据库找。

参考:
    Redis入门
    Redis五种数据类型使用场景(一)
    Redis五种数据类型使用场景(二)
    Redis五种数据类型使用场景实例
    Redis中的排序
    Redis面试10问
    Redis缓存雪崩

相关文章

网友评论

      本文标题:redis基础

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