redis以及它的特点与简单用法

Redis是什么

Redis 是一种基于键值对的NoSQL数据库,Redis的值可以是string、hash、list、set、zset、Bitmaps(位图)、HyperLogLog、GEO(地理信息定位)等多种数据结构与算法组成。所以Redis可以满足多种应用场景,且Redis是将所有的数据放在内存中,所以它的读写能力十分惊人。除此之外,Redis还提供了RDB与AOF两种持久化策略。防止在意外情况下redis中的重要数据“丢失”,Redis还提供了key过期、发布订阅、事务、流水线、Lua脚本等附加功能。在合适的场景使用它会极大的提高性能。

Redis的特性

  1. Redis的最大的特性就是速度快。这是因为它将所有的数据放在了内存中,在内存中redis的相应速度大约为100ns,官方给出的读写性能可达到10万/秒。当然这也取决于机器性能。Redis是用C语言实现距离操作系统十分近,执行速度相对较快,且redis的单线程架构预防了多线程的竞争问题。
  2. redis是基于键值对的数据结构服务器
  3. 有着丰富的功能(key过期、发布订阅、Lua脚本、流水线、事务等)
  4. 简单稳定。redis的源码很少且使用单线程模型,使得redis十分简单。虽然简单但是它十分稳定。
  5. 支持redis的语言多
  6. 拥有持久化策略
  7. 主从复制
  8. 高可用和分布式。redis从3.0开始提供了分布式实现redis cluster ,提供了高可用、读写和容量的扩展性。

Redis支持的数据类型

  1. 字符串类型(string)
    字符串类型是Redis最基础的数据结构,其他集中数据结构都是再此基础上构建的。字符串类型的值可以是字符串(简单的字符串、复杂的字符串)、数字、甚至二进制等。但是它的值最大不超过512mb。
  2. 哈希(hash)
    几乎所有的编程语言都提供了哈希(hash)类型,它们的叫法可能是哈希、字典、关联数组。它是一个键值对结构每一个key里面都有多个field-value
  3. 列表(list)
    list是用来存储多个有序的字符串,list中每个字符串被称为元素,一个list最多可以存储2^32-1个元素。在Redis中可以对列表两端插入(push)和弹出(pop)。这是一种比较灵活的数据结构,可以充当栈和队列的角色。
  4. 集合(set)
    集合也是用来存储多个的字符串元素,但和列表不同,它不允许存在重复的元素。并且集合中的元素是无序的,不能通过索引下标获取元素。Redis支持集合内的增删改查也支持集合间的取交集、并集、差集。
  5. 有序集合(zset)
    有序集合相比较于哈希、列表、集合,它不仅有集合不存在重复元素的特性且可以排序。它的排序规则是依据它给每个元素设置的分数。
数据结构是否允许重复元素是否有序有序实现方式
列表索引下标
集合
有序集合分值

Redis的基本命令

对key的操作

  • keys [pattern] 获取当前redis中的key。它的参数支持正则表达式。例如:使用keys * 表示获取当前所有的key,它的时间复杂度是O(n),所以在实际生产中结合实际要慎重使用。也可以使用keys stu* 表示获取以stu开头的所有key
  • del key1,key2,… 删除key,可以一次删除多个key,返回的结果是删除的key的个数。
  • exists key1 key2 … 判断key是否存在,可以一次传入多个key存在几个返回相应的个数
  • rename key newkey 对key进行重命名。需要注意的是redis是将旧key删除,再重新加入新key
  • randomkey 随机返回一个key
  • expire key seconds 对key设置过期时间单位为秒
  • expireat key timestamp 对key设置过期时间单位为秒级时间戳
  • ttl key 查看key的剩余过期时间,key不存在返回-2.永不过期返回-1
  • pttl key 查看key的过期时间,单位为毫秒级
  • pexpire key milliseconds 给key设置过期时间 单位为毫秒
  • pexpireat key milliseconds-timestamp key在毫秒级时间戳后过期
  • persist key 将key的过期时间清除
    在对key设置过期时间时候,如果key不存在返回0,如果过期时间为负值则key会立刻被删除。对于字符串类型的key,执行set命令会去掉过期时间。

字符串的操作

  • set key value [expiration EX seconds | PX milliseconds] [NX|XX] 例如,set hello word set的几个参数:EX seconds | PX milliseconds 设置过期时间,ex为秒,px为毫秒级。nx必须key不存在才可以添加成功,xx与其相反
  • setex | setnx key value 与上述中的EX XX类似
  • get key 用于获取值。例如 get hello 则会得到word 如果key不存在则返回nil(空)
  • mset key1 value1 key2 value2… 批量设置key
  • mget key1 key2 … 批量获取key的value
  • incr key 对key的value自增。它的返回分为三种情况,如果value不是整数则返回错误。值是整数则返回自增后的结果,key不存在按照0自增,返回1.
  • decr key 与自增相应的,decr的作用是自减
  • incrby | decrby key increment | decrement 增加或减少指定的数
  • incrbyfloat key increment 自增浮点数
  • append key value 在key对应的value的尾部增加指定的字符串
  • strlen key 获取key对应的value的长度
  • getset key value 它的作用与set一样,可以设置key的value,不同的是他可以返回key原来的值。例如:getset hello word (没有值的时候)返回nil,在执行getset getset hello redis 返回word
  • setranage key offeset value 设置offeset位置的值。例如:set redis rest在执行setrange redis 0 b 那么redis的value就会变成best
  • getrange key start end 获取key从start位置开始到end结束对应的value 的字符串

对hash的操作

  • hset key field value 一个key对应一个或者多个field-value键值对,设置成功返回1,hsetnx与setnx类似,不同的地方在于哈希的作用域为field
  • hget key field 获取key下的field对应的value
  • hdel key field 删除key中的field
  • hlen key 计算key中field的个数
  • hmget | hmset key field | field1 value1 field2 value2… 批量获取|设置field的value
  • hexists key field 判断field是否存在
  • hkeys key 获取key下的所有的field
  • hvals key 获取key下所有的value
  • hgetall key 获取key下所有的field-value
  • hincrby | hincrbyfloat key field 与incrby和incrbyfloat命令一样,但哈希的作用范围是field对应的value
  • hstrlen key field 计算field对应的vlaue的长度

对list的操作

  • rpush key value [value2 value3…] 从右侧插入元素,一次可以插入多个元素
  • lpush key value [value2 value3 …] 从左侧插入元素,可一次插入多个元素
  • linsert key before | after pivot value 该命令会在list中找到等于pivot的元素,并在它的前(before)或者后(after)插入一个新的元素value
  • lrange key start end 从左到右获取list下表从start(包含)到end(包含)的所有元素
  • lindex key index 获取key对应的list的index位置的元素
  • llen key 获取key对应的list的长度
  • lpop key 从列表的左侧弹出元素
  • rpop key 从列表的右侧弹出元素
  • lrem key count vlaue 该命令会从列表中找到等于value的元素进行删除, count>0从左到右删除最多count个元素,count<0 从右到左删除最多count绝对值个元素,count =0 删除所有
  • ltrim key start end 保留从start 到end的元素其他的会被删除
  • lset key index newValue 将列表中index位置的元素替换为newValue
  • blpop | brpop key [key1 …] timeout 阻塞式操作。timeout为阻塞时间,列表为空的时候timeout为0则会一直等下去,否者等待timeout秒后结束,期间加入新元素则立即返回。列表不为空会立即返回
    list的这种结构十分适用于栈 与队列

对set的操作

  • sadd key element [element1,element2 …] 向集合中增加一个或多个元素,返回结果为添加成功的元素个数
  • srem key element [element 2, element 3 …] 从集合中删除元素,返回结果为删除成功的元素个数
  • scard key 计算key对应的集合有多少个元素
  • sismember key emement 判断该元素是否在集合中,如果在,则返回1,否者返回0
  • srandmember key [count] 随机从集合中获取count个元素,默认是1
  • spop key [count] 随机从集合中弹出count个元素,默认为1。 从redis 3.2版本开始,支持count参数。
  • smembers key 获取所有的元素
  • sinter key [key2 key3 …] 求多个集合的交集
  • sunion key [key2 key3 …] 求多个集合的并集
  • sdiff key [key2 key3 …] 求多个集合的差集

对zset的操作

  • zadd key score member [score member sore member …] 像有序集合添加成员与它对应的score
  • zcard key 计算成员的个数
  • zscore key member 计算某个成员的分数,如果成员不存在则返回nil
  • zrank | zrevrank key member 从分数从低到高(zrank)或从高到低(zrevrank)返回排名
  • zrem key member [member2 mermber3 …] 删除成员
  • zincrby key increment member 给成员增加分数
  • zrange | zrevrange key start end [withscores] 返回指定排名范围的成员,从低到高或从高到低,如果有withscores参数,则同时返回分数
  • [zrangebyscore | zrevrangebyscore] key [min | max] [max | min] [withscores] [limite offset count] 按照分数从低到高或者从高到低返回min到max 或 max到min ,的成员 withscores返回成员分数,limit offset count可以限制输出的起始位置和个数。
  • zcount key min max 返回指定分数范围的成员个数、
  • zremrangebyrank key start end 删除指定排名内的升序元素
  • zremrangebyscore key min max 删除从 min 到max 分数范围内的成员
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值