1.常用命令

命令 说明 返回值 时间复杂度
keys */[pattern] 遍历所有符合条件的key,一般不在生产环境使用 所有key O(n)
dbsize 计算key的总数 n O(1)
exists key 判断一个key是否存在 0、1 O(1)
del key [key...] 删除指定的key-value 0、1 O(1)
expire key seconds 指定key在seconds秒后过期 0、1 O(1)
ttl key 查询key剩余的过期时间 剩余时间(返回-2表示key已经被删除了,-1表示不过期) O(1)
persist key 去掉key的过期时间 0、1 O(1)
type key 查询key的类型 string、hash、list、set、zset、none O(1)

2.单线程Redis为什么这么快?

  • 纯内存
  • 非阻塞IO
  • 单线程避免了线程切换和竞态消耗

单线程要注意:

  • 一次只能运行一条命令
  • 拒绝长(慢)命令:keys、flushall、flushdb、slow lua script、mutil/exec、operate big value

2.数据类型

string类型

字符串是Redis中最常用的类型,是一个由字节组成的序列,它在Redis中是二进制安全的,该类型可以接受任何格式的数据。value最多可以容纳的数据长度为512MB。

使用场景:

  • 缓存
  • 计数器
  • 分布式锁
  • 分布式id生成

常用命令:

命令 说明 例子
get key 获取key的值 get name
mget key1 key2 ... 批量获取key1、key2的值 mget name age
set key value 设置key的值为value,不管key是否存在都设置 set name mike
setnx key value 设置key的值为value,key不存在才设置 setnx name mike
set key value xx 设置key的值为value,key存在才设置 setxx name mike xx
mset key1 value1 key2 value2 ... 批量设置key1的值为value1,key2的值为value2... mset name lucy age 10
del key 删除key del name
incr key key的值加1 incr age
decr key key的值减1 decr age
incrby key k key的值加k incrby age 10
decrby key k key的值减k decrby age 10
getset key newvalue set key newvalue并返回旧的value getset name alice
append key value 将value追加到旧的value append name hh
strlen key 获取key的字符串长度(注意中文) strlen name
incrbyfloat key f 为key的值增加f,用于浮点数据 incrbyfloat monery 9.9
getrange key start end 获取字符串指定下标所有的值 getrange name 1 2
setrange key index value 设置指定下标所有对应的值 setrange name 1 aa

hash类型

一个key中存在多个map。Redis中的hash可以看成具有String key和String value的map容器,可以将多个key-value存储到一个key中。每一个Hash可以存储4294967295个键值对

使用场景:

  • 存储用户信息

常用命令:

命令 说明 例子
hget key field 获取hash key下的field的value hget user name
hset key field value 设置hash key下的field的的值为value hset user name zhangsan
hdel key field 删除hash key下的field hdel user name
hexists key field 判断hash key下的field是否存在 hexists user name
hlen key 获取hash key下的field数量 hlen user
hmget key field1 field2 ... 批量获取hash key下的field1、field2的值 hmget user name age
hmset key field1 value1 field2 value2 ... 批量设置hash key下的field1值为value、field2值为value2 hmset user age 20 phone 15000000000
hgetall key 获取hash key下的所有field和value hgetall user
hvals key 获取hash key下的所有field的value hvals user
hkeys key 获取hash key下的所有field hkeys user
hsetnx key field value 设置hash key下的field的的值为value(如果field存在则不设置) hsetnx user name lisi
hincrby key field n 设置hash key下的field的的值加n hincrby user age 10
hincrbyfloat key field f 设置hash key下的field的的值加f(浮点数版) hincrbyfloat user balance 9.9

list(列表)类型

Redis的列表是有序的,允许用户从序列的两端推入或者弹出元素,列表由多个字符串值组成的有序可重复的序列,是链表结构,所以向列表两端添加元素的时间复杂度为0(1),获取越接近两端的元素速度就越快。这意味着即使是一个有几千万个元素的列表,获取头部或尾部的10条记录也是极快的。List中可以包含的最大元素数量是4294967295

使用场景:

  • 微博最新消息排行榜
  • 简单的消息队列

常用命令:

命令 说明 例子 结果
lpush key value1 value2 ... 从列表左端插入值 lpush list1 c b a abc
rpush key value1 value2 ... 从列表右端插入值 rpush list2 a b c abc
linsert key before|after value newValue 在指定的值前|后插入newValue linsert list after a A a b c d => a A b c d
lpop key 从列表左侧弹出一个item lpop list1 a
rpop key 从列表右侧弹出一个item rpop list2 c
lrem key count value 根据count值,从列表中删除所有value相等的项
1.count>0,从左到右,删除最多count个value相等的项
2.count<0,从右到左,删除最多Math.abs(count)个value相等的项
3.count=0,删除所有value相等的项
lrem list 2 a
lrem list -2 a
lrem list 0 a
a b a c a d => b c a d
a b a c a d => a b c d
a b a c a d => b c d
ltrim key start end 按照索引范围修剪列表 ltrim list 1 4 a b c d e f => b c d e
lrange key start end 获取列表指定索引范围内的项(包含end) lrange list 0 1 a b c d e f => a b
lindex key index 获取列表指定索引的的项 lindex list 1 a b c d => b
llen key 获取列表的长度 llen list a b c d => 4
lset key index newValue 设置列表指定索引的值为newValue lset list 2 x a b c d => a b x d
blpop key timeout lpop的阻塞版本,timeout是阻塞超时时间,timeout=0为永远不阻塞,如果列表中没有值他会一直等待一个新的值插入 blpop list 100
brpop key timeout rpop的阻塞版本,timeout是阻塞超时时间,timeout=0为永远不阻塞,如果列表中没有值他会一直等待一个新的值插入 brpop list 100

注意:

  • lpush + lpop = Stack (实现一个栈的功能)
  • lpush + rpop = Queue (实现一个队列功能)
  • lpush + ltrim = Capped Collection (实现有固定数量的列表)
  • lpush + brpop = Message Queue (实现消息队列)

set(集合)类型

Redis的集合是无序不可重复的。和列表一样,在执行插入和删除以及判断是否存在某元素时,效率是很高的。集合最大的优势在于可以进行交集并集差集操作。Set可包含的最大元素数量是4294967295

使用场景:

  • 使用交集求共同好友
  • 类似微博好友推荐,可以根据tag求交集
  • 利用唯一性,可以统计访问网站的所有独立IP

常用命令:

命令 说明 例子 结果
sadd key element 向集合中添加element(可以是多个,如果element已存在,则会添加失败) sadd set a b c a b c
srem key element 将集合key中的element删除 srem set a a b c => d c
scard key 计算集合大小 scard set a b c => 3
sismember key value 判断value是否在集合key中存在 sismember set a a b c => 1
srandmember key [count] 从集合中随机挑选count个元素,默认为1,不会破坏集合 srandmember key a b c => b
spop key [count] 从集合中随机弹出count个元素,默认为1,会将元素从集合中删除 spop set a b c => a c
smembers key 获取集合中所有元素 smembers set a b c => c a b
sdiff key1 key2 获取key1、key2的差集 sdiff set1 set2 a b c d e,a d e f g => c b
sinter key1 key2 获取key1、key2的交集 sinter set1 set2 a b c d e,a d e f g => a d e
sunion key1 key2 获取key1、key2的并集 sunion set1 set2 a b c d e,a d e f g => a b c d e f g

zset(有序集合)类型

有序集合有顺序,不能重复。元素不能重复,score可以重复。

和Set很像,都是集合,都不允许出现重复的元素。

和Set之间差别在于有序集合中每一个成员都会有一个分数(score)与之关联,Redis正是通过分数来为集合中的成员进行从小到大的排序。尽管有序集合中的成员必须是卫衣的,但是分数(score)却可以重复

使用场景:

  • 各种游戏排行榜、音乐排行榜等

常用命令:

命令 说明 例子 结果
zadd key score1 element1 score2 element2 ... 向有序集合中添加score和element(score可重复,element不可重复) zadd zset 10 a 20 b
zrem key element1 element2 ... 删除元素 zrem zset a b
zscore key element 返回元素element的分数 zscore zset a 10
zincrby key increScore element 将元素element的score增加increScore zincrby zset 10 a 20
zcard key 返回元素的总个数 zcard zset a b => 2
zrank key element 获取元素element的排名 zrank zset a
zrange key start end [withscores] 返回指定索引范围内的升序元素(根据score) zrange zset 0 100 withscores
zrangebyscore key minScore maxScore [withscores] 获取指定分数范围内的升序元素(根据score) zrangebyscore zset 50 100 withscores
zcount key minScore maxScore 获取在指定分数范围内的元素个数 zcount zset 60 100 2
zremrangebyrank key start end 删除指定排名内的升序元素 zremrangebyrank zset 0 1 剩下a c
zremrangebyscore key minScore maxScore 删除指定分数内的升序元素 zremrangebyscore zset 0 50 剩余a c
zrevrank key element 与zrank相反,获取从高到低的排名
zrevrange key start end [withscores] 与zrange相反,返回从高到低的分数排名
zrangebyscore key minScore maxScore [withscores] 与zrangebyscore相反,返回指定分数范围内从高到低的排名
zinterstore key1 key2 计算两个集合交集
zunionstore key1 key2 计算两个集合并集

Redis学习2:Redis的数据类型和常用操作的更多相关文章

  1. redis学习 (key)键,Python操作redis 键 (二)

    # -*- coding: utf-8 -*- import redis #这个redis 连接不能用,请根据自己的需要修改 r =redis.Redis(host=") 1. delete ...

  2. Python【第二篇】运算符及优先级、数据类型及常用操作、深浅拷贝

    一.运算符及优先级 Python 运算符(算术运算.比较运算.赋值运算.逻辑运算.成员运算) 1.算数运算符 运算符 描述 实例,a=20,b=10 + 加 a+b输出结果30 - 减 a-b输出结果 ...

  3. Redis学习笔记--五种数据类型的使用场景

    String 1.String 常用命令: 除了get.set.incr.decr mget等操作外,Redis还提供了下面一些操作: 获取字符串长度 往字符串append内容 设置和获取字符串的某一 ...

  4. Redis五大数据类型的常用操作

    在上一篇博文<centos安装redis>中,已经详细介绍了如何在centos上安装redis,今天主要介绍下Redis五大数据类型及其五大数据类型的相关操作. Redis支持五种数据类型 ...

  5. redis学习之——redis.conf配置(基本)文件学习

    # Redis configuration file example # Note on units: when memory size is needed, it is possible to sp ...

  6. Redis学习笔记~Redis主从服务器,读写分离

    回到目录 Redis这个Nosql的存储系统一般会被部署到linux系统中,我们可以把它当成是一个数据服务器,对于并发理大时,我们会使用多台服务器充当Redis服务器,这时,各个Redis之间也是分布 ...

  7. redis学习笔记-redis的安装

    Window 下安装 下载地址:https://github.com/MSOpenTech/redis/releases Redis 支持 32 位和 64 位.这个需要根据你系统平台的实际情况选择, ...

  8. Redis学习笔记-Redis内部数据结构

    Redis内部数据结构 Redis和其他key-value数据库的很大区别是它支持非字符串类型的value值.它支持的value值的类型如下: sds (simple dynamic string) ...

  9. python的字典数据类型及常用操作

    字典的定义与特性 字典是Python语言中唯一的映射类型. 定义:{key1: value1, key2: value2} 1.键与值用冒号“:”分开: 2.项与项用逗号“,”分开: 特性: 1.ke ...

  10. python的列表数据类型及常用操作

    列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现. 列表中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推. 列表可以进行的操作包括索 ...

随机推荐

  1. Python精选库大全,建议收藏留用!

    Python为啥这么火,这么多人学,就是因为简单好学,功能强大,整个社区非常活跃,资料很多.而且这语言涉及了方方面面,比如自动化测试,运维,爬虫,数据分析,机器学习,金融领域,后端开发,云计算,游戏开 ...

  2. 打破你的认知!Java空指针居然还能这样玩,90%人不知道…

    相信在座的各位都遇到过空指针异常,不甚其烦,本文不是教你避免空指针,而是一些对空指针其他方面的理解. 本文可能有点另类,也可能会打破你对空指针的认知. 1.null.method() 空指针? 我们知 ...

  3. JS DOM笔记

    js的组成     ECMAScript:JS的语法     DOM:页面文档对象模型     BOM:浏览器对象模型     web APIs     是浏览器提供的一套操作浏览器功能和页面元素的A ...

  4. Bytom DAPP 开发流程

    从目前已经发布的DAPP来看,DAPP架构大致可以分成3种类型:插件钱包模式.全节点钱包模式和兼容模式. 插件钱包模式是借助封装了钱包的浏览器插件通过RPC协议与区块链节点通信,插件在运行时会将Web ...

  5. C#LeetCode刷题之#172-阶乘后的零(Factorial Trailing Zeroes)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3854 访问. 给定一个整数 n,返回 n! 结果尾数中零的数量. ...

  6. Vue 事件的$event参数=事件的值

    template <el-table :data="dataList"> <el-table-column label="id" prop=& ...

  7. Kafka2.6.0发布——性能大幅提升

    近日Kafka2.6版本发布,距离2.5.0发布只过去了不到四个月的时间. Kafka 2.6.0包含许多重要的新功能.以下是一些重要更改的摘要: 默认情况下,已为Java 11或更高版本启用TLSv ...

  8. Vuex + localStorage + html实现简易todolist

    1.项目结构 2.Vuex,什么是Vuex? 官方文档上的介绍是:Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种 ...

  9. jQuery的小测试

    1.在div元素中,包含了一个<span>元素,通过has选择器获取<div>元素中的<span>元素的语法是? $('div:has(span)'); 2.在&l ...

  10. 《MySQL必知必会》过滤数据,数据过滤(where ,in ,null ,not)

    <MySQL必知必会>过滤数据,数据过滤 1.过滤数据 1.1 使用 where 子句 在SEL ECT语句中,数据根据WHERE子句中指定的搜索条件进行过滤. WHERE子句在表名(FR ...