当前位置: 首页 > news >正文

redis学习笔记(二)

文章目录

  • redis数据类型
    • string(字符串)
      • 1. 设置键值
      • 2. 设置键值的过期时间
      • 3. 关于设置保存数据的有效期
      • 4. 设置多个键值
      • 5. 字符串拼接值
      • 6. 根据键获取值
      • 7. 自增自减
      • 8. 获取字符串的长度
      • 9. 比特流操作

redis数据类型

redis可以理解成一个全局的大字典,key就是数据的唯一标识符。根据key对应的值不同,可以划分成5个基本数据类型。redis = {"name":"yuan","scors":["100","89","78"],"info":{"name":"rain""age":22},"s":{item1,itme2,..}
}1. string类型:字符串类型,是 Redis 中最为基础的数据存储类型,它在 Redis 中是二进制安全的,也就是byte类型。单个数据的最大容量是512M。key: 值2. hash类型:哈希类型,用于存储对象/字典,对象/字典的结构为键值对。key、域、值的类型都为string。域在同一个hash中是唯一的。key:{域(属性): 值,域:值,            域:值,域:值,...}
3. list类型:列表类型,它的子成员类型为string。key: [值1,值2, 值3.....]
4. set类型:无序集合,它的子成员类型为string类型,元素唯一不重复,没有修改操作。key: {值1, 值4, 值3, ...., 值5}5. zset类型(sortedSet):有序集合,它的子成员值的类型为string类型,元素唯一不重复,没有修改操作。权重值(score,分数)从小到大排列。key: {值1 权重值1(数字);值2 权重值2;值3 权重值3;值4 权重值4;}

string(字符串)

  • SET/SETEX/MSET/MSETNX
  • GET/MGET
  • GETSET
  • INCR/DECR
  • DEL

1. 设置键值

set 设置的数据没有额外操作时,是不会过期的。

set key value

设置键为name值为yuan的数据

set name yuan
set name rain # 一个变量可以设置多次
127.0.0.1:6379>set name yuan
OK
127.0.0.1:6379>get name 
"yuan"
127.0.0.1:6379>

注意:redis中的所有数据操作,如果设置的键不存在则为添加,如果设置的键已经存在则修改。

设置一个键,当键不存在时才能设置成功,用于一个变量只能被设置一次的情况。

setnx  key  value

一般用于给数据加锁(分布式锁)

127.0.0.1:6379> setnx goods_1 101
(integer) 1
127.0.0.1:6379> setnx goods_1 102
(integer) 0  # 表示设置不成功127.0.0.1:6379> del goods_1
(integer) 1
127.0.0.1:6379> setnx goods_1 102
(integer) 1

2. 设置键值的过期时间

redis中可以对一切的数据进行设置有效期。以秒为单位

setex key seconds value

设置键为goods_1值为101过期时间为10秒的数据

setex name goods_1 10

3. 关于设置保存数据的有效期

setex 添加保存数据到redis,同时设置有效期,格式:

setex key time value
127.0.0.1:6379>setex name 5 rain
OK
127.0.0.1:6379>get name 
"rain"
127.0.0.1:6379>get name 
(nil)

4. 设置多个键值

mset key1 value1 key2 value2 ...

例3:设置键为a1值为goland、键为a2值为java、键为a3值为c

mset a1 goland a2 java a3 c

5. 字符串拼接值

常见于大文件上传

append key value

向键为a1中拼接值haha

set title "我的"
append title "redis"
append title "学习之路"

6. 根据键获取值

根据键获取值,如果不存在此键则返回nil

get key

获取键name的值

get name

根据多个键获取多个值

mget key1 key2 ...

获取键a1、a2、a3的值

mget a1 a2 a3

getset:设置key的新值,返回旧值

redis> GETSET db mongodb    # 没有旧值,返回 nil
(nil)
redis> GET db
"mongodb"redis> GETSET db redis      # 返回旧值 mongodb
"mongodb"redis> GET db
"redis"

7. 自增自减

web开发中的电商抢购、秒杀。游戏里面的投票、攻击计数。系统中计算当前在线人数、

set id 1
incr id   # 相当于id+1
get id    # 2
incr id   # 相当于id+1
get id    # 3set goods_id_1 10
decr goods_id_1  # 相当于 id-1
get goods_id_1    # "9"
decr goods_id_1   # 相当于id-1
get goods_id_1    # 8set age 22incrby age 2 # 自增自减大于1的值时候用incrby

8. 获取字符串的长度

set name xiaoming
strlen name  # 8 

9. 比特流操作

————————

mykey 00000011

1字节=8比特 1kb = 1024字节 1mb = 1024kb 1gb = 1024mb

1个int8就是一个字节,一个中文:3个字节

SETBIT     # SETBIT key offset value 按从左到右的偏移量设置一个bit数据的值 
GETBIT     # 获取一个bit数据的值
BITCOUNT   # 统计字符串被设置为1的bit数.
BITPOS     # 返回字符串里面第一个被设置为1或者0的bit位。

案例1:

SETBIT mykey 7 1
# 00000001
getbit mykey 7
# 00000001
SETBIT mykey 4 1
# 00001001
SETBIT mykey 15 1
# 0000100100000001

我们知道 ‘a’ 的ASCII码是 97。转换为二进制是:01100001。offset的学名叫做“偏移” 。二进制中的每一位就是offset值啦,比如在这里 offset 0 等于 ‘0’ ,offset 1等于 ‘1’ ,offset 2 等于 ‘1’,offset 6 等于 ‘0’ ,没错,offset是从左往右计数的,也就是从高位往低位

我们通过SETBIT 命令将 andy中的 ‘a’ 变成 ‘b’ 应该怎么变呢?

也就是将 01100001 变成 01100010 (b的ASCII码是98),这个很简单啦,也就是将’a’中的offset 6从0变成1,将offset 7 从1变成0 。

案例2:签到系统

setbit user_1 6 1
setbit user_1 5 1
setbit user_1 4 0
setbit user_1 3 1
setbit user_1 2 0
setbit user_1 1 1
setbit user_1 0 1
BITCOUNT user_1 # 统计一周的打卡情况
http://www.lryc.cn/news/119332.html

相关文章:

  • 不侵入代码的rem适配,支持桌面缩放,vue2的适配方案,包含echarts适配
  • 智能合约 -- 常规漏洞分析 + 实例
  • JavaScript 操作历史记录api怎样使用 JavaScript
  • Spring 容器
  • 【腾讯云Cloud Studio实战训练营】使用React快速构建点餐H5
  • Java培训课程哪个品牌好?快拿小本本记好
  • leetcode19. 删除链表的倒数第 N 个结点
  • c51单片机串行通信示例代码(单片机--单片机通信)(附带proteus线路图)
  • UML之四种事物
  • 盒子模型和新盒子模型及区别
  • 移动端Vue组件库-vant
  • Java课题笔记~ JSP内置对象
  • 数据结构笔记--链表经典高频题
  • Android Ble蓝牙App(三)特性和属性
  • 日常BUG——使用Long类型作id,后端返回给前段后精度丢失问题
  • 【C++初阶】string类的常见基本使用
  • 【ArcGIS Pro二次开发】(60):按图层导出布局
  • docker-desktop数据目录迁移
  • 03.利用Redis实现缓存功能---解决缓存穿透版
  • 全景图!最近20年,自然语言处理领域的发展
  • Mybatis参数传递
  • 手动实现 Spring 底层机制 实现任务阶段一编写自己 Spring 容器-准备篇【2】
  • 部署模型并与 TVM 集成
  • Android Navigation 导航切换fragment用法
  • Anaconda Prompt使用pip安装PyQt5-tools后无法打开Spyder或闪退
  • 【jvm】jvm整体结构(hotspot)
  • 通达信波段选股公式,使用钱德动量摆动指标(CMO)
  • 家电维修小程序开发指南:从零搭建到上线
  • 玩赚音视频开发高阶技术——FFmpeg
  • python 变量赋值 修改之后 原值改变