简单记录Redis命令

Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API
简言之:redis可做用于数据库,缓存,消息中间件mq

1.关于redis基础命令{不区分大小写}:
1.1.1redis有16个库,切换库用select 0/7
1.2. dbsize 库大小
1.3. keys * 查看当前库所有key
1.4. flushdb(清除当前库),flushall(清除所有库数据)
1.5.get name 获取,set name xzy(设置name为xzy的一条数据)
1.5.1 exists name (key为name是否存在)
1.5.2 expire name 10 设置name设置后10s过期
1.5.3 ttl name 查询倒计时
1.5.4 move name 1 移除当前的key
1.5.5 type name 查看key的类型
1.6. 6379默认端口号(一个意大利女星的名字手机上的数据),mysql3306(女儿的名字)
1.7.redis是基于内存操作,cpu不是redis的性能瓶颈,内存和网络带宽才是,可以使用单线程来实现
1.8.redis是c语言写的,官方数据:10w+ Qps,

误区1:高性能服务器一定是多线程
误区2:多线程一定比单线程快
cpu>内存>硬盘
核心: redis 是将所有的数据全部放在内存中的,所以说使用单线程去操作效率就是最高的,多线程(CPU上下文会切换:耗时的操作!!!),
对于内存系统来说,如果没有上下文切换效率就是最高的!多次读写都是在一个CPU上的,在内存情况下,这个就是最佳的方案!


2.五大数据类型
redis-key

2.1 string 
>append name 'xch' 往name的这个key后面追加xch字符(无key则新建)
>strlen name 获取字符串的长度
>set v 0
>incr v (值+1)
>decr v (值-1)
>incrby v 10 (设置步长,值+10)
>decrby v 10 (设置步长,值-10)
>getrange name 0 2 (截取切片)
>setrange name 1 xx (分片取值后进行替换)
>setex(set with expire) 设置过期时间
>setnx(set if not exist) 不存在再设置(在分布式锁中常用到)
>mset set a b c d e (批量设置key)
>msetnx a b c d e (已经有值则不成功,要么全失败要么全成功)
>set user:1{name:xzy,age:30}
>mset user:1:name xzy user:1:age 30 (高阶一点:设置user:1中name和age的值)
>mget user:1:name user:1:age (查询user:1中的name,age的值)
getset (先get再set)
>getset db redis #如果不存在值则返回nil
nil
>getset db mysql #如果存在值则返回原来的值,并设置新的值
redis
>get db
mysql

2.2 list
所有list命令都是以‘l’开头的
>lpush list one  (默认往左边添加)
>lpush list two
>lpush list three
>lrange list 0 -1
1)'three'
2)'two'
3)'one' 
>lange 0 1 (倒序取值)
1)'three'
2)'two'
>rpush list four (放在右边)
>lrange 0 -1
1)'three'
2)'two'
3)'one' 
4)‘four’
>lpop list (移除左边)
‘three’
>rpop list (移除右边)
'four'
>lindex list 1 (通过下标获取值)
'one'
>llen list (获取列表的长度)
2
>lrem list 1 one        (移除指定几个值,如果要移除2个则:lrem list 2 one)

trim #修剪
>ltrim  list 1 2 (截取指定长度)
>lrange list 0 -1
1)'two'
2)'three'

rpoplphsh:(先移除在添加到另一个新的列表)
>rpopphsh list otherlist (将list列表中右侧值移动到otherlist 列表中)

>exist list (判断列表是否存在)
>lset list 0 a (更新指定列表指定下标的值,列表或者下标不存在都会报错)

linsert list before/after 'one' 'ten'  (将某个值插入列表值的前面或者后面)


2.3 set (所有的命令都加‘s’)#无序不重复集合
>sadd myset 'hello'          #添加集合元素
(integer)1
>sadd myset 'world'
(integer)1
>smembers myset            #查询集合元素
1)'hello'
2)'world'
>sismember myset hello          #判断集合中是否有元素
(integer)1
>sismember myset hi
(integer)0
>scard myset          #获取set集合中的元素个数
>srem myset hello         #移除set中的指定元素
>srandmember myset         #随机抽选出一个元素
>spop myset         #随机移除集合元素
>smove set1 'hello' set2          #将集合1中指定元素移到集合2中
set1{a,b,c},set2{c,d,e}
>sdiff set1 set2           #以set1做基准取差集
'a','b'
>>sinter set1 set2           #交集
'c'
>sdiff set1 set2           #并集
a,b,c,d,e


2.4 hash map集合(与string类型操作类似)
所有的命令都加‘h’
>hset myhash field xzy
(integer)1
>hget myhash field
xzy
>hmset myhash f1 xzy f2xch #同时设置多个key-value
ok
>hmget myhash f1 f2
1)xzy
2)xch
>hgetall myhash #获取所有值
>hdel myhash f1 #删除指定的key-value
>hlen myhash f1  #获key为f1的value长度
>hexists myhash f1 #判断hash中指定字段是否存在
>hkeys myhash #查询所有的key值
>hvals myhash #查询所有的value值
>hset myhash f3 10
>hincrby/hdecrby myhash f3 2 #hash 中指定key步长自增
>hsetnx myhash f4 zj  #添加key-value,没有的话添加成功,有的话添加不了
(integer)1
>hsetnx myhash f4 zjj
(integer)0

hash的应用:用户信息,经常变动的信息,适合对象的存储

2.5 zset(有序集合)
所有的命令都加‘z’
>zadd myzset 1 one 2 two 3 three     #增加集合数据
(integer)3
>zrange myzset 0 -1                          #查询所有集合数据
>zadd myzset 1000 zhangsan 
>zadd myzset 250 lisi 
>zadd myzset 5000 wangwu 
>zrangebyscore myzset -inf +inf         #从小到大排序所有用户
1)lisi
2)zhangsan
3)wangwu

>zrangebyscore myzset -inf +inf withscores         #显示全部用户且带值
1)lisi
250
2)zhangsan
1000
3)wangwu
5000
>zrangebyscore myzset -inf 2500 withscores         #显示值小于2500的数据升序
1)lisi
250
2)zhangsan
1000
>zrevrange myzset 0 -1 #从大到小排序
wangwu
lisi
>zrem myzset zhangsan         #移除某个特定元素
>zcard myzset         #获取有序集合的个数
>zcount myzset 1 2 获取有序集合范围区间内的个数

3三种特殊数据类型
3.1 geospatial
geo:geospatial (地理位置经纬度) redis3.2版本推出(基于zset底层封装的,所以也可用zset命令来操作)
6个命令:
>geoadd china:city 116.4 39.9 beijing         #添加城市的经纬度
>geoadd china:city 120.4 45.9 shanghai
>geoadd china:city 106.4 29.9 chongqin
>geopos china:city bejing         #获取特定城市的经纬度
>geodist china:city bejing shanghai km          #2个城市的距离,,单位:m,km,mi(英里),ft(英尺)
>georadius china:tity 110 30 1000km          #查找某个经纬度为中心半径为1000km的数据
>georadius china:tity 110 30 1000km withdist          #显示到中间距离的位置
>georadius china:tity 110 30 1000km withcoord          #显示他人的定位信息
>georadius china:tity 110 30 1000km withcoord count          #筛选指定结果
>georadiusbymember china:tity benjing 1000km         #找出位于指定元素周围的其他元素
>geohash china:city benjing #经纬度的字符串(将二维的经纬度转换为一维的字符串)


3.2 hyperloglog 基数(不重复的元素)基数统计的算法
应用于uv
>pfadd mykey a b c d e f g h i j #添加一组元素
(integer)1
>pfcount mykey #统计元素基数数量
10
>pfadd mykey2 i j z x c v b n m
(integer)1
> pfmerge mykey3 mykey mykey2 将mykey mykey 合并到mykey3中
>pfcount mykey3 #查看并集的数量
15

3.3 bitmaps (位存储) 值只有0或者1,适用于只有2种状态的记录
>setbit sign 0 1 #设置一组数据如周一到周五的打卡情况
>setbit sign 1 1
>setbit sign 2 0
>setbit sign 3 1
>setbit sign 4 0
>getbit sign 0 #获取打卡情况
1
>getbit sign 4
0
>bitcount sign  #统计打卡的天数
(integer)3 


run redis run !!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值