STRING
1)–选择第几个数据库:选择第一个数据库 select 1 2)–将key从数据1移动到数据库0: select 1 move mykey 0 3)–设置键值对: set myKey abc 一次设置多个键值对信息: MSET fruit “apple” drink “beer” food “cookies” 4)–取出键值对: get myKey –随机获取一个key: randomkey –查看数据库内所有key: keys * 5)–删除key: del myKey 备注:如果键被删除成功,命令执行后输出 (integer) 1,否则将输出 (integer) 0 –同时删除多个key del key1 key2 –删除当前数据库所有 key flushdb 6)–key是否存在 exists myKey
设置过期时间:(以秒来计算) expire myKey 10 设置过期时间:(以毫秒计) PEXPIRE key milliseconds 设置过期时间:(以毫秒来计算) expireat key timestamp 备注:expireat 的作用和 EXPIRE 类似,都用于为 key 设置过期时间。 不同在于 expireat 命令接受的时间参数是 UNIX 时间戳(unix timestamp) 查询key的过期时间: (以秒为单位,返回给定 key 的剩余生存时间(TTL-time to live) ttl key 备注:当 key 不存在时,返回 -2 。 当 key 存在但没有设置剩余生存时间时,返回 -1 。 否则,以毫秒为单位,返回 key 的剩余生存时间。 查询key的过期时间: (以毫秒为单位返回 key 的剩余的过期时间) pttl key 移除key的过期时间: (移除key的过期时间之后,key将持久保持) persist key
8)--返回 key 所储存的值的类型
type mykey
9)--重名令key
renamenx mykey mynewkey 仅当 mynewkey 不存在时,将 mykey 改名为 mynewkey
10)--查看redis版本信息
info
11)序列化给定 key
DUMP mykey
DUMP 命令用于序列化给定 key ,并返回被序列化的值。
12)key模糊搜索:
*: 通配任意多个字符
?: 通配单个字符
[]: 通配括号内的某1个字符
--查询以m开头的所有key
keys m*
--查询以t结尾的所有key
keys *t
--查询字符长度为3位的所有key
keys ???
--查询以son开始,并且后面有一位字符的key
keys son?
查询key是以my开始之后为l或k或者i的所有key的集合
keys my[lki]*
查询结果为
1) "mykey"
2) "mykey4"
3) "mykey3"
4) "myintkey"
5) "mykey2"
6) "mylist"
HASH
- string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。string 类型的值最大能存储 512MB
- hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象;Redis 中每个 hash 可以存储 2的32次方 - 1 键值对(40多亿)
示例1:同时将多个 field-value (域-值)对设置到哈希表 key 中。 hmset studentNo1 name “redis tutorial” description “redis basic commands for caching” likes 20 visitors 23000 备注:设置了 studentNo1 的一些描述信息(name, description, likes, visitors) 到哈希表的 studentNo1 key 中 示例2:删除一个或多个哈希表字段 hdel studentNo1 name 示列3:查看哈希表 key 中,指定的字段是否存在 hexists studentNo1 naem 示列4:获取存储在哈希表中指定字段的值。 hget studentNo1 description 示列5:获取在哈希表中指定 key 的所有字段和值 hgetall studentNo1 示列6:获取所有哈希表中的字段 hkeys studentNo1 示列7:只有在字段 field 不存在时,设置哈希表字段的值。 hsetnx studentNo2 description “loveDaJia”
LIST
list Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)一个列表最多可以包含 2的32次方 - 1 个元素 (4294967295, 每个列表超过40亿个元素)
示列1:LPUSH 将值test1 插入了名为 mylist 的列表当中
lpush mylist test1
示列2:获取列表长度
LLEN key
示例3:移出并获取列表的第一个元素
LPOP key
SET
Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1) 集合中最大的成员数为 2的32次方 - 1 (4294967295, 每个集合可存储40多亿个成员)
示列1:向集合添加一个或多个成员
sadd settest test1
示例2:获取集合的成员数
scard settest
sorted set
有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 2的32次方 - 1 (4294967295, 每个集合可存储40多亿个成员)
示列1:ZADD 向 redis 的有序集合中添加了三个值并关联上分数
zadd sortedSetTest 1 test1
示列2: 通过索引区间返回有序集合成指定区间内的成员
zrange sortedSetTest 0 10 withscores
redis 发布订阅
发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。
Redis 客户端可以订阅任意数量的频道。
订阅频道(channel1)的三个客户端 client1、client2 和 client3.
当有新消息通过 PUBLISH 命令发送给频道 channel1 时,
这个消息就会被发送给订阅它的三个客户端:
示列1:创建了订阅频道名为 redisChat
subscribe redisChat
示列2:重新开启个 redis 客户端,然后在同一个频道 redisChat 发布两次消息,
订阅者就能接收到消息
publish redisChat "Redis is a great caching technique"
redis 事务
a. Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证:
批量操作在发送 EXEC 命令前被放入队列缓存;
收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行;
在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中;
b. 一个事务从开始到执行会经历以下三个阶段:
开始事务;
命令入队;
执行事务;
c. 单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的。事务可以理解为一个打包的批量执行
脚本,但批量指令并非原子化的操作,中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做。
示列:
--开启事务
multi
--将命令入队到事务中
set mykey1 test1
set mykey4 test4
-- 执行所有事务块内的命令
EXEC
redis 连接
-- 通过密码验证连接到 redis 服务
auth "password"
-- 并检测服务是否在运行
ping
-- 关闭当前连接
quit
redis 数据备份与恢复
-- 该命令将在 redis 安装目录中创建dump.rdb文件
SAVE
-- 获取 redis的 安装目录
CONFIG GET dir
redis 安全
--查看是否设置了密码验证
config get requirepass
--设置密码
config set requirepass zjb
--客户端连接 redis 服务密码验证
auth zjb
Redis 客户端连接
Redis 通过监听一个 TCP 端口或者 Unix socket 的方式来接收来自客户端的连接,当一个连接建立后,Redis 内部会进行以下一些操作:首先,客户端 socket 会被设置为非阻塞模式,因为 Redis 在网络事件处理上采用的是非阻塞多路复用模型。然后为这个 socket 设置 TCP_NODELAY 属性,禁用 Nagle 算法然后创建一个可读的文件事件用于监听这个客户端 socket 的数据发送。在 Redis2.4 中,最大连接数是被直接硬编码在代码里面的,而在2.6版本中这个值变成可配置的。maxclients 的默认值是 10000,你也可以在 redis.conf 中对这个值进行修改。
--获取最大连接数
config get maxclients
--在服务启动时设置最大连接数为 100000
redis-server --maxclients 100000
|