一、常用命令

 · auth password :输入密码连接redis

1 . String :

  get key :获取 / set key :新增 

  setnx key: 新增,若数据不存在返回1,已存在则返回0(setnx:set if not exists)

  getset key value :获取key键初始值,修改值为value

  del key :删除

  incr key :获取key值并加一(若redis中没有对应key就会创建一个值为一的新key   /   若key对应值不能转化为int类型就会报错)

  decr key :获取key值并减一(……   一个值为-1的新key   /   ……)

  incrby decrby key value :获取key值并➕/➖value   ……

  append key value :获取key值并在其后面拼接value并返回拼接完成后的长度(若redis中没有对应的key就会创建一个值为value的新key)

2.hash :

  hset hashname key value :设置name为hashname的hash数据的单个key和value(hash不存在将会被创建)

  hmset hashname key1 value1 key2 value2…… :设置hashname的多个键值对

  hget hashname key :获取……

  hmget hashname key1 key2 …… :获取……

  hgetall hashname :获取name为hashname的hash数据的所有键值(h : hash   /   all : all)

  hdel hashname key1 (key2 ……):删除name为hashname的hash数据的键值,返回影响条数

  del hashname :删除hashname的所有数据

  hincrby hashname key value :获取hashname的key对应值并➕value

  hexists hashname key :判断hashname中有没有对应的key,是则返回1,否返回2

  hlen hashname :返回hashname中有几个key(h : hash   /   len :length)

  hkeys hashname :返回所有的key

  hvals hashname :返回所有的value

3.list :

  lpush listname value1 value2 …… :从左设置name为listname的list的value1、2……(list不存在将会被创建   l:left)

  rpush listname value1 value2 …… :从右……(   ……   r:right)

  lrange listname int1 int2 :从左取值展示,取下标为 int1 至 int2 间的数据(l : list   /   int为负数时表示从右计算下标)

  lpop listname :将左边第一个数据弹出并返回

  rpop listname :将右边第一个数据弹出并返回

  llen listname :返回list的长度

  lpushx / rpushx :从左/右设置……(list不存在将不会添加)

  lrem listname count value :删除count个val = value的值(l : list   /   rem : remove   /   例 :count = 2时从左至右删除两个   /   count = -2时从右至左删除两个   /   count为0时删除所有val = value的值)

  lset listname int value :将list中下标为int的数据替换为value(下标输入有误则会报错)

  linsert listname before / after value value_insert :在值为value的数据前 / 后新增数据,值为value_insert

  rpoplpush listname1 listname2 :将name为listname1的尾部数据弹出,push到name为listname2的数据头部(r : right   /   l : left)

    消息队列使用场景:若消费者取出数据后来不及使用就崩溃了,我们的数据就会丢失,相应的业务逻辑也会出现问题。我们可以使用rpoplpush将消息先存放到一个备份list中,待消费者完成业务逻辑使用完数据后再将备份list中的对应数据删除就可以解决消息丢失的问题

4.set :

  sadd setname value1 value2 …… :设置name为setname的set的value值(返回影响条数)

  srem setname value1 value2…… :删除set中值为value的元素(s : set   /   rem : remove   /   返回影响条数)

  smembers setname :返回所有的值

  sismember setname value :判断set中有没有val = value的值,是则返回1、否返回0(s : set   /   is : is)

  sdiff setname1 setname2 :返回set1中存在但set2中不存在的数据(diff : different)

  sinter setname1 setname2 :返回set1和set2中都存在的数据

  sunion setname1 setname2 :返回两个set中的所有元素并去重

  scard setname :返回set中元素的数量

  srandmember setname :随机返回set中的一个值(rand : rand)

  sdiffstore setname3 setname1 setname2 :将set1中存在但set2中不存在的数据存入到set3中(谨慎使用  若set3已存在,原有数据将会被删除

  sinterstore setname3 setname1 setname2 :将set1和set2中都存在的数据……   (谨慎使用 ……)

  sunionstore setname3 setname1 setname2 :把set1和set2中去重后的所有数据……   (谨慎使用 ……)

5.sorted set :

  zadd sortedsetname score1 value1 score2 value2 …… …… :设置name为sortedsetname的sortset的值以及值对应的分数

  zscore sortedsetname value :查询sortset中val = value的值对应的score

  zrem sortedsetname value1 value2 …… :删除sortset中的值(返回影响条数)

  zcard sortedsetname :返回sortset中元素的数量

  zrange sortedsetname int1 int2 :从左取值展示,取下标为 int1 至 int2 间的数据(int为负数时表示从右计算下标   /   按分数分数正序展示)

  zrange sortedsetname int1 int2 withscores :从左……取……的数据和分数(……   /   ……)

  zrevrange sortedsetname int1 int2 withscores :从左……取……的数据和分数(……   /   按分数倒序展示)

  zremrangebyrank sortedsetname int1 int2 :删除下标为int1至int2间的数据

  zremrangebyscore sortedsetname score1 score2 :删除分数score1至score2间的数据

  zrangebyscore sortedsetname score1 score2 :取分数为score1至score2之间的数据展示

  zrangebyscore sortedsetname score1 score2 withscores limit int1 int2 :取……之间的分数以及数据展示并limit int1 int2(包头不包尾)

  zincrby sortedsetname int value :将sortset中值为value的数据的分数➕int并返回更新后的score

  zcount sortedsetname score1 score2 :返回分数在score1至score2间的数据数量

6.redis keys的通用操作

  keys * :查询redis中所有的key

  keys string* :查询以string开头的key

  del keyname1 keyname2 :删除key以及key中的数据

  exists keyname :查询key是否存在,是则返回1、否返回0

  rename keyname newkeyname :重命名

  expire keyname int_time :设置key的过期时间,单位为秒

  ttl keyname :查询返回key还有多少秒过期

  type keyname :查询key的类型(string / hash / set / zset / list)

  flushall :清空数据库(慎用!)

二、redis的特性

1.redis数据库概念

  一个redis实例最多十六个数据库,下标分别为0 - 15。客户端连接的时候可以指定连接到哪一个数据库,默认连接到0

2.移动key到某个数据库

  move keyname xiabiao :下标必须是1 - 15,例:move string1 5(即将keyname为string1的key移动到6号数据库)

3.redis的事务

  可以使用multi   /   exec   /   discard来实现redis事务

    multi :开启事务

    exec :事务提交

    discard :事务回滚

三、redis的持久化

1.RDB持久化

  默认支持不需要开启

  在指定的时间内将数据写入磁盘

优势:

  整个redis的数据库将会只包含一个文件,一旦系统出现灾难性事件,将会非常容易恢复

  性能最大化

  如果redis数据集很大,RDB策略的启动效率会更高

劣势:

  无法保证数据安全性

2.AOF持久化

  需要配置开启

  以日志的形式持久化数据,在redis启动之初会先读取日志来重新构建数据库

  redis支持每秒同步、每修改同步、不同步三种策略

优势:

  可以带来更高的安全性

  有很好的策略来解决数据一致性的问题

  如果日志过大,redis会启动重写机制,以append模式不断将修改的数据写入老磁盘文件中,此期间进入redis的请求会被记录进一个新文件,保证数据的一致性和安全性

  可以通过日志文件来完成数据的重建

劣势:

  对于相同数量的数据集,aof生成的文件要比rdb生成的文件大一些

  运行效率低于RDB  

3.无持久化

  持久化可以关闭

4.同时使用RDB和AOF

  打开 aof 不关闭 rdb 就可以