redis基础和通用key操作
redis是什么?
redis开源的,构建于内存的数据结构的nosql数据库。常被用于数据存储,缓存处理和消息处理。
redis的优势?
1、极高的读写能力
2、丰富的数据类型
3、原子性操作
4、支持主从热备
redis的使用场景?
1、登录之后的会话存储,相较于使用memcached作为缓存数据库,数据更加安全
2、排行榜/计数器,比如一些秀场类的项目,常常会会有一些前多少名的主播排名,还有一些文章阅读量的技术,或者新浪微博的点赞数等
3、作为消息队列,比如celery就可以使用redis作为中间人
4、好友关系,微博的好友关系使用redis实现
redis键的基本操作命令:
1、keys pattern
功能:查询所有符合匹配模式的所有的键名
pattern支持glob风格的通配符格式,具体规则如下:
?:任意一个字符
*:任意个字符(包括0个)
[ae]:a或e中的一个字符
[^ae]:除了a和e的一个字符
[a-e]:a-e范围内的一个字符
[^a-e]:除了a-e的一个字符
[1-11]:1-11范围内的一个字符
[^1-11]:除了1-11的一个字符
返回值:返回所有符合匹配模式的所有的键名
exp:keys *
注意:keys命名需要遍历redis中的所有键以找到符合匹配模式的键,当键的数量而非常多的时候会影响性能,不建议在生产环境中使用。
2、exists key [key...]
功能:检查redis中给定的key键(一个、多个、重复)是否存在
返回值:因为key可以不存在也可以重复,返回这些key键在redis中存在的数量,当key重复时,返回值统计key的数量不会去重
exp:exists key1 key2 ...
3、SCAN cursor [MATCH pattern] [COUNT count]
功能:scan命令每次被调用是会返回新的游标cursor和本次执行命令列出的所有key,用户在下次迭代的时候可以使用新的游标cursor作为scan命令的游标参数,以此来延续之前的迭代过程,直到返回的新的cursor为0的时候,最终列出所有的符合pattern匹配模式的key。这种方式相较于使用keys pattern的方式查询key麻烦许多,但是当你的key非常多的时候,使用scan方式效率上明显会提升。
pattern的用法:与keys pattern命令中的pattern用法一致
count参数:代表本次扫描想要列出的key的个数,但是实际上会列出的key的个数并不一定会是count参数的值,这个参数是不精准的
返回值:遍历符合pattern的所有key数据,这些key可能会有重复,需要在客户端程序应用中进行判断
exp:sacn 0
sacn 0 match key?
scan 0 match key[1-8] count 5
4、randomkey
功能:随机返回redis数据库中的一个key
返回值:一个键名
exp:randomkey
5、type key
功能:查询一个key键的类型
返回值:如果key存在,返回存储在该键上数据的数据类型的表现形式,不同的类型共有string,list,set,zset,hash五种。如果key不存在,则返回none。
exp:type key1
6、object subcommand [arguments [arguments ...]]
功能:从内部查看给定key的redis对象(key所对应的具体对象)
subcommand子命令:
object refcount key:返回当前key对应的对象的引用次数
object idletime key:返回当前key对应的对象的空闲时间
object encoding key:返回当前key对应的对象的数据类型,如'int','quicklist','embstr'等等
返回值:refcount/idletime返回数字,encoding返回redis对象的编码类型
注意:如果某个对象的encoding为'int',并且这个对象的值在0-9999之间,那么他的refcount引用次数会一直为2147483647,而其他的类型或者不在该范围内的数据则会返回具体的引用次数。
exp: object refcount key1
object encoding key1
object idletime key1
7、rename key newkey
功能:给key重命名为newkey,如果newkey已经存在,则key所指向的数据会覆盖已存在的newkey的数据
返回值:1、成功则返回OK
2、如果被更名的key在redis中不存在,则会报错。
exp: rename username name
8、renamenx key newkey
功能:当且仅当newkey不存在时给key重命名为newkey
返回值:1、旧名称key在redis中不存在,则会报错
2、重命名成功则返回1
3、新名称newkey已经存在于redis中则返回0
exp: renamenx username name
9、touch key [key...]
功能:触碰一下key(可以为多个),把key的最后访问时间变为当前时间,当然这个对象的空闲时间就会变成0。
返回值:因为key可以不存在也可以重复,返回值为实际touch到的key的数量(key存在且重复不回去重数量)
exp:
touch username
object idletime username
10、del key [key...]
功能:删除key,可以是多个,属于阻塞式删除
返回值:如果key不存在,则返回零,如果多个key,则返回实际删除的key的个数,这里相较于exists和touch的返回值,如果key重复,在返回值计算数量时会去重返回
exp:del username
del key1 key2 username
11、unlink key [key...]
功能:删除key,可以是多个,属于非阻塞式删除,用法与del相同,但相对于del,效率更高
返回值:如果key不存在,则返回零,如果多个key,则返回实际删除的key的个数,这里相较于exists和touch的返回值,如果key重复,在返回值计算数量时会去重返回
exp:unlink username
unlink key1 key2 username
12、expire key seconds
功能:为给定的key设定多少秒后过期(如果该给定的key已经设置了过期时间,则为更改过期时间操作)。如果设置的seconds小于0等于0,则该键key立刻会被删除。
返回值:1、设置成功返回1
2、否则key不存在或者设置失败返回0
exp:expire age 60
13、expireat key timestamp
功能:为key设定具体的过期时间点,时间点为Unix时间戳
返回值:1、成功则返回1
2、当key不存在或者没办法设置过期时间则返回0
exp:expireat username 1600000000
14、pexpire key milliseconds
功能:与expire一致,只不过是值得数值为毫秒
返回值:1、设置成功返回1
2、当key不存在或者没办法设置过期时间则返回0
exp:pexpire age 60000
15、pexpireat key milliseconds-timestamp
功能:与pexpire功能一致,只不过设置的时间戳为毫秒级别
返回值:1、成功则返回1
2、当key不存在或者没办法设置过期时间则返回0
exp:pexpireat username 1600000000000
16、ttl key
功能:返回以秒为单位的key的剩余过期时间
返回值:1、当key不存在的时候,返回-2
2、当key存在但是没有设置过期时间,返回-1
3、否则,以秒为单位,返回key的剩余过期时间
exp:ttl username
17、pttl key
功能:与ttl一样,只不过返回的剩余过期时间是以毫秒为单位的值
18、persist key
功能:移除给定的key的生存时间,将这个key转换成持久的
返回值:1、移除成功返回1
2、key不存在或者未设置过期时间返回0
exp:persist age
19、dump key
功能:序列化给定的key并返回序列化的结果,便于传输等操作,序列化的结果不包含任何过期时间相关信息
返回值:1、如果成功则返回被序列化的结果(特殊格式的字符串)
2、如果key不存在则返回nil
exp: dump username
20、restore key ttl serialized-value [REPLACE]
功能:反序列化给定的序列化字符串,将得到的结果和给定的key关联,并且设置过期时长为以毫秒为单位的ttl(如果ttl为0则代表新生成的key永久有效)。如果key已经存在,此时如果使用replace则会覆盖原来的key,如果未使用replace,则会报错
返回值:1、如果成功则返回OK
2、给定的key已经存在,但是未使用replace参数,会报错
21、sort key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [ASC|DESC] [ALPHA] [STORE destination]
功能:返回或者保存给定的列表,集合,有序集合中经过排序的结果。排序默认以数字为对象,值被解释为双精度浮点数,然后进行比较
返回值:1、未使用store参数,则返回排序过后的列表形式的结果
2、如果使用了store参数,则把排序结果保存到给定的destination键里,并返回结果元素数量。如果destination为已经存在的key,则原来的key的内容将会被覆盖
exp:lpush nums 1 4 21 3 21 43 20
sort nums store newkey
sort nums desc store newkey limit 2 3
22、move key db
功能:相同实例之间的不同库之间的数据迁移,将当前数据库的key移动到指定数据库db当中。如果目标数据库存在该key,或者当前数据库不存在该key,那么move没有任何效果。注意这个操作是移动不是复制。
返回值:如果移动成功,则返回1。如果没有move效果,则返回0
exp:move username 1
23、migrate host port key| destination-db timeout [COPY] [REPLACE] [KEYS key]
功能:多个实例之间的数据迁移,将key原子性的从当前实例移动到目标实例的指定数据库上,一旦传送成功,则会保证key出现在目标实例指定的数据库上,而当前库中的key将被删除。timeout参数为以毫秒为单位的时间超时时间,如果超时则会传送失败。如果目标实例的指定库里面有该key,此时如果使用replace,目标实例上的该key将会被覆盖,否则将会传送失败。因为该操作是原子性的,他在执行的时候会阻塞正在迁移的两个实例直到发生以下时间,迁移成功,迁移失败,迁移超时。注意如果使用copy参数,则会是复制,原实例中的key将会被保留。如果没使用copy,则就是移动。
如果想要移动多个key,那么key参数可以传递一个' '占位,然后添加keys参数即可
exp:migrate 192.168.12.133 6379 username 0 2000 copy replace
migrate 192.168.12.133 6379 "" 0 3000 copy replace keys key1 key2 key3
24、flushdb
功能:把当前redis库的所有key删除
redis基础和通用key操作的更多相关文章
- Redis基础学习(三)—Key操作
一.key的相关操作 1.删除 del key1 key2 ... Keyn 作用: 删除1个或多个键. 返回值: 不存在的key忽略掉,返回真正删除的key的数量. 2.重命名 rename k ...
- Redis的通用key操作
这些操作跟具体的类型没有关系,而是跟key相关. 1.查询Redis中的key的名称: 所有key: 以my开头: 2.删除键: 3.判断某一个键是否存在: 4.重命名: 5.设置过期时间: 如果未设 ...
- redis的数据类型(一) key操作
redis是一个key-value形式的数据缓存,因此包括key和value. 一.key的说明 1.redis的key Redis的key是字符串类型,但是key中不能包括边界字符,由于ke ...
- redis 的使用 (基础, key操作, string类型操作)
使用redis set 类型: 没有重复元素 list 链表类型 有重复累型 sort set 类型 没有重复元素 1.1 存储数据 读取数据 // 数据储存在 内存中 set name laowen ...
- Redis 学习(一) —— 安装、通用key操作命令
一.Redis介绍 1.介绍 通常,在系统中,我们会把数据交由数据库来存储,但传统的数据库增删查改的性能较差,且比较复杂.根据 80/20 法则,百分之八十的业务访问集中在百分之二十的数据上.是否可以 ...
- Spring Data操作Redis时,发现key值出现 \xac\xed\x00\x05t\x00\tb
原文链接:http://blog.csdn.net/yunhaibin/article/details/9001198 最近在研究redis,以及spring data对redis的支持发现了一个奇怪 ...
- 【转】Redis 基础操作和命令
笔记 Redis提供了六种基本的数据结构:String,Hash,List,Set,Sorted Set,HyperLogLog. Redis的特点:纯内存操作,单线程工作模型,非阻塞I/O多路复用. ...
- 深度评测丨 GaussDB(for Redis) 大 Key 操作的影响
本文分享自华为云社区<墨天轮评测:GaussDB(for Redis)大Key操作的影响>,作者: 高斯 Redis 官方博客. 在前一篇文章<墨天轮评测:GaussDB(for R ...
- Redis Key操作
[Redis Key操作] 1.GETSET key value 将给定 key 的值设为 value ,并返回 key 的旧值(old value). 当 key 存在但不是字符串类型时,返回一个错 ...
随机推荐
- SQL里的concat() 以及group_concat() 函数的使用
实例参考:https://blog.csdn.net/mary19920410/article/details/76545053 一 concat()函数 1.功能:将多个字符串连接成一个字符串. 2 ...
- 开发一个c#的数据库连接池
c#操作数据库是一个经典,用习惯了以后真感觉不错,很简单的.现在很多关系数据库都支持c#.c#的ADO.NET规范都遵守. 对于一般的设置,ADO.NET都放在数据库连接字符串上.比如池化,连接超时等 ...
- [HAOI2007]上升序列(最长上升子序列)
题目描述 对于一个给定的 S=\{a_1,a_2,a_3,…,a_n\}S={a1,a2,a3,…,an} ,若有 P=\{a_{x_1},a_{x_2},a_{x_3},…,a_{x_m}\ ...
- 滑动窗口(poj,线段树维护区间最值)
题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值. 例如: The array i ...
- haproxy+keepalived主备与双主模式配置
Haproxy+Keepalived主备模式 主备节点设置 主备节点上各安装配置haproxy,配置内容且要相同 global log 127.0.0.1 local2 chroot /var/lib ...
- LeetCode 删除链表倒数第N个节点
基本思路 定义两个指示指针a b 让a先行移动n+1个位置 若a指向了NULL的位置,则删除的是头节点(由于走过了n+1个节点刚好指在尾部的NULL上) 否则让b与a一起移动直至a->next, ...
- 一个好用的C# HttpCookieHelper.cs类
using System; using System.Collections.Generic; using System.Text; using System.Text.RegularExpressi ...
- Yaf学习(二)----Yaf初体验
1.hello world 1.1 用yaf输出hello world 1.首先配置host,nginx 2.host不用多说,指向虚拟机IP即可 1.2 重点说一下nginx (只说server块) ...
- Manacher(马拉车)学习笔记
Manacher可以有效的在\(O(n)\)时间内解决一个字符串的回文子串的题目 目录 简介 讲解 推介 简单的练习 恐怖的练习QAQ 小结 简介 开头都说了,Manacher是目前解决回文子串的最有 ...
- C++远征之封装篇(下)-学习笔记
C++远征之封装篇(下) c++封装概述 下半篇依然围绕类 & 对象进行展开 将原本学过的简单元素融合成复杂的新知识点. 对象 + 数据成员 = 对象成员(对象作为数据成员) 对象 + 数组 ...