Redis基础

Redis命令

基本命令

#测试连接,返回pong连接成功
ping
#切换数据库 select [index]
select 1
#查看数据库大小
dbsize
#查看所有的key
keys *
#清空所有
flushall
#清空当前数据库
flushdb
#判断是否存在key exists [key]
exists name
#移动key到另一个数据库 move [key] [db]
move name 1
#设置key过期时间 expire [key] [second]
expire name 10
#查看key剩余时间 ttl [key]
ttl name
#移除key del [key]
del name
#查看key的类型 type [key]
type name
#设置基本值 set [key] [value]
set name zhangsan
#获取key
get name
#测试并发:100个并发连接 100000请求
redis-benchmark -h localhost -p 6379 -c 100 -n 100000

String 类型

String 除了字符串类型还能是数字类型

  • 计数器
  • 统计多单位数量
  • 粉丝数
  • 对象缓存存储
#设置多个值 mset [key] [value] [key1] [value2] ....
mset name komorebi name1 komorebi
#获取多个值 mget [key] [key1] 
mget name name1
#设置一个值,指定时间过期 setex [key] [second] [value]
setex name 30 hello
#设置一个值,如果该值已经存在,则不设置 setnx [key] [value]
setnx name hello
#设置多个值,同时判断值是否存在,存在则全部不创建(要么一起成功,要么一起失败)msetnx [key] [value] [key1] [value2] ....
msetnx name komorebi name1 komorebi
#向String类型的key中追加字符 append [key] [value]
#如果追加的key在当前数据库不存在,则相当于set key
append name "hello"
#获取字符串长度 strlen [key]
strlen name
#自增1 incr [key]
incr views
#指定数字增加 incrby [key] [num]
incrby views 10
#自减1 decr [key]
decr views
#指定数字减少 decrby [key] [num]
decrby views 10
#字符串范围 getrange [key] [begin] [end]
#后面为-1 为开区间
getrange name 0 3
getrange name 0 -1
#替换指定位置开始的字符串 setrange [key] [index] [value]
setrange name 1 xx
#设置对象 set [key]:[id]{[key1]:[value1],[key2]:[value2]}
#mset [key]:[id]:[key1] [value1] [key]:[id]:[key2] [value2]
set user:1{name:zhangsan,age:3}
mset user:1:name zhangsan user:1:age 3
#得到上一个值,设置下一个值 不存在就直接set getset [key] [value]
getset name komorebi

List 类型(列表)

#向list中添加值,插入的时候为列表的头部,最后一个插入的下标为0 lpush [key] [value]
lpush list one
lpush list two
lpush list three
#向list中的列表尾部添加值,下标为最后一位 rpush [key] [value]
rpush list right
#获取list中的所有值 lrange [key] [begin] [end]
lrange list 0 -1
#获取list中的指定值
lrange list 0 1
#移除list中的第一个元素 lpop [key]
lpop list
#移除list中的最后一个元素 rpop [key]
rpop list
#通过下标获取list中的某一个值 lindex [key] [index]
lindex list 0
#获取list中的长度 llen [key]
llen list
#移除list中的一个值 数字可以为>0 =0 <0 或者为其他数字
lrem list 1 one

Set 类型(集合)

#set中的值不能重复
#添加
sadd myset "hello"
#查看所有元素
smembers myset
#判断当前值是不是存在set中
sismember myset hello
#查看当前set值的个数
scard myset
#移除某一个元素
srem myset hello
#随机抽取元素(可以指定个数)
srandmember myset 2
#随机移除一个元素
spop myset
#将元素从一个set移动到另一个set
smove myset1 myset2 hello
#求两个set的差集
sdiff myset1 myset2
#求两个set的交集
sinter myset1 myset2
#求两个set的并集
sunion myset1 myset2

Hash 类型(map)

本质上和String类型没有什么区别

#创建一个hash
hset myhash field1 hello
#查询hash中的值
hget myhash field1
#设置多个值 会覆盖
hmset myhash field1 hello field2 world
#获取多个值
hmget myhash field1 field2
#获取hash里所有的键值对
hgetall myhash
#删除某个字段
hdel myhash field1
#获取hash的长度
hlen myhash
#判断hash中的某个field是否存在
hexists myhash field1
#只获得所有的field
hkeys myhash
#只获得所有的值
hvals myhash
#给hash中的指定field值自增 如果设置-1相当于自减
hincrby myhash field1 1
#判断是否存在,不存在就创建
hsetnx myhash field2 hello

Zset 类型(有序集合)

在set的基础上增加了值

#添加(需要添加一个数来进行排序)
zadd myset 1 one
zadd myset 2 two
#获取所有的值
zrange myset 0 -1
#从高到低获取所有的值
zrevrange myset 0 -1
#设定查询的范围(-inf +inf表示负无穷到正无穷,withscores表示加上参数)
zrangebyscore myset -inf +inf
zrangebyscore myset 1 2 withscores
#查看存在多少个元素
zcard myset
#移除对应的元素
zrem myset hello
#判断区间内共有多少元素
zcount myset 1 3

geospatial(地理位置)

geo的底层实现原理其实就是Zset

可以使用zset命令操作geo

#一般直接通过java程序一次性导入
#参数 key 经度 纬度 名称
#geoadd 添加指定的经纬度 可以同时添加多个
geoadd china:city 121.47 31.23 shanghai
#geopos获取经纬度
geopos china:city shanghai
#geodist获取两地之间的距离 单位m:米,km:千米,mi:英里,ft:英尺
geodist china:city shanghai beijing km
#georadius以给定的经纬度为中心,找key范围内的元素
#后面跟withdist为直线距离 withcoord为显示经纬度 count设置获取多少个
georadius china:city 116 30 1000 km withdist withcoord count 3
#以已有元素位置为中心,找范围内的元素 其他参数与georadius一样
georadiusbymember china:city beijing 1000 km
#将二维的经纬度转换为一维的字符串,如果字符串越接近,那么距离越近
geohash china:city beijing

hyperloglog(基数统计算法)

什么是基数

A{1,3,5,7,8,7,8}

B{1,3,5,7,8,8}

基数(不重复的元素的个数)=5,可以接受误差

#添加元素
pfadd mykey a b c d e f g
#统计元素的个数
pfcount mykey
#合并两个集合为mykey3(去掉重复元素)
pfmerge mykey3 mykey mykey2

bitmaps

位存储

一般用于存储0和1两种状态

#设置位存储 第一位表示下标 第二位存1或者0
setbit sign 0 0
#查询某一位的状态
getbit sign 0
#统计为1的状态
bitcount sign
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,492评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,048评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,927评论 0 358
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,293评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,309评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,024评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,638评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,546评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,073评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,188评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,321评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,998评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,678评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,186评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,303评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,663评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,330评论 2 358

推荐阅读更多精彩内容