清空当前数据库:flushdb
1、string (字符串)
相当于 Java 的 ArrayList
单个操作
> set name "xiaowang"
OK
> get name
"xiaowang"
> exists name
(integer) 1
> del name
(integer) 1
> get name
(nil)
批量操作
在单操作前面加 m就表示批量操作,del除外
> mset name1 xiaowang name2 xiaoli name3 xiaozhang
OK
> mget name1 name2 name3
1) "xiaowang"
2) "xiaoli"
3) "xiaozhang"
> del name1 name2 name3
(integer) 3
设置过期时间
# 对已经存在的数据设置过期时间
> set name xiaowang
OK
> expire name 5 # 5s后过期
(integer) 1
> get name
(nil)
# 添加数据时,同时对其设置过期时间
> setex name 5 xiaoai # setex就是 set + expire
OK
> ttl name #显示剩余寿命
(integer) 4
不存在时才添加
> setnx name xiaoai #如果name不存在就执行set创建
(integer) 1或者0
> set name xiaoai
> set name xiaohao #set覆盖
> get name
"xiaohao"
计数
自增是有范围的,在 signed long 的最大值和最小值之间
> set age 30
OK
> incr age
(integer) 31
> incrby age -5 //在redis客户端有效果,但是在jedis中没有效果
(integer) 26
> decr age //自减
(integer) 25
2、list (列表)
相当于 Java 的LinkedList
rpush 、lpush
rpop、lpop
一边进,一边出:栈
一边进,另一边出:队列
队列(右边进、左边出)
> rpush books python java golang #将python、java、golang放入列表books中(右边进)
(integer) 3
> llen books #计算列表books的大小
(integer) 3
> lpop books #左边出
"python"
> lpop books
"java"
> lpop books
"golang"
栈(右边进、右边出)
> rpush books python java golang #将python、java、golang放入列表books中(右边进)
(integer) 3
> llen books #计算列表books的大小
(integer) 3
> lpop books #右边出
"golang"
> lpop books
"java"
> lpop books
"python"
慢操作
索引都是从 0 开始
lindex(int)
lrange(int start, int end) :显示范围内的数据
ltrim(int start, int end) : 将不再范围内的数据删除
> rpush books python java golang
(integer) 3
> lindex books 1 # O(n)
"java"
> lrange books 0 -1 #从0(第一个)到-1(倒数第一)全部显示出来
1) "python"
2) "java"
3) "golang"
> ltrim books 1 -1 # 将不在范围(1,2...倒数第一)内的数据删除(就是删掉第一个数据)
OK
> lrange books 0 -1
1) "java"
2) "golang"
> ltrim books 1 0 # 长度范围为负数,就是亲空整个列表
OK
3、hash (字典)
相当于 Java 里面的 HashMap
渐进式rehash策略
单操作
> hset books java "think in java"
(integer) 1
> hset books golang "concurrent in golang"
(integer) 2
> hgetall books # key value 间隔出现
"java"
"think in java"
"golang"
"concurrent in golang"
> hlen books # 字典大小
(integer) 2
> hget books java # 获取"java"对应的value
"think in java"
> hset book golang "learning golang" #更新操作,返回0
(integer) 0
批量操作
> hmset books java "think in java" python "learning python"
OK
计数
同字符串一样,hash结构中的单个key也可以计数
> hset user-age age 29
(integer) 1
> hincrby user-age age 5
(integer) 34
4、set (集合)
相当于 Java 中的HashSet
> sadd books python java golang
(integer) 1
> sadd books python #失败,集合中不允许元素重复
(integer) 0
> smember books # 显示集合中所有元素,集合是无序的
1) "java"
2) "python"
3) "golang"
> sismember books java #查询某个value是否存在
(integer) 1
> scard books #获取长度
(integer) 3
> spop books #随机弹出一个
"java"
5、zset (有序列表)
类似于 Java 中的 SortedSet + HashMap
> zadd books 9.0 "thhink in java"
(integer) 1
> zadd books 8.9 "java concurrent"
(integer) 1
> zadd books 8.6 "java cookbook"
(integer) 1
> zrange books 0 -1 #列出范围内的元素,默认是从小到大!!!
1) "java cookbook"
2) "java concurrent"
3) "think in java"
> zrevrange books 0 -1 #反序列出范围内元素
1) "think in java"
2) "java concurrent"
3) "java cookbook"
> zcard books #count()
(integer) 3
> zscore books "java concurrent" #获取指定value的score
"8.9000000000000004" #内部score使用的double类型进行存储,小数点精度问题
> zrank books "java concurrent" #排名,从0开始!!!
(integer) 1
> zrangebyscore books 0 8.91 #根据score遍历zset
1) "java cookbook"
2) "java concurrent"
> zrangebyscore books -inf 8.91 withscores #根据分值区间遍历zset,同时返回score;inf表示无穷大
1) "java cookbook"
2) "8.599999999999996"
3) "java concurrent"
4) "8.900000000000004"
> zrem books "java concurrent" #删除value
(integer) 1
7、HyperLogLog 精度不高的统计数据
在redis2.8.9中才开始有,在2.8.9中:pfadd name a 会报错,至少要2个
> pfadd name a b c //增加记录信息
(integer) 1
> pfcount name
(integer) 3