Redis高级命令操作大全--推荐
redis安装和使用
redis安装
wget http://download.redis.io/redis-stable.tar.gz
tar zxvf redis-stable.tar.gz
cd redis-stable.tar.gz
make
make install
redis启动
redis-server
redis-cli shutdown
配置
方法一
redis-server /path/to/redis.conf
redis-server /path/to/redis.conf --loglevel warning //设置日志级别
方法二
redis-cli
redis > CONFIG SET loglevel warning
多数据库的选择
> select 1
数据库基本操作
(1)添加数据和查找数据,通过set/get命令添加和获取数据
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> set bar 1
OK
127.0.0.1:6379[1]> get bar
"1"
127.0.0.1:6379[1]> get aaa
(nil)
(2)判断一个键是否存在,exists命令可以判断key是否存在,存在返回1,不存在返回0
127.0.0.1:6379[1]> exists bar
(integer) 1
127.0.0.1:6379[1]> exists aaa
(integer) 0
(3)删除数据,del命令删除key,返回值为成功删除key的个数
127.0.0.1:6379[1]> del aaa
(integer) 0
127.0.0.1:6379[1]> del bar
(integer) 1
(4)获取value的类型
127.0.0.1:6379[1]> set bar 1
OK
127.0.0.1:6379[1]> type bar
string
(5)自增和自减,incr 、decr以及incrby和decrby实现整数的加减
127.0.0.1:6379[1]> INCR ab
(integer) 1
127.0.0.1:6379[1]> INCR ab
(integer) 2
127.0.0.1:6379[1]> INCRBY ab 2
(integer) 4
127.0.0.1:6379[1]> DECR ab
(integer) 3
127.0.0.1:6379[1]> DECRBY ab 2
(integer) 1
(6)增加指定浮点数,incrbyfloat可以指定自增的浮点数
127.0.0.1:6379[1]> INCRBYFLOAT ab 1.1
"2.1"
(7)向尾部追加,append命令可以向字符尾部追加内容
127.0.0.1:6379[1]> set key hello
OK
127.0.0.1:6379[1]> append key world
(integer) 10
127.0.0.1:6379[1]> get key
"helloworld"
(8)获取字符串长度,strlen获取value的长度
127.0.0.1:6379[1]> STRLEN key
(integer) 10
(9)批量设置和获取,通过mset和mget命令可以批量执行设置和获取
127.0.0.1:6379[1]> mset key1 va1 key2 va2
OK
127.0.0.1:6379[1]> mget key1 key2
1) "va1"
2) "va2"
(10)位操作
getbit key offset
setbit key offset
bitcount key [start] [end]
bitop operation destkey key [key ...]
散列类型
{
"id":1,
"name":"test"
}
基本操作
(1)存储方法,可以通过hset和hget来设置和获取数据
127.0.0.1:6379[1]> hset user id 1
(integer) 1
127.0.0.1:6379[1]> hset user name test
(integer) 1
127.0.0.1:6379[1]> hget user id
"1"
127.0.0.1:6379[1]> hget user name
"test"
(2)判断字段是否存在,hexists命令,返回1存在,返回0不存在
127.0.0.1:6379[1]> hexists user id
(integer) 1
127.0.0.1:6379[1]> hexists user age
(integer) 0
(3)使用hsetnx(hset if not exists)如果不存在赋值
127.0.0.1:6379[1]> hsetnx user age 111
(integer) 1
127.0.0.1:6379[1]> hget user age
"111"
(4)增加数字
127.0.0.1:6379[1]> hincrby user score 60
(integer) 60
127.0.0.1:6379[1]> hget user score
"60"
(5)删除字段
127.0.0.1:6379[1]> hdel user score
(integer) 1
127.0.0.1:6379[1]> hget user score
(nil)
如何存储数据?
键 字段 字段值
post:id field value
127.0.0.1:6379[1]> incr userid
(integer) 1
127.0.0.1:6379[1]> hset user:1 name test
(integer) 1
127.0.0.1:6379[1]> hset user:1 score 90
(integer) 1
127.0.0.1:6379[1]> incr userid
(integer) 2
127.0.0.1:6379[1]> hset user:2 name test2
(integer) 1
127.0.0.1:6379[1]> hset user:2 score 99
(integer) 1
添加了两条数据,id为1的名字为test分数为90,而id为2的名字为test2分数为90.
127.0.0.1:6379[1]> hmget user:1 name score
1) "test"
2) "90"
127.0.0.1:6379[1]> hgetall user:2
1) "name"
2) "test2"
3) "score"
4) "99"
127.0.0.1:6379[1]> hkeys user:1
1) "name"
2) "score"
127.0.0.1:6379[1]> hvals user:1
1) "test"
2) "90"
127.0.0.1:6379[1]> hlen user:1
(integer) 2
需要注意的是,散列类型无法获取所有存在的键值,也就是id,如果删除了中间某个id的话,只可以使用exist命令来判断key是否存在。
列表类型
基本操作
列表的基本操作命令都是以l开头的。
127.0.0.1:6379> lpush user test
(integer) 1
127.0.0.1:6379> rpush user test1
(integer) 2
127.0.0.1:6379> lpop user
"test"
127.0.0.1:6379> rpop user
"test1"
127.0.0.1:6379>
127.0.0.1:6379> llen user
(integer) 0
127.0.0.1:6379> lpush user test
(integer) 1
127.0.0.1:6379> llen user
(integer) 1
127.0.0.1:6379> lrange user 0 3
1) "test"
2) "test1"
3) "test2"
4) "test3"
127.0.0.1:6379> lrange user 0 2
1) "test"
2) "test1"
3) "test2"
lrem key count value
@count 为删除个数,大于0的话从左边开始,小于0的话从右边开始
@value 要删除的值
127.0.0.1:6379> lrange user 0 -1
1) "test"
2) "test1"
3) "test2"
4) "test3"
127.0.0.1:6379> linsert user before test1 test0
(integer) 5
127.0.0.1:6379> linsert user after test1 test1.5
(integer) 6
127.0.0.1:6379> lrange user 0 -1
1) "test"
2) "test0"
3) "test1"
4) "test1.5"
5) "test2"
6) "test3"
rdroplpush source destination
从source列表的右侧弹出一个数据,添加到destination列表的左侧
集合类型
127.0.0.1:6379> sadd key 1
(integer) 1
127.0.0.1:6379> sadd key 2
(integer) 1
127.0.0.1:6379> sadd key 2
(integer) 0
127.0.0.1:6379> smembers key
1) "1"
2) "2"
127.0.0.1:6379> srem key 2
(integer) 1
127.0.0.1:6379> smembers key
1) "1"
127.0.0.1:6379> sismember key 1
(integer) 1
127.0.0.1:6379> sismember key 3
(integer) 0
sdiff key [key...]
sinter key [key...]
sunion key [key...]
127.0.0.1:6379> scard key
(integer) 1
sdiffstore destination key [key...]
sinterstore destination key[key...]
sunionstore destination key[key...]
srandmember key [count]
127.0.0.1:6379> srandmember key 3
1) "4"
2) "2"
3) "3"
有序集合类型 sorted set
基本操作
(1)zadd添加元素,并设置分数score
127.0.0.1:6379> zadd students 60 xiaoming
(integer) 1
127.0.0.1:6379> zadd students 80 daxiong
(integer) 1
127.0.0.1:6379> zscore students xiaoming
"60"
127.0.0.1:6379> zrange students 0 1
1) "xiaoming"
2) "daxiong"
127.0.0.1:6379> zrangebyscore students 0 70
1) "xiaoming"
127.0.0.1:6379> zrangebyscore students 0 100
1) "xiaoming"
2) "daxiong"
获取从0开始的前2个数据
127.0.0.1:6379> zrangebyscore students 0 100 limit 0 2
1) "xiaoming"
2) "daxiong"
获取从1开始的前2个数据
127.0.0.1:6379> zrangebyscore students 0 100 limit 1 2
1) "daxiong"
127.0.0.1:6379> zincrby students 5 xiaoming
"65"
127.0.0.1:6379> zincrby students -5 xiaoming
"60"
127.0.0.1:6379> zcard students
(integer) 2
zcount key min max 127.0.0.1:6379> zcount students 0 70
(integer) 1
127.0.0.1:6379> zcount students 0 90
(integer) 2
zrem key [key...]
zremrangebyrank key start stop
zremrangebyscore key min max
127.0.0.1:6379> zrank students xiaoming
(integer) 0
事务
redis的事务是一组命令的集合。事务同命令一样都是redis的最小执行单元,一个事务中的命令要么执行要么都不执行。
首先需要multi命令来开始事务,用exec命令来执行事务。
127.0.0.1:6379> multi
OK
127.0.0.1:6379> hset user:1 name xiaoming
QUEUED
127.0.0.1:6379> hset user:1 name daxiong
QUEUED
127.0.0.1:6379> exec
1) (integer) 0
2) (integer) 0
127.0.0.1:6379> hgetall user:1
1) "name"
2) "daxiong"
3) "score"
4) "61"
watch
127.0.0.1:6379> set key 1
OK
127.0.0.1:6379> watch key
OK
127.0.0.1:6379> set key 2
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set key 3
QUEUED
127.0.0.1:6379> exec
(nil)
127.0.0.1:6379> get key
"2"
生存时间
expire key seconds
//设置成功返回1,失败返回0
127.0.0.1:6379> set session:aabb uid1122
OK
127.0.0.1:6379> expire session:aabb 300
(integer) 1
127.0.0.1:6379> del session:aabb
(integer) 1
127.0.0.1:6379> expire session:aabb 300
(integer) 0 127.0.0.1:6379> expire session:aabb 300
(integer) 1
127.0.0.1:6379> ttl session:aabb
(integer) 290
ttl key
127.0.0.1:6379> expire session:aabb 300
(integer) 1
127.0.0.1:6379> ttl session:aabb
(integer) 290
127.0.0.1:6379> get session:aabb
"300"
127.0.0.1:6379> ttl session:aabb
(integer) 280
127.0.0.1:6379> persist session:aabb
(integer) 1
127.0.0.1:6379> ttl session:aabb
(integer) -1
缓存数据
排序
127.0.0.1:6379> lpush list 1 2 6 3 4 9 8
(integer) 7
127.0.0.1:6379> sort list
1) "1"
2) "2"
3) "3"
4) "4"
5) "6"
6) "8"
7) "9"
127.0.0.1:6379> zadd set 50 2 40 3 20 1 60 5
(integer) 4
127.0.0.1:6379> sort set
1) "1"
2) "2"
3) "3"
4) "5"
127.0.0.1:6379> sort set desc
1) "5"
2) "3"
3) "2"
4) "1"
BY参数
127.0.0.1:6379> lpush userids 1 2 3
(integer) 3
127.0.0.1:6379> set user_score_1 50
OK
127.0.0.1:6379> set user_score_2 30
OK
127.0.0.1:6379> set user_score_3 70
OK
127.0.0.1:6379> sort userids
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> sort userids by user_score_*
1) "2"
2) "1"
3) "3"
127.0.0.1:6379> sort userids by user_score_* desc
1) "3"
2) "1"
3) "2"
GET参数
127.0.0.1:6379> sort userids by user_score_* get user_name_*
1) "xiaoming"
2) "daxiong"
3) "xiaohong"
127.0.0.1:6379> sort userids by user_score_* desc get user_name_*
1) "xiaohong"
2) "daxiong"
3) "xiaoming"
STORE参数
任务队列
BRPOP key timeout
优先级队列
brpop key [key...] timetout
发布/订阅模式
PUBLISH CHANNEL MESSAGE
SUBSCRIBE CHANNEL MESSAGE
#向channel.test发布消息
127.0.0.1:6379> publish channel.test hello
(integer) 0 #返回0表明订阅者为0,没有发布消息
127.0.0.1:6379> publish channel.test hello
(integer) 1 #返回n表明订阅者为n,成功发布给1个消费者
#订阅channel.test消息
127.0.0.1:6379> subscribe channel.test
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "channel.test"
3) (integer) 1
#接收到来自channel.test的消息
1) "message"
2) "channel.test"
3) "hello"
管道
节省空间
Redis高级命令操作大全--推荐的更多相关文章
- SQLite3命令操作大全
SQLite3命令操作大全 SQLite库包含一个名字叫做sqlite3的命令行,它可以让用户手工输入并执行面向SQLite数据库的SQL命令.本文档提供一个样使用sqlite3的简要说明. 一.ql ...
- Redis高级命令及特性(安全性)
高级命令 keys * : 返回满足的所有键 ,可以模糊匹配 exists :是否存在指定的key,存在返回1,不存在返回0 exprie:设置某个key的过期时间 ttl:查看剩余时 ...
- redis 简单命令操作
一.概述: 在该系列的前几篇博客中,主要讲述的是与Redis数据类型相关的命令,如String.List.Set.Hashes和Sorted-Set.这些命令都具有一个共同点,即所有的操作都是针对与K ...
- redis常用命令手册大全
一.五种数据类型1.Redis字符串StringString 是最简单的类型,你可以理解成与 Memcached 是一模一样的类型,一个 key 对应一个value,其上支持的操作与 Memcache ...
- AMH面板命令操作大全
LNMP面板 - AMH 命令使用nginx篇 » SSH Nginx1) 有步骤提示操作: ssh执行命令: amh nginx然后选择对应选项进行操作. 2) 或直接操作: 启动Nginx: am ...
- Redis常用命令操作
字符串类型: * 存储:set key value * 获取:get key * 无值返回nil * 删除:del key 哈希类型 hash: * 存储:hset key field value * ...
- 《Linux 操作系统》Linux的常用命令操作大全
前言 在学习命令之前先学习我们该如何去学习linux 命令. 几乎每一个命令都有参数,每个参数的含义是什么,我们一般也不是全部都能记住,所以我们必须有一个可以知道每一个命令下各个参数的含义的方法. 命 ...
- Redis - 常用命令操作
常用命令keys: keys * 查看符合条件的所有key exists: exists key 查看key是否存在 del: del k ...
- redis高级命令4 持久化机制 、事务
redis的事务是支持很简单,基本没有啥用我们来看下面的列子 我们开启一个事务,在事务中执行了age 加1,set a4 ,还有对一个字符串进行加一,对字符串加1导致了事务失败,按道理incr age ...
随机推荐
- 170802、Elasticsearch5.2.2 安装问题记录
使用Elasticsearch5.2.2 必须安装jdk1.8 [elsearch@vm-mysteel-dc-search01 bin]$ java -version java version &q ...
- Linq初探
1.什么是LINQ LINQ是语言集成查询(Language Integrated Query),这项技术是在.net 3.5就已经引入的技术,极大的方便了数据的查询,他可以支持数据库.XML.ADO ...
- poj3349 Snowflake Snow Snowflakes【HASH】
Snowflake Snow Snowflakes Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 49991 Accep ...
- 解决Android中ListView列表只显示一项数据的问题
思路:获取每项item的高度,并相加,再加上分割线的高度,作为整个ListView的高度,方法如下: public static void setListViewHeightBasedOnChildr ...
- 小米范工具系列之七:小米范 web目录扫描器2.x版本发布
小米范web目录扫描器主要功能是探测web可能存在的目录及文件. 此工具使用java 1.8以上版本运行. 小米范web查找器2.x版本针对1.x版本(参考http://www.cnblogs.com ...
- 数据库SQL优化大总结之百万级数据库优化方案(转)
add by zhj: 作者没有指定是哪个数据库,这只是一个近似通用的总结.对于某个特定的数据库,有些条目可能并不适用. 原文:http://www.cnblogs.com/yunfeifei/p/3 ...
- uchome四大常用入口文件
一.四大常用入口文件 cp.php 编辑日志.相册.活动等等相关编辑操作基本上都从这个文件入口 do.php 登录.注册.找回密码.相册批量上传.在需要密码的情况 ...
- qt——QFileDialog使用对话框选取本地文件
QT在学习的过程中总是遇到各种问题,没有人解答,只有自己在研究并且在网上搜索一些资料,从初学到现在入门,一直都是这样走过来的,虽然走得很艰难,但是每一个阶段都会有所收获,最近在做一个图片浏览模块的功能 ...
- (转)《SSO CAS单点系列》之 实现一个SSO认证服务器是这样的!
上篇我们引入了SSO这个话题<15分钟了解SSO是个什么鬼!>.本篇我们一步步深入分析SSO实现机理,并亲自动手实现一个线上可用的SSO认证服务器!首先,我们来分析下单Web应用系统登录登 ...
- 1.2 Getting Started--Naming Conventions(命名约定)
Ember.js使用一个运行时解析器去连接你的对象而没有很多样板文件.作为一个开发者,如果你把code放到约定好的位置这个解析器会自动工作. 一.The Application 1. 当你 ...