基础知识
-
默认有16个数据库
select 3 切换数据库 DBSIZE 数据库大小 keys * 查看所有键 flushdb 清空数据库 flushall 清空全部 EXISTS name 判断那么是否存在 move name 移除name EXPIRE name 10 设置存活时间(秒) ttl name 看name还能活多久 type name 查看类型
-
Redis是单线程的。因为数据都在内存中,多线程的切换会影响一些效率所以用单线程
String
set name ck 插入key-name value-ck
get name 获得name的值,如果不存在相当于set
APPEND name kkk 追加字符串kkk
STELEN name 获取长度
incr num 加1
INCRBY num 10 加10
decr num 减1
DECRBY num 10 减10
GETRANGE str 0 3 截取0-3的字符,0--1为获取所有
SETRANGE str 3 xx 替换从3开始的为xx
setx str 10 "hi" 设置过期时间
setnx str "hi" 如果不存在才set
mset a1 ck a2 ci 一次设置多个值
mget a1 a2 一次获得多个键的值
msetnx a1 sk a4 dn 不存在才mset,如果有一个存在就全失败
getset str hi 先get在set
对象
set user:1 {name:zhangsan,age:3} 设置到json字符串中
mset user:1:name zhangsan user:1:age 2
List
可以当成队或栈来使用,底层链表
127.0.0.1:6379> lpush list one 从左边开始插入
(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"
127.0.0.1:6379> rpush list four 从右边插入
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
4) "four"
127.0.0.1:6379> lpop list 从左边弹出
"three"
127.0.0.1:6379> rpop list 从右边弹出
"four"
127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"
127.0.0.1:6379> lindex list 0 从左边获得,右边同理
"two"
127.0.0.1:6379> lindex list 1
"one"
127.0.0.1:6379> llen list 列表长度
(integer) 2
127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "two"
3) "one"
127.0.0.1:6379> lrem list 2 two 移除具体的值,数字是移除几个,
(integer) 2 从l就是从左往又找2个
127.0.0.1:6379> lrange list 0 -1
1) "one"
127.0.0.1:6379> lpush list 1
(integer) 1
127.0.0.1:6379> lpush list 2
(integer) 2
127.0.0.1:6379> lpush list 3
(integer) 3
127.0.0.1:6379> lpush list 4
(integer) 4
127.0.0.1:6379> ltrim list 1 2 截断列表
OK
127.0.0.1:6379> lrange list 0 -1
1) "3"
2) "2"
127.0.0.1:6379> lrange list 0 -1
1) "3"
2) "2"
127.0.0.1:6379> rpoplpush list list1 list中右边弹出,然后左边
"2" push到list1
127.0.0.1:6379> lrange list 0 -1
1) "3"
127.0.0.1:6379> lrange list1 0 -1
1) "2"
127.0.0.1:6379> lset list 0 haha 指定位置的值替换,列表不
OK 存在报错,位置不存在也会报
127.0.0.1:6379> lrange list 0 -1 错
1) "haha"
127.0.0.1:6379> linsert list after haha hehe
(integer) 2 在haha后面插入hehe,也可以
127.0.0.1:6379> lrange list 0 -1 用before
1) "haha"
2) "hehe"
Set
元素不可重复
127.0.0.1:6379> sadd set hi 设置值
(integer) 1
127.0.0.1:6379> sadd set ha
(integer) 1
127.0.0.1:6379> sadd set hu
(integer) 1
127.0.0.1:6379> SMEMBERS set 读取值
1) "hi"
2) "hu"
3) "ha"
127.0.0.1:6379> SISMEMBER set hi 判断值是否存在
(integer) 1
127.0.0.1:6379> SCARD set 获得set的数量
(integer) 3
127.0.0.1:6379> srem set hi 移除指定元素
(integer) 1
127.0.0.1:6379> SMEMBERS set
1) "hu"
2) "ha"
127.0.0.1:6379> SRANDMEMBER set 获得随机元素
"ha"
127.0.0.1:6379> SRANDMEMBER set
"hu"
127.0.0.1:6379> SRANDMEMBER set 2 获得随机两个元素
1) "ha"
2) "hu"
127.0.0.1:6379> spop set 随机移除原处
"hu"
127.0.0.1:6379> SMEMBERS set
1) "hi"
2) "hu"
3) "ha"
127.0.0.1:6379> SMOVE set set1 hi 移动元素到另外一个set
(integer) 1
127.0.0.1:6379> SMEMBERS set
1) "hu"
2) "ha"
127.0.0.1:6379> SMEMBERS set1
1) "hi"
127.0.0.1:6379> SINTER set set1 交集(共同好友)
1) "hi"
127.0.0.1:6379> SUNION set set1 并集
1) "hi"
2) "ha"
3) "hu"
127.0.0.1:6379> SDIFF set set1 差集
1) "ha"
2) "hu"
Hash
k-v键值对
127.0.0.1:6379> hset hash k1 a 设置值
(integer) 1
127.0.0.1:6379> hget hash k1 获取值
"a"
127.0.0.1:6379> hmset hash k1 b k2 c 设置多个值,如果存在键,则
OK 覆盖
127.0.0.1:6379> hmget hash k1 k2 获取多个值
1) "b"
2) "c"
127.0.0.1:6379> HGETALL hash 获取所有键值对
1) "k1"
2) "b"
3) "k2"
4) "c"
127.0.0.1:6379> hdel hash k1 删除指定的键,对应值也删除
(integer) 1
127.0.0.1:6379> HLEN hash 获取长度
(integer) 1
127.0.0.1:6379> HEXISTS hash k1 判断指定字段是否存在
(integer) 0
127.0.0.1:6379> HKEYS hash 获取所有键
1) "k2"
127.0.0.1:6379> HVALS hash 获取所有值
1) "c"
127.0.0.1:6379> HINCRBY hash k1 1 加1
(integer) 4
127.0.0.1:6379> HINCRBY hash k1 -1 减1
(integer) 3
127.0.0.1:6379> hsetnx hash k1 a 存在就不插入,不存在才插入
(integer) 0
Zset
有顺序的set
127.0.0.1:6379> zadd zset 1 one 插入,权重和值
(integer) 1
127.0.0.1:6379> zadd zset 2 two
(integer) 1
127.0.0.1:6379> zadd zset 3 three
(integer) 1
127.0.0.1:6379> ZRANGE zset 0 -1 获得zset
1) "one"
2) "two"
3) "three"
127.0.0.1:6379> ZRANGEBYSCORE zset -inf +inf 按分数从小到大
1) "one"
2) "two"
3) "three"
127.0.0.1:6379> ZREVRANGE zset 0 -1 从大到小
1) "three"
2) "two"
127.0.0.1:6379> ZRANGEBYSCORE zset -inf +inf withscores
1) "one" 按分数从小到大同时显示分数
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
127.0.0.1:6379> ZREM zset one 移除
(integer) 1
127.0.0.1:6379> zcard zset 获取个数
(integer) 2
127.0.0.1:6379> ZCOUNT zset 1 2 获得指定区间的数量
(integer) 1
Geospatial 地理位置
底层其实是zset
添加地区 纬度 经度 名称
127.0.0.1:6379> GEOADD china:city 116.40 39.90 beijing
(integer) 1
127.0.0.1:6379> GEOADD china:city 121.47 31.23 shanghai
(integer) 1
127.0.0.1:6379> GEOADD china:city 106.50 29.53 chongqing
(integer) 1
127.0.0.1:6379> GEOADD china:city 120.16 30.24 hangzhou
(integer) 1
127.0.0.1:6379> GEOPOS china:city beijing hangzhou
1) 1) "116.39999896287918091" 获得城市经纬度
2) "39.90000009167092543"
2) 1) "120.1600000262260437"
2) "30.2400003229490224"
获得两个地方的直线距离,默认单位m m米、km千米、mi英里、ft英尺
127.0.0.1:6379> GEODIST china:city beijing hangzhou km
"1127.3378"
找110 30 半径500km的城市 这个功能可以用来实现附近的人功能
127.0.0.1:6379> GEORADIUS china:city 110 30 500 km
1) "chongqing"
以杭州为中心,半径1000km的城市
127.0.0.1:6379> GEORADIUSBYMEMBER china:city hangzhou 1000 km
1) "hangzhou"
2) "shanghai"
返回11个字符的geohash字符串,讲2维的经纬度降到1维的字符串
127.0.0.1:6379> GEOHASH china:city beijing
1) "wx4fbxxfke0"
Hyperloglog
统计不重复元素个数
2^64只占12kb内存
0.8%的错误率
存入元素
27.0.0.1:6379> PFADD key a b c d e f g h i j k l m n o p q r s t
(integer) 1
127.0.0.1:6379> PFCOUNT key 查询个数
(integer) 19
27.0.0.1:6379> PFADD key1 a b c x y z
(integer) 1
127.0.0.1:6379> PFMERGE key2 key key1 合并两个Hyperloglog
OK
127.0.0.1:6379> PFCOUNT key2
(integer) 22
Bitmap
Bitmaps位图,操作二进制位来记录。统计用户活跃不活跃,登陆没登陆等
127.0.0.1:6379> setbit bitmap 0 0 设置值,第一个数第几位,
(integer) 0 第二个数表示0、1
127.0.0.1:6379> setbit bitmap 1 0
(integer) 0
127.0.0.1:6379> setbit bitmap 2 1
127.0.0.1:6379> getbit bitmap 1 获取第几位的值
(integer) 0
127.0.0.1:6379> bitcount bitmap 获得1的数量
(integer) 2