导航:首页 > 程序命令 > redis删除命令

redis删除命令

发布时间:2022-01-16 11:10:48

php redis 怎么删除hash,而不是只删除了单个或多个域

//删除单个实体
$redis->hDel('hashkey','key1');

//删除整个hash
$redis->del('hashkey');


删除一个redis的key都是用del方法, 不管是string,hash,list,set等类型, 都一样

Ⅱ 如何批量删除Redis下特定pattern的keys

批量删除Redis下特定pattern的keys:
可以使用linux的xargs来做到,如:
*/redis-cli keys "prefix*"
如果是访问特定的数据库,则可以:
*/redis-cli -n 0 keys "prefix*"
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。
redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

Ⅲ 在不影响性能的情况下,怎么快速批量删除redis数据

Redis在分布式应用中占据着越来越重要的地位,短短的几万行代码,实现了一个高性能的数据存储服务。最近mp中心的cm8集群出现过几次redis超时的情况,但是查看redis机器的相关内存都没有发现内存不够,或者内存发生交换的情况,查看redis源码之后,发现在某些情况下redis会出现超时的状况,相关细节如下。
1. 网络。Redis的处理与网络息息相关,如果网络出现闪断则容易发生redis超时的状况。如果出现这种状况首先应查看redis机器网络带宽信息,判断是否有闪断情况发生。
2. 内存。redis所有的数据都放在内存里,当物理内存不够时,linux os会使用swap内存,导致内存交换发生,这时如果有redis调用命令就会产生redis超时。这里可以通过调整/proc/sys/vm/swappiness参数,来设置物理内存使用超过多少就会进行swap。
int rdbSaveBackground(char *filename) { pid_t childpid; long long start; if (server.rdb_child_pid != -1) return REDIS_ERR; serverserver.dirty_before_bgsave = server.dirty; server.lastbgsave_try = time(NULL); start = ustime(); if ((childpid = fork()) == 0) { int retval; /* Child */ if (server.ipfd > 0) close(server.ipfd); if (server.sofd > 0) close(server.sofd); retval = rdbSave(filename); if (retval == REDIS_OK) { size_t private_dirty = zmalloc_get_private_dirty(); if (private_dirty) { redisLog(REDIS_NOTICE, "RDB: %zu MB of memory used by -on-write", private_dirty/(1024*1024)); } } exitFromChild((retval == REDIS_OK) ? 0 : 1); } else { /* Parent */ server.stat_fork_time = ustime()-start; if (childpid == -1) { server.lastbgsave_status = REDIS_ERR; redisLog(REDIS_WARNING,"Can't save in background: fork: %s", strerror(errno)); return REDIS_ERR; } redisLog(REDIS_NOTICE,"Background saving started by pid %d",childpid); server.rdb_save_time_start = time(NULL); server.rdb_child_pid = childpid; updateDictResizePolicy(); return REDIS_OK; } return REDIS_OK; /* unreached */ }

程序1
另外还有一些特殊情况也会导致swap发生。当我们使用rdb做为redis集群持久化时可能会发生物理内存不够的情况(aof持久化只是保持支持不断的追加redis集群变化操作,不太容易引起swap)。当使用rdb持久化时,如程序1所示主进程会fork一个子进程去mp redis中所有的数据,主进程依然为客户端服务。此时主进程和子进程共享同一块内存区域, linux内核采用写时复制来保证数据的安全性。在这种模式下如果客户端发来写请求,内核将该页赋值到一个新的页面上并标记为写,在将写请求写入该页面。因此,在rdb持久化时,如果有其他请求,那么redis会使用更多的内存,更容易发生swap,因此在可以快速恢复的场景下尽量少使用rdb持久化可以将rdb mp的条件设的苛刻一点,当然也可以选择aof,但是aof也有他自身的缺点。另外也可以使用2.6以后的主从结构,将读写分离,这样不会出现server进程上又读又写的情景发生 3. Redis单进程处理命令。Redis支持udp和tcp两种连接,redis客户端向redis服务器发送包含redis命令的信息,redis服务器收到信息后解析命令后执行相应的操作,redis处理命令是串行的具体流程如下。首先服务端建立连接如程序2所示,在创建socket,bind,listen后返回文件描述符:

server.ipfd = anetTcpServer(server.neterr,server.port,server.bindaddr);

程序2
对于redis这种服务来说,它需要处理成千上万个连接(最高达到655350),需要使用多路复用来处理多个连接。这里redis提供了epoll,select, kqueue来实现,这里在默认使用epoll(ae.c)。拿到listen函数返回的文件描述符fd后,redis将fd和其处理acceptTcpHandler函数加入到事件驱动的链表中.实际上在加入事件队列中,程序4事件驱动程序将套接字相关的fd文件描述符加入到epoll的监听事件中。
if (server.ipfd > 0 && aeCreateFileEvent(server.el,server.ipfd,AE_READABLE, acceptTcpHandler,NULL) == AE_ERR) redisPanic("Unrecoverable error creating server.ipfd file event."); int aeCreateFileEvent(aeEventLoop *eventLoop, int fd, int mask, aeFileProc *proc, void *clientData) { if (fd >= eventLoop->setsize) { errno = ERANGE; return AE_ERR; } aeFileEvent *fe = &eventLoop->events[fd]; if (aeApiAddEvent(eventLoop, fd, mask) == -1) return AE_ERR; fe->mask |= mask; if (mask & AE_READABLE) fe->rfileProc = proc; if (mask & AE_WRITABLE) fe->wfileProc = proc; fe->clientDataclientData = clientData; if (fd > eventLoop->maxfd) eventLoop->maxfd = fd; return AE_OK; }

程序3

static int aeApiAddEvent(aeEventLoop *eventLoop, int fd, int mask) { aeApiState *state = eventLoop->apidata; struct epoll_event ee; /* If the fd was already monitored for some event, we need a MOD * operation. Otherwise we need an ADD operation. */ int op = eventLoop->events[fd].mask == AE_NONE ? EPOLL_CTL_ADD : EPOLL_CTL_MOD; ee.events = 0; mask |= eventLoop->events[fd].mask; /* Merge old events */ if (mask & AE_READABLE) ee.events |= EPOLLIN; if (mask & AE_WRITABLE) ee.events |= EPOLLOUT; ee.data.u64 = 0; /* avoid valgrind warning */ ee.data.fd = fd; if (epoll_ctl(state->epfd,op,fd,&ee) == -1) return -1; return 0; }

程序4
在初始话完所有事件驱动后,如程序5所示主进程根据numevents = aeApiPoll(eventLoop, tvp)获得io就绪的文件描述符和其对应的处理程序,并对fd进行处理。大致流程是accept()->createclient()->readQueryFromClient()。其中readQueryFromClient()读取信息中的redis命令-> processInputBuffer()->call()最后完成命令。
void aeMain(aeEventLoop *eventLoop) { eventLoop->stop = 0; while (!eventLoop->stop) { if (eventLoop->beforesleep != NULL) eventLoop->beforesleep(eventLoop); aeProcessEvents(eventLoop, AE_ALL_EVENTS); } } int aeProcessEvents(aeEventLoop *eventLoop, int flags) {------------------------------- numevents = aeApiPoll(eventLoop, tvp); for (j = 0; j < numevents; j++) { aeFileEvent *fe = &eventLoop->events[eventLoop->fired[j].fd]; int mask = eventLoop->fired[j].mask; int fd = eventLoop->fired[j].fd; int rfired = 0; /* note the fe->mask & mask & ... code: maybe an already processed * event removed an element that fired and we still didn't * processed, so we check if the event is still valid. */ if (fe->mask & mask & AE_READABLE) { rfired = 1; fe->rfileProc(eventLoop,fd,fe->clientData,mask); } if (fe->mask & mask & AE_WRITABLE) { if (!rfired || fe->wfileProc != fe->rfileProc) fe->wfileProc(eventLoop,fd,fe->clientData,mask); } processed++; } }

程序5
从上述代码可以看出redis利用ae事件驱动结合epoll多路复用实现了串行式的命令处理。所以一些慢命令例如sort,hgetall,union,mget都会使得单命令处理时间较长,容易引起后续命令time out.所以我们第一需要从业务上尽量避免使用慢命令,如将hash格式改为kv自行解析,第二增加redis实例个数,每个redis服务器调用尽量少的慢命令。

Ⅳ redis 操作set集合怎么删除数据结构

在Redis中,Set和list都是字符串序列,非常相似,不同之处在于Set是用哈希表来保持字符串的唯一性,没有先后顺序,不像list一样,可以在首尾增删数据。
但是set也有自己的相应处理命令来完成对自己的操作。

Ⅳ 如何利用命令行方式实现redis清除缓存

为了能让虚存更为充分的发挥作用以帮助我们提高系统的运行效率,我们可以将带有很多较小值的Keys合并为带有少量较大值的Keys。
其中最主要的方法就是将原有的Key/Value模式改为基于Hash的模式,这样可以让很多原来的Keys成为Hash中的属性。

Ⅵ redis keys 管道命令 删key会卡库吗

DEL 删除给定的一个或多个 key,不存在的 key 会被忽略,返回值:被删除 key 的数量
DUMP 序列化给定 key,返回被序列化的值,使用 RESTORE 命令可以将这个值反序列化为 Redis 键
EXISTS 检查给定 key 是否存在
EXPIRE 为给定key设置有效时间,接受时间点
EXPIREAT 为给定key设置有效时间,接受时间戳timestamp
KEYS 查找所有符合给定模式 pattern 的 key;KEYS * 匹配数据库中所有 key;KEYS h?llo 匹配 hello,hallo等。KEYS h[ae]llo匹配hello和hallo
MIGRATE 将 key 原子性地从当前实例传送到目标实例的指定数据库上,一旦传送成功, key 保证会出现在目标实例上,而当前实例上的 key 会被删除。执行的时候会阻塞进行迁移的两个实例
MOVE 将当前数据库的 key 移动到给定的数据库 db 当中
OBJECT 从内部察看给定 key 的 Redis 对象
PERSIST 移除给定 key 的有效时间
PEXPIRE 以毫秒为单位设置 key 的有效时间
PEXPIREAT 以毫秒为单位设置 key 的有效时间(timespan)
PTTL 以毫秒为单位返回key的剩余有效时间
RANDOMKEY 从当前数据库中随机返回(已使用的)一个key
RENAME 将Key改名
RENAMENX 当且仅当 newkey 不存在时,将 key 改名为 newkey
RESTORE 反序列化给定的序列化值,并将它和给定的 key 关联
SORT 返回或保存给定列表、集合、有序集合 key 中经过排序的元素
TTL 以秒为单位,返回给定 key 的剩余有效时间
TYPE 返回 key 所储存的值的类型
SCAN 增量迭代

Ⅶ 对于redis的批量删除指定key,有没有好的方法

1. 终端
获取所有Key命令:redis-cli keys ‘*’ ;
获取指定前缀的key:redis-cli KEYS “e:*”
如果需要导出,可以redis-cli keys ‘*’ > /data/redis_key.txt
删除指定前缀的Key redis-cli KEYS “e:*” | xargs redis-cli DEL

Ⅷ redis 命令行的语法提示 如何去掉

Redis Pgmerge 命令将多个 HyperLogLog 合并为一个 HyperLogLog ,合并后的 HyperLogLog 的基数估算值是通过对所有 给定 HyperLogLog 进行并集计算得出的。
语法
redis Pgmerge 命令基本语法如下:
redis 127.0.0.1:6379> PFMERGE destkey sourcekey [sourcekey ]

可用版本
>= 2.8.9
返回值
返回 OK。
实例
redis 127.0.0.1:6379> PFADD hll1 foo bar zap a(integer) 1redis 127.0.0.1:6379> PFADD hll2 a b c foo(integer) 1redis 127.0.0.1:6379> PFMERGE hll3 hll1 hll2OKredis 127.0.0.1:6379> PFCOUNT hll3(integer) 6redis>

Ⅸ 如何删除redis3.2 gems

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47

Redis集群部署文档(centos6系统)
(要让集群正常工作至少需要3个主节点,在这里我们要创建6个redis节点,其中三个为主节点,三个为从节点,对应的redis节点的ip和端口对应关系如下)
127.0.0.1:7000
127.0.0.1:7001
127.0.0.1:7002
127.0.0.1:7003
127.0.0.1:7004
127.0.0.1:7005

1:下载redis。官网下载3.0.0版本,之前2.几的版本不支持集群模式
下载地址:https://github.com/antirez/redis/archive/3.0.0-rc2.tar.gz
2:上传服务器,解压编译
tar -zxvf redis-3.0.0-rc2.tar.gz mv redis-3.0.0-rc2.tar.gz redis3.0cd /usr/local/redis3.0makemake install
3:创建集群需要的目录
mkdir -p /usr.local/clustercd /usr.local/clustermkdir 7000mkdir 7001mkdir 7002mkdir 7003mkdir 7004mkdir 7005
4:修改配置文件redis.conf
cp /usr/local/redis3.0/redis.conf /usr.local/clustervi redis.conf##修改配置文件中的下面选项port 7000daemonize yescluster-enabled yescluster-config-file nodes.confcluster-node-timeout 5000appendonly yes##修改完redis.conf配置文件中的这些配置项之后把这个配置文件分别拷贝到7000/7001/7002/7003/7004/7005目录下面cp /usr/local/cluster/redis.conf /usr/local/cluster/7000cp /usr/local/cluster/redis.conf /usr/local/cluster/7001cp /usr/local/cluster/redis.conf /usr/local/cluster/7002cp /usr/local/cluster/redis.conf /usr/local/cluster/7003cp /usr/local/cluster/redis.conf /usr/local/cluster/7004cp /usr/local/cluster/redis.conf /usr/local/cluster/7005 ##注意:拷贝完成之后要修改7001/7002/7003/7004/7005目录下面redis.conf文件中的port参数,分别改为对应的文件夹的名称
5:分别启动这6个redis实例
cd /usr/local/cluster/7000redis-server redis.confcd /usr/local/cluster/7001redis-server redis.confcd /usr/local/cluster/7002redis-server redis.confcd /usr/local/cluster/7003redis-server redis.confcd /usr/local/cluster/7004redis-server redis.confcd /usr/local/cluster/7005redis-server redis.conf ##启动之后使用命令查看redis的启动情况ps -ef|grep redis如下图显示则说明启动成功
6:执行redis的创建集群命令创建集群
cd /usr/local/redis3.0/src./redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
6.1执行上面的命令的时候会报错,因为是执行的ruby的脚本,需要ruby的环境
错误内容:/usr/bin/env: ruby: No such file or directory
所以需要安装ruby的环境,这里推荐使用yum install ruby安装
yum install ruby

6.2然后再执行第6步的创建集群命令,还会报错,提示缺少rubygems组件,使用yum安装

错误内容:
./redis-trib.rb:24:in `require': no such file to load -- rubygems (LoadError)
from ./redis-trib.rb:24
yum install rubygems
6.3再次执行第6步的命令,还会报错,提示不能加载redis,是因为缺少redis和ruby的接口,使用gem 安装
错误内容:
/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- redis (LoadError)
from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
from ./redis-trib.rb:25

gem install redis

6.4 再次执行第6步的命令,正常执行

输入yes,然后配置完成。

至此redis集群即搭建成功!
7:使用redis-cli命令进入集群环境
redis-cli -c -p 7000

Ⅹ 如何批量删除Redis下特定pattern的keys

在linux中 批量操作redis中的 keys的方法:
1.统计个数:

redis中名称含有OMP_OFFLINE的key的个数;

src/redis-cli keys "*OMP_OFFLINE*"|wc -l

2.批量删除
批量删除 0号数据库中名称含有OMP_OFFLINE的key:
src/redis-cli -n 0 keys "*OMP_OFFLINE*"|xargs src/redis-cli -n 0 del

在redis的客户端环境中并不支持批量删除。

阅读全文

与redis删除命令相关的资料

热点内容
思考快与慢pdf下载 浏览:692
ins命令只能插入一条记录吗 浏览:544
spss如何连接本地服务器 浏览:619
植发稀少加密多少钱一根 浏览:687
无法接服务器是什么情况 浏览:210
压缩裤的尺寸如何选择 浏览:469
服务器命令如何下载文件夹下 浏览:548
交叉编译工具的安装位置 浏览:587
linux命令ping本地地址 浏览:214
方舟编译器和超级文件管理 浏览:118
81年的程序员 浏览:32
技能人才占比算法 浏览:55
s8文件夹忘记密码怎么办 浏览:918
大家的日语中级pdf 浏览:438
编译与运行什么区别 浏览:841
死或生5PS3解压 浏览:244
pdf怎么删字 浏览:54
买压缩面膜注意什么 浏览:111
新加坡玩什么服务器好 浏览:140
加密金融科技发展 浏览:565