全段翻译:
Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。
Redis-Key
keys * 查看所有的key
set name mmz 设置key
EXISTS name 判断当前的key是否存在
move name 1 移除当前的key
EXPIRE name 10 设置当前的过期时间,单位是秒
ttl name 查看当前key的剩余时间
type name 查看key是什么类型
String
字符串
APPEND key value
追加字符串,如果当前key不存在,就相当于set key
STRLEN key
获取字符串长度
步长i++
incr key
自增+1
decr key
自减-1
INCRBY key number
可以修改自增步长
DECRBY key number
可以修改自减步长
截取字符串
GETRANGE key 0 3
-1 是查看全部的字符串
替换字符串
SETRANGE key index value
setex (set with expire) 设置过期时间
setnx (set if no exist) 不存在设置
分布式锁常用
mset k1 v1 k2 v2 批量设置
mget k1 k2 批量获取
String类似的使用场景,valu可以是字符串也可以是数字
1)计数器
2)统计多单位的数量
3)粉丝数
List
基本的数据类型,列表
所有的list命令都是l开头
127.0.0.1:6379> LPUSH list one 将一个值或者多个值,插入到列表的头部(左边),想要添加尾部(RPUSH)
(integer) 1
127.0.0.1:6379> LPUSH list two
(integer) 2
127.0.0.1:6379> LPUSH list three
(integer) 3
127.0.0.1:6379> LRANGE list 0 -1
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> LRANGE list 0 1 通过区间获取具体的值
1) "three"
2) "two"
移除
RPOP
LPOP
获取
lindex list 0
获取指定下标的值
获取列表长度
llen list
移除指定的值
lrem llist 1 one
移除list列表中,value为one的一个值
剪裁
ltrim list 1 2
通过下标,截取这个list的指定长度,只剩下截取的元素了
移动
rpoplpush list1 list2
把list1最右边的放到list2最左边的
更新元素
lset list 0 newvalue
把lsit中的第0个元素,换成新的newvalue
必须当前列表下标当前存在
插入元素
linsert list before/after word value
向具体的值前面或者后面插入值
实际上,就是一个双向链表,
如果key不存在,创建新的链表
如果key存在,新增内容
如果移除key,空链表没有节点,代表不存在
Set
只是set中的值不能重复的,跟java中的set一样
127.0.0.1:6379> SADD myset hello 存值
(integer) 1
127.0.0.1:6379> SADD myset mmz
(integer) 1
127.0.0.1:6379> keys *
1) "myset"
127.0.0.1:6379> get myset
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379> SMEMBERS myset 得到值
1) "mmz"
2) "hello"
127.0.0.1:6379> SISMEMBER myset hello 判断是否存在
(integer) 1 1为存在
127.0.0.1:6379> SISMEMBER myset zzm
(integer) 0 0 为不存在
127.0.0.1:6379>
获取set里面的值的数量
移除set中的指定元素
srem myset xxx
set是无序不重复集合,可以随机抽奖
127.0.0.1:6379> SRANDMEMBER myset 随机抽选一个元素
"hello"
127.0.0.1:6379> SRANDMEMBER myset
"mmz"
127.0.0.1:6379> SRANDMEMBER myset
"zjz"
127.0.0.1:6379> SRANDMEMBER myset
"mmz"
127.0.0.1:6379> SRANDMEMBER myset
"hello"
127.0.0.1:6379> SRANDMEMBER myset
"mmz"
随机删除key
127.0.0.1:6379> SPOP myset 随机删除一些元素
"mmz"
127.0.0.1:6379> SMEMBERS myset
1) "zjz"
2) "hello"
讲一个指定的值,移动到另外一个key(set)中
smove set1 set2 成员xxx
并集,共同关注
数字集合类:差集,交集,并集
127.0.0.1:6379> sadd key1 a
(integer) 1
127.0.0.1:6379> sadd key1 b
(integer) 1
127.0.0.1:6379> sadd key1 c
(integer) 1
127.0.0.1:6379> sadd key2 b
(integer) 1
127.0.0.1:6379> sadd key2 c
(integer) 1
127.0.0.1:6379> sadd key2 e
(integer) 1
127.0.0.1:6379> SDIFF key1 key2 差集
1) "a"
127.0.0.1:6379> SINTER key1 key2 交集
1) "c"
2) "b"
127.0.0.1:6379> SUNION key1 key2 并集
1) "e"
2) "c"
3) "b"
4) "a"
新浪微博和B站,将所有关注的人放在一个set集合,将它的粉丝也放在一个集合中
共同关注,共同爱好,二度好友(推荐好友,六度分割理论)
Hash
map集合,key-value(现在value变成Map),key-<key,value>
127.0.0.1:6379> hset myhash name mmz 设置
(integer) 1
127.0.0.1:6379> hget
(error) ERR wrong number of arguments for 'hget' command
127.0.0.1:6379> hget myhash
(error) ERR wrong number of arguments for 'hget' command
127.0.0.1:6379> hget myhash name 得到,必须加上field
"mmz"
当然hmset 也可以设置
127.0.0.1:6379> FLUSHALL
OK
127.0.0.1:6379> hmset myhash name1 mmz1 name2 zjz name3 duoduo
OK
127.0.0.1:6379>
127.0.0.1:6379> HGETALL
(error) ERR wrong number of arguments for 'hgetall' command
127.0.0.1:6379> HGETALL myhash 得到所有
1) "name1"
2) "mmz1"
3) "name2"
4) "zjz"
5) "name3"
6) "duoduo"
删除,hdel
127.0.0.1:6379> HDEL myhash name1 删除
(integer) 1
127.0.0.1:6379> HGETALL myhash
1) "name2"
2) "zjz"
3) "name3"
4) "duoduo"
判断是否存在 hexists myhash field1
只获得所有的key与value
127.0.0.1:6379> hkeys myhash
1) "name2"
2) "name3"
127.0.0.1:6379> hvals myhash
1) "zjz"
2) "duoduo"
hash变更的数据 user name age 尤其是用户信息之类的,经常变动的信息!
hash更适用于存储对象,String更适用于字符串存储
Zset
有序集合,在set的基础上,增加了一个值
127.0.0.1:6379> zadd myset 1 one 增加一个值
(integer) 1
127.0.0.1:6379> zadd myset 2 two
(integer) 1
127.0.0.1:6379> zadd myset 3 three
(integer) 1
127.0.0.1:6379> ZRANGE myset 0 -1 遍历输出
1) "one"
2) "two"
3) "three"
排序遍历
127.0.0.1:6379> ZRANGE salary 0 -1
1) "mmz"
2) "xiaolong"
3) "zhansan"
127.0.0.1:6379> ZRANGEBYSCORE salary -inf inf
1) "mmz"
2) "xiaolong"
3) "zhansan"
移除元素
127.0.0.1:6379> ZREM salary xiaolong
(integer) 1
127.0.0.1:6379> zrange salary 0 -1
1) "mmz"
2) "zhansan"
存储班级成绩表,工资表排序
普通消息为1 重要消息为2 加权判断
排行榜