Redis总结和提取常用的和重要的命令
一:Redis的结构和其数据类型(注redis默认端口号是6379)
1)Redis可以部署多套(多个进程不同端口或直接部署在不同主机),每个Redis都可以有多个db,通过select来选择,默认的是select 0,选择新db后如果不插入任何值那么此db在服务端是不存在的;目前db只有index没有名字。
2)Redis的每个db其实都可以理解为java的ConcurrentHashMap对象,key是String,value是Object;key应该不能为null和空字符串,而value的Object又被限制为固定的几种类型,其中最常用的:
1.String,它可以存储任意数据(对于编程语言操作redis实际上key和value都是字节流数据),但是限定在512M;
2.List类型,它可以理解为java的LinkedList,值可以重复,但是只能通过下标访问而不能像Set一样sismember来判断,毕竟Redis是提供高效的缓存,不提供一些低效操作也正常。
3.Hash类型,可以理解为java的HashMap,即Map的value还是Map;
4.Set类型,和List一样也是obj的集合,不同的是它不允许重复值,且其值都经过了hash(就像java的HashSet),由于value(其实是HashMap的key部分)是hash过的,故提供sismember命令;
5.Sorted Set(zset),可以理解为java的LinkedHashSet,即它比set多了个顺序,但是这里注意,这个顺序不是说add时有序,而是遍历时通过一个head来有序的访问,它们存储位置上和set没有区别,只是node里多了privious和tail;
二:通用的操作
补充:控制台登录redis客户端可以 直接输入redis-cli,如果要登录非本地的redis服务则是redis-cli -h host_value;同理,如果端口是非6379则加-p port_value;
补充:./redis-cli -p 6379 shutdown命令可以直接关闭redis服务;(有auth可以加个-a xxx,如果host不是默认的可以加-h xxx)
1)select n,其中n是自然数,客户端连接后默认是0,即第一个db(ConcurrentHashMap对象),这个的存在可以有效的提供多个模块用同一个redis服务但是存在同名的key的问题(虽然可以在key里加后缀),但是对于不同的大应用还是建议用多个redis。
2)ping,用于探测服务端和自己的连接是否正常,正常返回pong;
3)auth命令,用于登录(前提是redis服务有配置密码),如果有密码,那么即便执行echo命令也会提示要登录,通过auth passwd来登录;
4)quit命令,关闭当前连接,类似自动版的Ctrl+C;
5)save命令,将内存数据异步保存到磁盘的.db文件里(前提是配置了),还有个bgsave,后它异步保存
6)shutdown命令,异步保存数据到磁盘,并且关闭 redis 服务;
7)info命令,显示redis.conf的所有键值对配置,可以info selection来指定要显示哪个键的键值对。
8)flushdb和flushall命令,前者是清空当前内存db的数据,后者是清空所有内存db的数据(但是已经在磁盘的是否会清除待测);此时用dbsize会返回0;
9)dbsize命令,显示当前db的key-value条数。
10)config set命令,动态的设置redis.conf的配置,无需重启服务,如config set requirepass "password"即是设置redis需要密码;config get则是获取某个键的值(和info selection的关系待测);
11)time命令,获取redis服务的时间,有时候我们设置时间可能不能以本机的为准,这个时候这个命令会挺有用。
12)command count命令,获取当前版本redis里所有可用命令的总数,我得到的是176,够够的。。
13)command命令,获取命令详情,有点像--help;不过用处不大,还不如查资料学的快。
14)client kill关闭特定客户端连接,如kill 127.0.0.1:53338,注意这个addr是客户端的地址。可以事先用client list看当前有哪些客户端在连接。(经过测试关闭连接实际上是取消授权,即需要再次auth而不是关闭客户端的意思)
15)multi和exec命令,这两个命令是成对出现的(除非命令有问题用了discard取消事务),先用multi声明事务,然后写事务命令,然后用exec提交事务,提交的事务等同于一个原子命令集合。
16)discard命令,如果multi后输入的命令有语法问题,则可以用discard取消此次事务并清空缓存的命令;当然没错误也可以用这个命令取消事务,用了discard后面就不存在exec了;(错误还有一种运行时错误,即服务端执行出错而非客户端自己离线就能检测的)
17)watch命令,监视一个key,这个用法是在multi之前使用watch key,然后在multi,然后输入命令和exec提交事务,如果在watch之后exec之前此key被更改(删除/修改值,增加算吗?待测)则此事务不生效,这一般是多个连接客户端的情况下有这个需求。
18)unwatch命令,取消对key的监视;
19)del命令,用于删除当前db的key-value(不管此value是什么类型)
20)exists命令,判断key是否存在,如exists stud1;存在返回1,不存在返回0;
21)expire命令,给key设定过期时间,单位是秒,如expire stud1;pexpire则是设置毫秒为单位的过期时间;
22)ttl命令(time to live),查看key的过期剩余时间,单位是秒,如ttl stud1;pttl则是返回毫秒为单位的过期时间,expire和ttl并不是要对应使用。(如果ttl或pttl的key不存在则返回-2)
23)persist命令,移除key的过期时间,即不设置过期时间。
24)move命令,将当前db的key移动到指定db里,如move stud1 1;成功返回1,否则返回0;
25)keys命令,返回所有指定模式的key,如keys aa*,则如果存在key:aam,aas都会返回,这里*是通配符匹配任意长度字符串;(keys *返回所有的key,注意不包括value部分)
26)rename命令,将key重命名,如rename oldname newname;这里如果已经存在newname则会覆盖(至少string的会直接覆盖,而其它类型是否覆盖待测);renamenx则是newname在db中没有则rename否则不执行返回0;
27)type命令,查看key的value类型,如type name返回string;
28)info命令,可以查看redis服务的版本、当前连接客户端数、内存等等一大堆信息;
三:各数据类型的常用操作命令
1)String类型:
1.set,如set name silentdoer;注意,如果name已经存在则覆盖,且无视name对应value的类型(而其它类型如hash,set时如果key的类型和hash不一样则返回执行出错信息),如果字符串包括空白符可以用""引起来。
2.get,如get name返回字符串silentdoer;
3.getrange,如getrange name 0 2;则返回sil,0和2是下标,如果end是-1,则表示到末尾的意思。
4.getset,set的升级版,即返回的不再是OK而是旧值,如果此key之前没有则返回nil;而如果此key存在但是不是string类型则返回出错信息(因为这里需要返回旧值,而旧值不是string类型)
5.getbit和setbit;直接操作value的位,不过只适合小数据;如getbit ctl 63;setbit ctl 62 1;(jedis里key-value均为byte数组)
6.mget,一次性获取多个key的值(编程语言里是存入结果集数组),如mget name1 name2
7.setex,set值的同时给它赋予过期时间,单位是秒,如setex key 60 value;这个功能set也能做只需后面加个ex 60即可,而且可以设置毫秒px 60000;完整句型为set key value ex 60;还有个psetex和incrbyfloat
8.setnx(set not exists),句型setnx key value,则只有key不存在才会创建并set;成功返回1,否则返回0
9.mset,和mget对应,同时设置多个键值对;即是多次set
10.incr和decr分别是对key加一减一且返回加减之后的值,这个是原子操作,因此可作为分布式锁的一种实现;前提是key的value是整数数值(ascii码是数值),而incrby则是加指定数,如incrby key 3,对应的decrby;
11.append对key的value追加字符串;如append key appendstr
2)Hash类型,即类似java HashMap
1.hset命令,添加或修改一个hash;如hset key field value;注意,如果key已经存在且不是hash类型则返回错误信息;而对是hash的key操作是修改此hash而非覆盖(修改包括添加新field和修改老field)。
2.hget命令,获取一个hash的field的值,如hget key field;
3.hmset,添加或修改一个hash,不同的是可以一次性指定多个field-value;如hmset key field1 value1 field2 value2...;对应hmget
4.hgetall,获取hash所有的field-value;
5.hexists,查询hash中是否存在某个field,如hexists key field
6.hdel,删除hash中的field,如hdel key field(可同时删除多个,不存在hmdel)
7.hkeys,获取hash的所有key,如hkeys key;对应hvals获取所有的值
8.hlen,获取hash有多少field-value;如hlen key;
9.hsetnx,如果field不存在才设置,如hsetnx key field value,如果field已存在返回0(这个跟set不同的是set虽然已存在也返回0但是会set而这个不set);
10.hincrby命令,可以对field元素进行增加操作,如果key不存在则创建一个Hash元素并对应field初始值为0再执行此hincrby操作;
3)List类型(可以有重复元素,如果没有重复元素建议用set,如果要有顺序用zset)
1.llen获取列表的长度
2.rpush,将一个或多个值添加到列表的尾部(列表不存在则创建),语法为rpush key value1 value2 ...;还有个rpushex是为已存在的列表添加元素;
3.rpop,移除并获取列表的最后一个值(单个),格式为rpop list;还有个brpop,表示如果没有元素可以rpop则等待超时或有元素则rpop;格式为brpop list 60(60秒),还有个blpop
4.lpush,将一个或多个值添加到列表的头部,还有个lpushex对应是要此列表已存在;语法为lpush key value1 value2
5.lpop,移除并获取第一个元素。
6.linsert,在列表里选个元素之前或之后插入新元素,语法为linsert key before|after eValue nValue
7.lrange获取指定范围内的元素,如lrange key 0 -1,-1表示到最后
8.lrem移除列表中指定的值的对应个数的元素,还可以指定搜索顺序,如lrem list -2 "stud"表示移除list中值为stud的元素移除两个,搜索顺序为从后往前(如果是2则是从前往后)
9.lindex通过索引获取list中的元素;下标从0开始,-1表示最后一个元素;
4)Set类型
1.sadd,向set集合添加一个或多个元素,语法为sadd setKey member1 member2 ..;
2.scard获取集合的成员数量,如scard setKey;返回setKey中有多少个成员(set是成员不重复的和HashSet一样)。
3.sdiff获取集合的差集,语法为sdiff key1 key2 key3...;最终结果是key1减去key2减去key3最终key集合剩下的元素个数,注意,这里只是减去相同的部分,不同的不管,如果没有指定要减的集合或不存在则视为空集;
4.sdiffstore将sdiff的结果存入destination集合里,不存在则创建(若是已存在且不为set类型报错),格式为sdiffstore destionation key1 key2 key3...;
5.sinter (intersection)返回给定集合的交集;格式为sinter key1 key2..;
6.sinterstore,和将交集存入destionation集合,格式为sinterstore dest key1 key2..;(注意这个和sdiffstore一样是覆盖整个dest而不是往dest里添加元素)
7.sismember,判断set里是否有member;格式为sismember setKey "member";有member返回1否则0;
8.smembers,返回集合中所有成员;
9.srem,移除set中一个或多个成员,格式为srem setKey m1 m2...;如果m1不存在则相当于没写此member不会影响其它member的srem,且返回的值是成功移除的个数;
10.sunion,返回多个集合的并集,如sunion key1 key2..;
11.sunionstore,存储并集,格式为sunionstore dest key1 key2 ..;
5)ZSet类型(Sorted Set)
1.zadd 向有序集合添加一个或多个成员,或更新已存在成员的分数。
2.zcard 获取有序集合的成员数,如zcard myzset
3.zrange 返回集合在有序区间的所有成员,-1表示到最后;如zrange myzset 0 -1
4.zrem 移除有序集合上一个或多个成员,如zrem myzset m1 m2..;返回成功移除的个数。
5.zscore 获取指定的有序集合中某个成员的score;如zscore myzset m1;
Redis总结和提取常用的和重要的命令的更多相关文章
- 【redis】05Redis的常用命令及高级应用
Redis常用命令 Redis提供了非常丰富的命令,对数据库和个中数据类型进行操作, 这些命令呢,可以在Linux终端使用. 分为两大类的命令,一种是键值相关的命令,一种是服务器相关的命令, ...
- redis来共享各个服务器的session,并同时通过redis来缓存一些常用的资源,加快用户获得请求资源的速度(转)
时间过得真快,再次登录博客园来写博,才发现距离上次的写博时间已经过去了一个月了,虽然是因为自己找了实习,但这也说明自己对时间的掌控能力还是没那么的强,哈哈,看来还需不断的努力啊!(这里得特别说明一下本 ...
- redis学习-集合set常用命令
redis学习-集合set常用命令 1.sadd:添加一个元素到集合中(集合中的元素无序的并且唯一) 2.smembers:查看集合中所有的元素(上图事例) 3.srem:删除结合中指定的元素 4 ...
- redis学习-散列表常用命令(hash)
redis学习-散列表常用命令(hash) hset,hmset:给指定散列表插入一个或者多个键值对 hget,hmget:获取指定散列表一个或者多个键值对的值 hgetall:获取所欲哦键值以及 ...
- [置顶] Redis String类型数据常用的16条命令总结
Redis String类型数据常用的16条命令总结 描述:String 类型是最简单的类型,一个Key对应一个Value,String类型是二进制安全的.Redis的String可以包含任何数据,比 ...
- Redis的数据类型及其常用命令
快速入门Redis 首先安装redis: windows下安装redis Linux下安装redis 1. 什么是redis Redis属于nosql(非关系型数据库) 关系型数据库是基于关系表的数据 ...
- redis 的安装及常用的命令
前言: redis是一个key-value的存储系统,value支持string.list.set.zset.hash五种类型,且支持数据的本地存储 一.安装redis 前提:linux下需要安装了m ...
- 高级运维(六):源码安装Redis缓存服务、常用Redis数据库操作指令、配置Redis主从服务器
一.源码安装Redis缓存服务 目标: 本案例要求先快速搭建好一台Redis服务器,并测试该缓存服务器: 1> 设置变量test,值为123 2> 查看变量test的值 3> 设置计 ...
- 解析Redis操作五大数据类型常用命令
摘要:分享经常用到一些命令和使用场景总结,以及对Redis中五大数据类型如何使用cmd命令行的形式进行操作的方法. 本文分享自华为云社区<Redis操作五大数据类型常用命令解析>,作者:灰 ...
随机推荐
- Pycharm安装autopep8工具
参考文当:https://www.cnblogs.com/heenhui2016/p/6802122.html
- mongodb基础学习3-查询的复杂用法
昨天看了一下查询,今天来说下查询的复杂用法,可以类比mysql的查询 $ne:不等于 $gt, $gte, $lt, $lte:大于,大于等于,小于,小于等于 $in $and $nor:相当于上面的 ...
- How to read very large text files fast
Question Does anyone know the fastest way to read large text files (10Mb) into a string.Readln is ju ...
- 类的"魔法"方法
1. __init__()方法 <1>使用方式 def 类名: #初始化函数,用来完成一些默认的设定 def __init__(): pass 总结1 当创建Car对象后,在没有调用__i ...
- 疯狂JAVA——第三章 数据类型和运算符
3.1注释 1.单行注释 2.多行注释 3.文档注释——文档注释以斜线后紧跟两个星号(/**)开始,以星号后紧跟一个斜线结束(*/),中间部分都是文档注释,会被提取到API文档中. API文档类似于产 ...
- python网络编程——socket基础篇
python的网络编程比c语言简单许多, 封装许多底层的实现细节, 方便程序员使用的同时, 也使程序员比较难了解一些底层的东西. 1 TCP/IP 要想理解socket,首先得熟悉一下TCP/IP协议 ...
- Mysql 中json 相关函数的使用
1.JSON_LENGTH: select content from test1 ["1","2","3","4",&q ...
- hdoj3038(带权并查集)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3038 题意:对于给定的a1..an,通过询问下标x..y,给出a[x]+...+a[y],但给出的值可 ...
- Python float() 函数
Python float() 函数 Python 内置函数 描述 float() 函数用于将整数和字符串转换成浮点数. 语法 float()方法语法: class float([x]) 参数 x - ...
- 使用HttpModule实现网址重写和HttpHandler实现页面静态化冲突的解决办法
使用HttpModule实现网址重写和HttpHandler冲突的解决办法功能描述:1. 用HttpModule做了一个重写URL的功能,实现所有访问html的请求要经过httpModule处理,如果 ...