Redis

Redis第4️⃣课 String

2019-04-26  本文已影响1人  小超_8b2f

一、字符串键值结构

key type value
hello string world
counter int 1
bits 二进制 010101
cat json {"name":"hello kitty","age":3,"color":"white"}

场景:

  1. 缓存
  2. 计数器
  3. 分布式锁
  4. 等等

命令:
get、set、del
类型:integer
时间复杂度 :o(1)

命令 解释 异常返回
set key value 设置 key-value(无论key是否存在)
setnx key value key不存在才设置value 【insert】
set key value xx key存在才设置value【update】
get key 获取key 对应的value (nil)
del key 删除key-value (integer) 0
incr key key自增1
如果key不存在,自增后get(key)=1
(error) not int ...
decr key key自减1
如果key不存在,自减后get(key)=-1
同上
incrby key k key自增key
如果key不存在,自增后get(key)=k
同上
decrby key k key自减key
如果key不存在,自增后get(key)=-k
同上
127.0.0.1:6379> del key1 key2
(integer) 2
127.0.0.1:6379> exists key1
(integer) 0
127.0.0.1:6379> setnx key1 value1
(integer) 1
127.0.0.1:6379> setxx key1 value2
(error) ERR unknown command 'setxx'
127.0.0.1:6379> set key1 value2 xx
OK
127.0.0.1:6379> get key1
"value2"
127.0.0.1:6379> set key2 value1 xx
(nil)
127.0.0.1:6379> set counter 100
OK
127.0.0.1:6379> incr counter
(integer) 101
127.0.0.1:6379> incr counter
(integer) 102
127.0.0.1:6379> incr counter
(integer) 103
127.0.0.1:6379> incrby counter 10
(integer) 113
127.0.0.1:6379> decr counter 
(integer) 112
127.0.0.1:6379> decr counter 
(integer) 111
127.0.0.1:6379> decr counter 
(integer) 110
127.0.0.1:6379> decrby counter 10
(integer) 100
127.0.0.1:6379> get counter
"100"
命令 解释 异常返回
setnx key value key不存在才设置value 【insert】
set key value xx key存在才设置value【update】 (nil)
mset key1 value1 key2 value2... 批量设置key,value o(n)
mget key1 key2 key3 ... 批量获取多个key的值
get太多个值也得做拆分
eg:把10w拆成10个1w的mget
o(n)
127.0.0.1:6379> del key1 key2
(integer) 2
127.0.0.1:6379> exists key1
(integer) 0
127.0.0.1:6379> setnx key1 value1
(integer) 1
127.0.0.1:6379> setnx key1 value2
(integer) 0
127.0.0.1:6379> setxx key1 value3
(error) ERR unknown command 'setxx'
127.0.0.1:6379> set key1 value3 xx
OK
127.0.0.1:6379> get key1
"value3"
127.0.0.1:6379> set key2 value1 xx
(nil)
127.0.0.1:6379> mset key1 value1 key2 value2 key3 value3_3
OK
127.0.0.1:6379> mget key1 key2 key3
1) "value1"
2) "value2"
3) "value3_3"
127.0.0.1:6379> mget key1 key2 key100
1) "value1"
2) "value2"
3) (nil)
命令 解释 异常返回
getset key newValue set key newValue 并返回oldValue
append key value 将value 追加到旧的value后
strlen 返回字符串的长度(注意中文)
127.0.0.1:6379> get hello
"world"
127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> getset hello php
"world"
127.0.0.1:6379> append hello ,java
(integer) 8
127.0.0.1:6379> get hello
"php,java"
127.0.0.1:6379> strlen hello
(integer) 8
127.0.0.1:6379> set hello "足球"
OK
127.0.0.1:6379> strlen hello
(integer) 6
127.0.0.1:6379> get hello
"\xe8\xb6\xb3\xe7\x90\x83"
命令 解释 异常返回
incrbyfloat key 3.5 增加key对应的值3.5 ,可以写负数
getrange key start end 获取字符串指定下标的子串
setrange key index value 设置指定下标的值
127.0.0.1:6379> set key 3.5
OK
127.0.0.1:6379> get key
"3.5"
127.0.0.1:6379> incrbyfloat key 3.5
"7"
127.0.0.1:6379> set key1 sss
OK
127.0.0.1:6379> incrbyfloat key1 3.5
(error) ERR value is not a valid float
127.0.0.1:6379> set key1 5
OK
127.0.0.1:6379> incrbyfloat key1 3.5
"8.5"
127.0.0.1:6379> incrbyfloat key1 -3.5
"5"
127.0.0.1:6379> set hello javabest
OK
127.0.0.1:6379> getrange hello 0 3
"java"
127.0.0.1:6379> setrange 0 H
(error) ERR wrong number of arguments for 'setrange' command
127.0.0.1:6379> setrange hello 0 H
(integer) 8
127.0.0.1:6379> get hello
"Havabest"
实战:实现如下功能
  1. 记录网站每个用户个人主页的访问量
incr userid:pageView  (单线程,无竞争)
  1. 缓存视频的基本信息(数据源在MySQL中)伪代码
public VedioInfo get(long id) {
    String redisKey = redisPrefix + id;
    VedioInfo info = redis.get(redisKey);
    if(info == null) {
        info = mysql.getById(id);
        if(info != null)
            redis.set(redisKey,serialize(info));//序列化
    }
}
redis缓存信息获取图解

3.分布式id生成器


多应用共享id生成器图解 多次get耗费多次网络时间 mget可以节省网络时间

incr idKey (原子操作)

三、哈希类型

四、列表类型

五、集合类型

六、有序集合类型

上一篇 下一篇

猜你喜欢

热点阅读