redis五大基本类型和三种特殊类型

基础知识

  1. 默认有16个数据库

    select 3		切换数据库
    DBSIZE			数据库大小
    keys *			查看所有键
    flushdb			清空数据库
    flushall		清空全部
    EXISTS name		判断那么是否存在
    move name		移除name
    EXPIRE name 10	设置存活时间(秒)
    ttl name		看name还能活多久
    type name		查看类型
    
  2. 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

你可能感兴趣的:(redis)