栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

2.redis五大基本数据类型

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

//把值加加10
incr views      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
setex key1 30 "xxx"
//如果不存在设置值,存在则不设置
setnx (set if noexist)
//设置多个值(many)可无限多
mset k1 v1 k4 v4

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

//!!!设置对象,可用对象
set user:1 {name:xxx,age:3}
//设置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 aaa
lpush bbb
//从右边开始插入
rpush aaa
//获取所有list的值,redis不区分大小写
lrange list 0 -1
//移除左边或右边的第一个值
lpop list
rpop list
//通过下标获取值 l  index
lindex list 1
//list长度
llen list
//移除指定的值,移除1个
lrem list 1 one 
//截断值, 保留下标的范围[1,2](从0开始)
ltrim list 1 2
//移除列表后,移动到另外一个列表中
//先右边出栈后 输出到另外一个元素的左边
//第一个是源栈 第二个是目标栈(不存在)
rpoplpush  mylist des
//如果存在值 设置指定下标的值被替换,不存在报错
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
//随机删除key
spop myset
//移动指定值到另外一个set中
smove set1 set2
//共同关注,求差集
sdiff key1 key2s
//交集
sinter key1 key2s
//并集
sunion key1 key2

6.hash(重要) key-map(k1 v1 k2 v2)

//添加,值 键值
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基础上

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

----三种特殊数据类型----
8.geospatial(地理位置)
//查询附近的人,两地的距离
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   
   //指定经度纬度 500km的定位,直线距离
    georadius china:city 110 30 500 km
   //根据成员名字来查询
   georadiusbymember china:city shangehai 100km
   //了解,把二维的(两个值)经纬度转换为一维
   //的(一个值)经纬度,一样就是距离一样
   geohash china:city beijing chongqi
   //查看所有数据
    zrang china:city 0 -1
   //底层还是使用zset,可用zset来移除
    zrem china:city beijing

8.hyperloglog

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

9.bitmap(按位存储的)(两个状态的可以使用)

   场景: 统计用户状态,  打卡,疫情统计
   位图,是数据结构
   //是 键(0-....)和值(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
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/927016.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号