五大数据类型
key操作
.....bin/redis-cli 连接Redis
keys * 查看当前库所有key
exists key 判断某个key是否存在
type key 查看你的key是什么类型
del key 删除指定的key数据
unlink key 根据value选择非阻塞删除
仅将keys从keyspace元数据中删除,真正删除会在后续异步操作
expire key 10 10秒钟:给给定的key设置过期时间
ttl key 查看还有多少秒过期,-1表示永不过期、-2表示已过期
select 数字 命令切换数据库,0-15,一共16个数据库,从零开始
dbsize 查看当前数据库key的数量
flushdb 清空当前库
flushall 通杀全部库
string类型
一个Redis中字符串value最多可以是512M
key中存储的是value
-----------------------简单动态字符串
set <key><value> 添加键值对,可以覆盖原有的键值对
get <key> 查询对应的键值
append <key><value> 将给定的<value>追加到原值末尾
strlen <key> 获取值得长度
setnx <key><value> 只有在key不存在时,设置key值,存在时不能覆盖、替换
incr <key> 将key中存储的数字值增1(value)
只能对数字值操作,如果为空,新增值为1
decr <key> 将key中存储的数字值减1
只能对数字值操作,如果为空,新增值为-1
incrby/decrby <key><步长> 将key中存储的数字值增减。自定义步长
--- 是原子操作,不会被线程调度机制打断的操作
mset <key1><value1><key2><value2>........
同时设置一个和多个key-value对
mget <key1><key2><key3>...... 同时获取一个和多个value
msetnx <key1><value2><key2><value2>......
同时设置一个和多个key-value对,当且仅当所有给定的key都不存在
getrange <key><起始位置><结束位置>
获得值的范围,类似于substring
setrange <key><起始位置><value>
用<value>覆写<key>所存储的字符串值,从<起始位置>开始(索引从0开始)
setex <key><过期时间><value> 设置键值的同时,设置过期时间,单位秒
getset <key><value> 以新换旧,设置了新值同时获得旧值
Redis列表—list
单键多值
双向链表,存值按照链表特点, 先进后出,后进先出
将链表和压缩链表ziplist结合起来形成quicklist
lpush/rpush <key><value1><value2><value3>...... 从左边/右边插入一个或多值
lpop/rpop <key> 从左边/右边吐出一个值。**值在键在,值光键亡**
rpoplpush <key1><key2> 从<key1>列表右边吐出一个值,插入到<key2>左边
lrange <key><start><stop> 按照索引下标获得元素(从左到右)
**0到-1代表所有值**
lindex <key><index> 按照索引下标获取单个元素(从左到右)
llen <key> 获取列表长度
linsert <key> before <newvalue><value> 在<value>的前面插入<newvalue>插入值
linsert <key> after <value><newvalue> 在<value>的后面插入<newvalue>插入值
lrem <key><n><value> 从左边删除n个value(从左到右)
lset <key><index><value> 将列表key下标为index的值替换为value
Redis集合—set
自动排重的
无序的集合,底层是hash表。所有value都指向同一个内部值 ,复杂度是1
sadd <key><value1><value>
将一个 或多个member元素加入到集合key中
已经存在的member元素将被忽略
smembers <key> 取出该集合所有值
sismember <key><value> 判断集合<key>是否含有该<value>值,有1,没有0,
scard <key> 换回该集合元素个数
srem <key><value1><value2>. 删除集合中元素
spop <key> 随机从该集合中吐出一个值
srandmember <key><n> 随机从集合中取出n个值,不会从集合中删除
smove <key1><key2><value> 把value从第一个集合中移动到另一个集合中
如果另一个集合中存在该元素,不作添加操作、
sinter <key1><key2> 返回两个集合交集元素
sunion <key1><key2> 返回两个集合并集元素
sdiff <key1><key2> 返回两个集合差集元素(key1中的,不包含key2中的)
Redis—哈希(hash)
数据类型有两种:短---ziplist(压缩列表),长---hashtable(哈希表)
hest <key><field><value> 给<key>集合中的<field>键赋值<value>
hget <key1><field> 从<key1>集合<field>取出value
hmst <key1><field1><value1><field2><value2>... 批量设置hash值
hexists <key1><field> 查看哈希表key中,给定域field是否存在
hkeys <key> 列出该hash集合中所有field
hvals <key> 列出该hash集合中所有的value
hincrby <key><field><increment> 为哈希表key中的域field的值加上增量increment
hsetnxbn <key><field><value> 将哈希表中的域field的值设置为value
当且仅当域field不存在
Redis有序集合zset
Redis有序集合zset与普通集合set相似,没有重复元素的字符串集合
每个成员都关联了一个评分(score),集合成员是唯一的,但是评分可以重复了
评分(score)被用来从低到高排序集合中成员
zadd <key><score1><value1><score2><value2>...
将一个或多个member元素及其score值加入到有序集合key当中
zrange <key><start><stop>[WITHSCORES]
返回有序集合key中,下标在<start><stop>之间的元素
带WITHSCORES,可以让分数一起和值返回到结果集
zrangebyscore <key> <min> <max> [WITHSCORES] [limit offset count]
返回有序集合key中,所有的score值介min和max之间(包括min或max)的成员
有序集成员按score值递增(从小到大)次序排列,
zrevrangbyscore <key> <max> <min> [WITHSCORES] [limit offset count]
同上,从大到小 排列
zincrby <key><increment><value> 为元素的score加上增量increment
zrem <key><value> 删除该集合下,指定值元素
zcount <key><min><max> 统计该集合,分数区间内的元素个数
zrank <key><value> 返回该值在集合中的排名,从0开始
发布与订阅
Redis发布订阅(PUB/SUB)是一种消息通信模式:发送者(PUB)发送消息,订阅者(sub)接收消息
Redis客户端可以订阅任意数量的频道
1,打开一个客户端订阅 channel1
SUBSCRIBE chadnel1u
2.打开另一个客户端,给channel1发布消息hellov
publish channell hellor
3.打开第一个客户端可以看到发送的消息。