2.redis五大基本数据类型

1.redis的作用

   1.数据库,缓存,mq消息中间件

2.redis-key(避免用中文)

//是否存在这个键
exists name
//移除
del aaa
//设置过期时间,时秒
EXPIRE name 10
//查看的时间
ttl name
//判断key的类型
type xxx
//官网的命令可以查看(搜索)

3.String类型

//追加字符串,如果key不存在,则是set key
APPEND key1 "hello"
//设置值
set key1 v1
//得到
get key1

//把值加加1
incr views  
  //把值加加10  
incrby  views 10
//浏览量-1,减10(java步长,减量)
decr views 
    
//decrby views 10
//截取字符串
getrange key1  0 3 // [0,3]
//得到所有字符串
getrange key1 0 -1
//修改字符串通过范围(在字符串之间插入数据)
setrange key1 1 xx
//重要,如果设置过期时间(expire)和值,ttl, 设置一个值 然后30秒后过期
setex key1 30 "xxx"
//如果不存在设置值,存在则不设置值
setnx 
//设置多个键和值(many)可无限多,每一个都可以get到,相当于 set k1 v1 
//set k2 v2
mset k1 v1 k4 v4

//如果不存在设置,是原子性的存在(一个失败全部失败)
msetnx k1 v1 k4 v4

//!!!设置对象,可用对象   keys user*可以得到全部对象
set user:1 {name:xxx,age:3}
//设置2个map 
mset user:1:name jams user:1:age 2
//得到多个map
mget user:1:name user:1:age
//先get后set,不存在值nil
getset aa xx
//jRedis...	

4.list(可以变为栈和队列)
//栈是入栈使用lpush,出栈也使用lpush

//从左边开始插入
lpush list aaa  
lpush  list bbb
//从右边开始插入
rpush list aaa
//获取所有list的值,redis不区分大小写
lrange list 0 -1
//移除左边或右边的第一个值
lpop list
rpop list
//通过下标获取值 l  index(从0开始)
lindex list 1
//list长度
llen list
//移除指定的值,移除1个
lrem list 1 one 
//截断list(删除), 保留下标的范围(1,2](从0开始)
ltrim list 1 2
//剪切list
//移除列表后,移动到另外一个列表中
//先右边出栈后 输出到另外一个元素的左边
//第一个是源栈 第二个是目标栈(不存在)
rpoplpush  mylist des
//不存在lpoprpush  
//如果存在值 设置指定下标的值被替换,不存在报错 ,最左边有值则设置相当于 left list set
lset list 0 valxxx
//在指定的值前面插入值,指定的值和插入的值, 键|值
linsert mylist after  "aaa"  "befVal" //before
linsert mylist after  "aaa"  "befVal" //before

//是一个链表
5.set(集合)值不能重复,无序,

//添加值(每放入一次,每次存入,存放顺序可能会不同,每个值都是唯一的)
sadd mset "hello"
//查看所有值
sMembers myset
//判断值是否在set中
sismember myset aaa
//得到个数
scard myset
//移除指定值(顺序不会改变)
srem myset hello
//抽奖程序,获取指定个数的值
srandmember myset 3
//随机删除key
spop myset
//剪切,移动指定值到另外一个set中
smove set1 set2  aa
//共同关注,求差集,最好 大的在前 ,小的在后,不然返回空
//不同之处, hello 1 2 3  和 hello 1  4,差在2,3,不管
//两个集合,以第一个集合为参照,的不同之处
sdiff key1 key2s
//交集,两个集合共同部分
sinter key1 key2s
//并集,就是两个集合合并起来
sunion key1 key2

在这里插入图片描述
6.hash(重要)(hashmap,和hashset) key-map(k1 v1 k2 v2),得到值还需要 key 和map.key, hash和set都不可以重复
hash有序,set无序
//key不能重复
在这里插入图片描述

//添加,值 键值 ,比map多了一个名字
hset myhash field1 value1 
//得到一个字段值
hget myhash field1
//设置多个值
hmset myhash field1 value1  field2 value2 
//得到多个值
hget myhash field1 field2
//得到所有值
hgetall myhash

//删除hash中的一个key
hdel myhash field1
//得到key/value长度
hlen myhash
//获取所有keys
hkeys myhash
//获取所有values
hvals myhash
//增长-1 对指定的字段
hincrby myhash field3 -1
//如果不存在就设置值 not exist
hsetnx myhash field4  xxx
//设置对象 ,hash更适合对象的存储
hset aaa:11 111  name
hget aaa:11 111

7.zset(有序集合) 在set基础上
zset是有序的,而set是无序的。

//必须带序号
zadd myset 1 one 
//设置多个
zadd myset 2 two 3 three
//排序数字,从正无穷到负无穷,从小到大,加上排序的序号
zrangebyscore salary -inf +inf withscores
//2500以下,从小到大
zrangebyscore salary  -inf 2500 withscores
//从大到小得到工资对应的人名 reverse range 
zrevrange salary 0 -1
//查看所有元素
zrange salary  0 -1
//移除元素,通过值   
zrem salary jack
//判断在区间的个数
zcount myzset 1 3
//可以应用在排行榜

----三种特殊数据类型----
8.geospatial(地理位置)space
//查询附近的人,两地的距离
1.要录入数据 百度城市经度纬度、

   //添加地理位置 经度 纬度 城市名 
    geoadd china:city 116.60 39.90 beijing ...可加多个
    //南极北极无法直接添加,导入数据一般用java一次性导入
   //得到位置,(键值)
     geopos china:city beijing
   //两个位置的距离,单位 km m ft ...
     geodist china:city beijing shanghai  km
   //查看附近的人,把定位更新,通过半径来查询()
   //按照半径的值来查询,限定几个,radius半径
    // georadius china:city count 3   报错
    
    //限制条数 ,经度 纬度 100为半径的城市
    //georadius china:city 100 30 100 km count 3
   //指定经度纬度 500km的定位,直线距离
    georadius china:city 110 30 500 km withdist
   //根据成员名字来查询附加100km的城市
    georadiusbymember china:city shanghai 10 km
   //了解,把二维的(两个值)经纬度转换为一维
   //的(一个值)经纬度,一样就是距离一样
   geohash china:city beijing chongqi
   //查看所有数据
    zrange china:city 0 -1
   //底层还是使用zset,可用zset来移除
    zrem china:city beijing

8.hyperloglog (super log->wood)

1.基数(分别在两个集合中不重复的元素的个数)(有一定误差)  
                    A={1,2,3,4,5,5}    为4个,是1,2,3,4
                    B={1,2,3,4}          可以接受误差
2.网页的uv(网站统计数据) 
      传统方式使用set,(不重复),保存大量用户id,我们是要统计
3.优点,只需要 12kb,使用的内存是固定的
4.使用(pf是作者的名字)Philippe Flajolet
     // 添加元素
     pfadd key1 a b c
     //查看元素个数
     pfcount key1
  //合并两个集合的值,并到的目标, 源,得基数,变成一个集合   合并两个集合 如 1 2 3和1 2 3 4合并为1 2 3 4算出是4
    //,也就是全部值只算一次
      pfmerge  mykey3 key2 key1
       //查看元素个数
     pfcount  mykey3

9.bitmap(按位存储的)(两个状态的可以使用)
//是调试zset

   场景: 统计用户状态,  打卡,疫情统计
   位图,是数据结构
   //是 键0和值1
   setbit  sign 0 1
   //去统计一周每一天的打卡
   //得到具体哪一天的值
   getbit sign 3 
   //统计1的数量
      bitcount sign

10.事务

   要么同时成功,同时失败,原子性
   !!redis事务单条命令保持原子性,但事务不保证原子性
    redis事务的本质:一次性,顺序性,排他性(命令都会被序列化)
    redis:没有隔离级别的概念(就是不直接执行,要等执行)
             redis是一次性执行的
    过程:   
              //开启事务()
                 multi
              //命令入队()
                  set k1 v1
                  set k2 kv
                  get k2
              //执行事务()
              exec 
             //取消事务,命令都不执行
               discard 
        //编译型异常(代码有错,全部不执行)
       //运行时异常(存在先后顺序,可以继续执行下面的语句)
       //字符串加+运行时异常(mysql事务没有原子性)
         set k1 "v1"
       multi
       incr k1
       discard
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值