社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
key命令一般不在生产环境使用,key多慢。
dbsize 时间复杂度为O1级别,可以在生产环境中使用
exists 时间复杂度为O1级别,可以在生产环境中使用
可以同时删除多个
内部有一个redisObject
目的:使用更小的空间实现更优内存使用效果
(1) 单线程模型
(2)单线程快的原因
–纯内存
–非阻塞IO
–避免线程切换和竞态消耗
(3)单线程注意
–一次只运行一条命令
–拒绝长(慢)命令
keys,flushall,flushdb,slow lua script,mutil/exec,operate,big value
key 为字符串
value 可以为 字符串 数字 二进制 json对象 最大为512M
(1)缓存
(2)计数器
(3)分布式锁 …
get key : 获取key对应的value
set key value : 设置key-value
del key : 删除key-value
incr key : key自增1,如果key不存在,自增后get(key)=1
decr key : key自减1,如果key不存在,自减后get(key)=-1
incrby key k : key自增k ,如果key不存在,自增后get(key) = k
decr key k : key自减k,如果key不存在,自减后get(key)=-k
192.168.187.128:6382> get counter
(nil)
192.168.187.128:6382> incr counter
(integer) 1
192.168.187.128:6382> get counter
"1"
192.168.187.128:6382> incr counter
(integer) 2
192.168.187.128:6382> get counter
"2"
192.168.187.128:6382> incrby counter 99
(integer) 101
192.168.187.128:6382> get counter
"101"
incr userid:pageview(单线程:无竞争)
先在redis中查找,如果没有就去数据库中查找
public VideoInfo get(long id){
String redisKey = redisPrefix + id ;
Video videoInfo = redis.get(redisKey);
if(videoInfo == null){
videoInfo = mysql.get(id);
if(videoInfo != null){
//序列化
redis.set(redisKey,serialize(videoInfo));
}
}
}
set key value : 不管key是否存在 都设置
setnx key value : key不存在,才设置
set key value xx : key存在,才设置
192.168.187.128:6382> exists php
(integer) 0
192.168.187.128:6382> set php good
OK
192.168.187.128:6382> get php
"good"
192.168.187.128:6382> setnnx key java
(error) ERR unknown command 'setnnx'
192.168.187.128:6382> setnx key java
(integer) 1
192.168.187.128:6382> get php
"good"
192.168.187.128:6382> set key value java
(error) ERR syntax error
192.168.187.128:6382> set key java xx
OK
192.168.187.128:6382> get php
"good"
192.168.187.128:6382> set php java xx
OK
192.168.187.128:6382> get php
"java"
mget key1 key2 key3 : 批量获取key,原子操作
mset key1 value1 key2 value2 key3 value3 : 批量设置key-value
getset key newvalue : set key newvalue 并返回旧的value
append key value : 将value追加到旧的value
strlen key : 返回字符串的长度(注意中文)
192.168.187.128:6382> get php
"java"
192.168.187.128:6382> getset php ffff
"java"
192.168.187.128:6382> get php
"ffff"
192.168.187.128:6382> append php ",java"
(integer) 9
192.168.187.128:6382> get php
"ffff,java"
192.168.187.128:6382> strlen php
(integer) 9
192.168.187.128:6382> set hello "足球"
OK
192.168.187.128:6382> strlen hello
(integer) 4
incrbyfloat key 3.5 : 增加key对应的值3.5
getrange key start end : 获取字符串指定下标所有的值
setrange key index value : 设置指定下标所有对应的值
192.168.187.128:6382> incr counter
(integer) 102
192.168.187.128:6382> incr times
(integer) 1
192.168.187.128:6382> incrbyfloat times 1.1
"2.1"
192.168.187.128:6382> getrange times 0 2
"2.1"
192.168.187.128:6382> setrange php 4 p
(integer) 9
192.168.187.128:6382> get php
"ffffpjava"
192.168.187.128:6382>
哈希键值结构
field不能相同,value可以相同
所有的API以H开头
hget hset hdel
hget key field : 获取hash key 对应的field的Values
hset key field value : 设置hash key 对应的field的value
hdel key field : 删除hash key 对应field的value
hgetall : 获取所有的key和value
hexists key field : 判断hash key 是否有field
hlen key : 获取hash key field 的数量
192.168.187.128:6382> hexists user1 age
(integer) 0
192.168.187.128:6382> hexists user1 name
(integer) 1
192.168.187.128:6382> hash user1
(error) ERR unknown command 'hash'
192.168.187.128:6382> hlen user1
(integer) 1
hmget key field1 field2 ...fieldN : 批量获取hash key 的一批field对应的值
hmset key field1 value1 field2 value2....fieldN valueN : 批量设置hash key 的一批field value
hincrby user:1:info pageview count
public VideoInfo get(long id){
String reidsKey = redisPrefix + id ;
Map<String,String> hashMap = redis.hgetAll(redisKey);
VideoInfo videoInfo = transferMapToVideo(hasMap);
if(videoInfo == null){
videoInfo = mysql.get(id);
if(videoInfo != null){
redis.hmset(redisKey,transferVideoToMap(videoInfo));
}
}
return videoInfo;
}
hgetall key : 返回hash key对应所有的field和value
hvals key :返回hash key 对应所有field的value
hkeys key : 返回hash key对应所有的field
(1)使用String : key 为 用户id value 为用户对象
(2)使用String : key 为 每个用户的属性user:1:name value为属性的值world
(3)使用Hash : key为用户id , value 为hash表 ,方便修改
hsetnx key field value : 设置hash key对应field的value(如果field已经存在,则失败)
hincrby key field intCounter : hash key对应的field的value自增intCounter
hincrbyfloat key field floatCounter : hincrby浮点数
rpush key value1 value2 .. value3 : 从列表右端插入值
lpush key value1 value2 ...value3 : 从列表左端插入值
linsert key before|after value newValue : 在list指定的值前|后插入newValue 例:linsert listkey before b java
lpop key : 从列表左侧弹出一个item
rpop key : 从列表右侧弹出一个item
lrem key count value 根据count值 从列表中删除所有value相等的项
(1)count >0 ,从左到右,删除最多count个value相等的项
(2)count <0, 从右到左,删除最多Maht.abs(count)个value相等的项
(3)count =0 ,删除所有value相等的项
ltrim key start end : 按照索引范围修剪列表
lrange key start end (包含end) : 获取列表指定索引范围所有itme
索引从左: 0 - 5
索引从右:-1 - -6
lindex key index : 获取列表指定索引的item
llen key : 获取列表长度
lset key index newValue : 设置列表指定索引值为newValue
sadd key element : 向集合key添加element(如果element已经存在,添加失败)
srem key element : 将集合key中的element移除掉
scard user:1:follow = 4 : 计算集合大小
sismember user:1:follow it = 1 :判断it是否在集合中
srandmember user:1:follow count = his : 从集合中随机挑选count个元素
spop user:1:follow = sports : 从集合中随机弹出一个元素
smembers user:1:follow = music his sports it : 获取集合所有元素
srandmenber不会破坏集合
抽奖系统
Like,赞,踩
标签
sdiff user:1:follow user:2:follow = music his : 差集
sinter user:1:follow user:2:follow = it sports : 交集
sunion user:1:follow user:2:follow = it music his sports news end : 并集
sdiff|sinter|suion + store destkey : 将差集,交集,并集结果保存在destkey中
zadd key score element (可以是多对) : 添加score 和 element
192.168.187.128:6382> zadd user:1:ranking 244 tom
(integer) 1
192.168.187.128:6382> zadd user:1:ranking 214 jinm
(integer) 1
192.168.187.128:6382> zadd user:1:ranking d j
(error) ERR value is not a valid float
zrem
(1)zrem key element(可以是多个) : zrem user:1:ranking 225 tom
zscore
zscore key element : 返回元素的分数
192.168.187.128:6382> zscore user:1:ranking tom
"244"
zincrby key increScore element : 增加或减少元素的分数
192.168.187.128:6382> zincrby user:1:ranking 4 tom
"248"
zcard key : 返回元素的总个数
192.168.187.128:6382> zcard user:1:ranking
(integer) 2
zrange key start end [WITHSCORES] : 返回指定索引范围内的升序元素(分值)
zrange user:1:ranking 1 3 withscores
zrangebyscore key minScore maxScore [WITHSCORES] : 返回指定分数范围内的升序元素
zrangebyscore user:1:ranking 90 210 withscores
zcount key minScore maxScore : 返回有序集合内在指定分数范围内的个数
zcount user:1:ranking 200 221
zremrangebyrank key start end : 删除指定排名内的升序元素 索引
zremrangebyrank user:1:ranking 1 2
zremrangebyrank user:1:ranking 90 210
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!