Redis学习 (一)数据结构基本使用

2021/7/26 19:06:05

本文主要是介绍Redis学习 (一)数据结构基本使用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

目录

    • 单线程和多路 I/O 复用模型
    • 数据结构
    • 基本命令
      • 1. 查看所有键
      • 2.键总数
      • 3.检查键是否存在
      • 4.删除键
      • 5.设置过期时间
      • 6. 查看剩余过期时间
      • 7.查看类型
    • 五种类型的存储与获取
      • string
      • hash
      • list
      • set
      • zset

单线程和多路 I/O 复用模型

redis是单线程:对于命令的处理是单线程的,也就是说,多个命令到来,会排成队列,逐条处理。单线程省去了很多上下文切换线程的时间,并且排除了并发操作的锁操作,所以号称速度快,redis的瓶颈一般不是cpu而是网络和内存。
多路 I/O 复用模型:“多路”指的是多个网络连接,“复用”指的是复用同一个线程。多路复用主要有三种技术:select,poll,epoll。redis采用的epoll是目前最新最好的多路复用技术。

数据结构

redis是内存型数据库,存储的全都是key-value键值对,其中key一定为string字符串类型,value则有五种类型。
redis对外一共提供5种数据类型

  • string(字符串)
  • hash(哈希 field-value)
  • list(有序列表)
  • set(集合)
  • zset(有序集合)

redis实现上述数据结构实际上还有一套内部编码,比如字符串的内部编码embstr,列表的内部编码ziplist.

基本命令

1. 查看所有键

keys *
在这里插入图片描述

2.键总数

dbsize
在这里插入图片描述

dbsize直接获取键总数这个变量,时间复杂度O(1),keys是遍历一遍所有键,时间复杂度O(n),所以redis保存大量键时尽量不要使用keys

3.检查键是否存在

exists <keyName>
在这里插入图片描述

4.删除键

del <key> [key] 可以删除一个也可以空格分隔键批量删除
在这里插入图片描述

5.设置过期时间

expire <keyName> <seconds> 参数是键名和秒数,如下方设置为10秒
在这里插入图片描述
过了10秒之后
在这里插入图片描述

6. 查看剩余过期时间

ttl <keyName>
返回值有三种情况:

  1. 大于零 —剩余的秒钟数
  2. -1 —存在键,但未设置过期时间
  3. -2 —不存在键

7.查看类型

type <keyName> 返回值的数据类型,键不存在则返回none

五种类型的存储与获取

以下记录常用的命令,官方有所有指令的中文介绍,更全更详细,推荐查阅redis命令中文文档http://www.redis.cn/commands.html#

string

  • 单值操作指令
    set <keyName> <value> [EX seconds] [PX milliseconds] [nx|xx] [get] 设置键,不存在则新增,存在则修改
    get <keyName> 查看键
    在这里插入图片描述
	set命令有几个选项:
		* ex ---秒级过期时间
		* px ---毫秒级过期时间
		* nx|xx:
			* nx ---键必须不存在才可以设置成功(新增,等价于setex)  
			* xx ---键必须存在才可以设置成功(更新,等价于setnx)
		* get ---回显修改前的值(等价于getset)
  • 批量操作指令
    mset key value [key value ...] —批量设置
    mget key [key ...] —批量获取

批量操作和批量单独操作对于redis处理的影响不大,但是网络请求是异步的,所以批量单独操作请求不如批量操作请求效率高,当然如果一次批量操作过大也会造成网络阻塞甚至redis阻塞

  • 其他指令
1. incr key ---对值自增,返回自增后结果,若键不存在按0自增。类似的还有decr自减、incrby指定数字自增、decrby指定数字自减、incrbyfloat指定浮点数自增
2. append key value ---向字符串末尾追加值
3. strlen key ---返回字符串长度
4. setrange key offeset value ---将offeset位置的字符替换成value的值

hash

哈希类型和redis的key-value结构一样,为区分在使用hash类型的时候用field-value来表示哈希数据的一个键值对:
{ field1:value1 , field2:value2 , ... ,fieldN:valueN}

  • 指令
    hset key field value —设置值
    hmset key field value [ field value ... ] —批量设置值
    hget key field —获取值的某字段值
    hmget key field [field ...] —批量获取值的某字段值
    hdel key field [field ...] 删除值的某字段
    hlen key —获取键值的对数
    hexists key field —判断field是否存在
    hkeys key —虽然指令叫hkeys,实际获取的是所有field
    hvals key —获取所有value

list

redis列表模型是一个横置的列表,从左到右的下标是0到N-1,从右到左的下标是-1到-N

  • 指令
  1. rpush key value [value ...] / lpush key value [value ...] 从右/左插入(压栈)
  2. linsert key BEFORE|AFTER pivot element 在pivot位置的前/后插入元素element
  3. lrange key start end 查找start到end区间的元素,注意这里是左闭右闭!
  4. lindex key index 获取指定下标元素
  5. llen key 获取长度
  6. lpop key / rpop key删除左/右端的第一个元素(从左/右出栈)
  7. lrem key count value
    * count>0,从左到右,删除count个值为value的元素
    * count<0,从右到左,删除count个值为value的元素
    * count=0,删除所有值为value的元素
  8. lterm key start end 只保留start到end区间的元素,左闭右闭
  9. lset key index newValue 修改指定下标元素

set

集合是无序不重复的列表 ,在普通增删改查的基础上,还有并交差补的操作,很方便

  1. 增删改查
  • sadd key element [element ...] 添加
  • srem key element [element ...] 删除
  • scard key 获取集合长度
  • sismember key element是否存在元素
  • smembers key无序获取所有元素
  1. 并交差补
  • sinter key [key ...] 返回多个集合交集
  • suion key [key ...] 返回多个集合并集
  • sdiff key [key ...] 返回多个集合差集
  • 并没有补集…
  1. 并交差保存
  • sinterstore destinationKey [key ...] 将多个集合交集保存在destinationKey
  • suionstore destinationKey [key ...] 将多个集合并集保存在destinationKey
  • sdiffstore destinationKey [key ...] 将多个集合差集保存在destinationKey

zset

有序不重复的列表,排序方式是维护了一个 score分数表,为每一个元素保存一个score,作为排序的依据。

  1. 增删改查
  • zadd key score element [score element...] 添加element ,score是该元素的分数
   zadd 命令有几个选项:
   	* nx|xx:
   		* nx ---member必须不存在才可以设置成功(新增)  
   		* xx --member必须存在才可以设置成功(更新)
   	* ch ---changed ,元素和分数变化的个数
   	* incr ---对score增加,相当于zincrby
  • zrem key element [element ...] 删除
  • zcard key 获取集合长度
  • zscore key member 获取某成员的排序分数
  • zrank key member 返回某成员排名(按score从低到高)
  • zrevrank key member 返回某成员排名(按score从高到低)
  • zincrby key increment member 为某member增加increment排序分数
  • zrange key start end [withscores] 返回排名start到end之间的成员(按score从低到高,左闭右闭)
  • zrevrange key start end [withscores] 返回排名start到end之间的成员(按score从高到低,左闭右闭)


这篇关于Redis学习 (一)数据结构基本使用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程