redis学习2-- API命令

1 通用命令

  keys *,和dbsize

   dbsize不会遍历所有键,时间复杂度是O(1) ,只是查询了redis内置key长度计算器

   keys *会去遍历所有键,时间复杂度是O(n),线上禁止使用这个命令

  exists key(检查键是否存在),

  del key...(删除键),

  expire key seconds(键过期),ttl 命令可以查看剩余时间,返回 大于 0的整数代表剩余的时间,-1 键未设置过期时间,-2键不存在

  type key 获取键的类型 返回5种对外的键类型,其实内部是有自己的编码的,

2 单线程架构

  redis是单线程的,假设我们三个客户端向redis服务端发送命令,服务端是将这三个命令加入到一个队列里面,然后挨个执行,是串行执行的,所以不会有并发问题。redis高速的原因主要是纯内存访问,内存反应速度快,另外避免了多线程切换所带来的消耗,其次是非阻塞IO,epoll多路复用IO模型的实现。

扫描二维码关注公众号,回复: 3052231 查看本文章

3 字符串类型  String

  首先,所有的键都是字符串类型的,字符串作为值时,既可以是简单字符串,也可以是JSON字符串,XML字符串,数字(以字符串存储,但是可以做算术运算如:incr命令),

  set,  setnx,  setxx  

  set 命令很简单,就是设置一个值,设置之前key存在就更新,不存在就添加,

  setnx 键不存在才可以设置,用于添加场景,可实现分布式锁,具体查看 http://redis.io/topics/dislocak

  setxx 键存在才可以设置,用于更新场景, 

  

  mset:mset a 1 b 2 c 3

  mget:mget a b c  如果不存在,会在相应位置返回空

  

  普通get时间 = n次网络时间+n次命令时间

  批量get = 1 次网络时间+n次命令时间

  批量get ,有助于提高效率

  append:追加命令,用于在字符串尾部追加值.

  getset:设置并返回原来的值

 字符串类型典型使用场景

  1 缓存

    用户请求先从redis缓存中查找。如果找到则直接返回,如果未找到,则从数据库找, 并且将结果设置到redis中

  2 计数

    使用incr自增计数,可以实现高效计数

  3 session共享

    将用户登录信息存入redis,集中管理,保证redis高可用即可,解决了服务器集群session不共享的问题

  4 限速

    比如实现对手机号码进行 一分钟之内只能发5次验证码的限制。

    setex 135********:limit  60 1 设置手机号一分钟内发送的次数,

    setex 135***06557 60*5 123456 设置手机号(5分钟内有效)

    这样就对手机号设置了一分钟内访问5次的限制

4 哈希 hash

  

  注意一下hash和字符串的结构区别,

  hset key1 name '张三'  hset key1 name '张三' age 18

  hget key1 name   hget key1 name  age

  命令和String 很相似,其他不再赘述。

hash的使用场景

  我去

猜你喜欢

转载自www.cnblogs.com/tjqBlog/p/9579822.html