redis -String类型用法

一,nosql:泛指非关系型数据库

二 ,关系型 和非关系 有什么特点

1,关系型

bash 复制代码
传统的RDBMS
    结构化组织
    SQL
    数据和关系都存在单独的表中 row  col 
    数据操作,数据定义语言
    严格的一致性
    基础的事务
    。。。。。

2,非关系型

bash 复制代码
NoSQL
    不仅仅是数据
    没有固定的查询语言
    键值对存储,列存储,文档存储,图形数据库(社交关系)
    最终一致性,
    CAP定理 和 BASE(异地多活)
    高性能,高可用,高扩展性
    。。。。

三、Redis能干什么

Redis是一个开源的,能做数据库 、缓存、和消息中间件

Redis能干嘛?

  1. 内存存储、持久化、内存中是断电即失、所以说持久化很重要(rdb、aof)
  2. 效率高、可以用于高速缓存
  3. 发布订阅系统
  4. 地图信息分析
  5. 计时器、计数器( 浏览量)

四、redis 常用用法

bash 复制代码
[root@iZ2zefrn59xpiawd7jgzxhZ ~]# ps -ef|grep redis #链接Redis
redis     4486     1  0 09:54 ?        00:00:08 /www/server/redi/src/redis-server 127.0.0.1:6379
root     17010 16956  0 11:44 pts/0    00:00:00 grep --color=auto redis
[root@iZ2zefrn59xpiawd7jgzxhZ ~]# redis-cli -p 6379
127.0.0.1:6379> ping  #测试
PONG
127.0.0.1:6379> keys *  #查看所有的
1) "key:__rand_int__"
127.0.0.1:6379> set name liuxukun  # set key 
OK
127.0.0.1:6379> set age 1
OK
127.0.0.1:6379> keys *
1) "key:__rand_int__"
2) "age"
3) "name"
127.0.0.1:6379> EXISTS name
(integer) 1
127.0.0.1:6379> EXISTS name1
(integer) 0
127.0.0.1:6379> move name 1
(integer) 1
127.0.0.1:6379> keys *
1) "key:__rand_int__"
2) "age"
127.0.0.1:6379> set name liu
OK
127.0.0.1:6379> EXPIRE name 10 #设置过期时间·
(integer) 1
127.0.0.1:6379> ttl name 
(integer) 6
127.0.0.1:6379> ttl name 
(integer) 5
127.0.0.1:6379> 
127.0.0.1:6379> set name lxk 
OK
127.0.0.1:6379> type name  #查看类型
string
127.0.0.1:6379> 
[root@iZ2zefrn59xpiawd7jgzxhZ ~]# 

五,String(字符串)

string的使用场景:

  • 计数器
  • 统计多单位的数量 uid:99999:follow 0
  • 粉丝数
  • 对象缓存存储
bash 复制代码
127.0.0.1:6379> set key1 v1          #设置值
OK
127.0.0.1:6379> get key1			 #获得值
"v1"
127.0.0.1:6379> keys *				#获得所有值
1) "key1"
2) "key:__rand_int__"
3) "name"
127.0.0.1:6379> EXISTS key1  	#判断某一个key是否存在
(integer) 1
127.0.0.1:6379>  APPEND key "hello"  
		#追加字符串,如果当前的key不存在,就相当于setkey
(integer) 5
127.0.0.1:6379> get key1           
"v1"
127.0.0.1:6379> APPEND key1 "hello"
(integer) 7
127.0.0.1:6379> get key1
"v1hello"
127.0.0.1:6379> STRLEN key1  #获取字符串的长度
(integer) 7
127.0.0.1:6379> APPEND key1 ",lxk"
(integer) 11
127.0.0.1:6379> get key1
"v1hello,lxk"
######################################################
127.0.0.1:6379> set views 0  #初始浏览量为0
OK
127.0.0.1:6379> get views
"0"
127.0.0.1:6379> incr views  #自增一
(integer) 1
127.0.0.1:6379> incr views
(integer) 2
127.0.0.1:6379> decr views  #自减1 
(integer) 1
127.0.0.1:6379> decr views
(integer) 0
127.0.0.1:6379> incrby views 10  # 可以设置步长,指定增量
(integer) 10
127.0.0.1:6379> decr views 5
(error) ERR wrong number of arguments for 'decr' command
127.0.0.1:6379> decrby views 5
(integer) 5
######################################################
字符串范围 range
127.0.0.1:6379> keys *  #设置key1 的值
1) "key1"
2) "name"
3) "key:__rand_int__"
4) "key"
5) "views"
127.0.0.1:6379> get key1
"v1hello,lxk"
127.0.0.1:6379> GETRANGE key1 0 3  #截取字符串【0,3】
"v1he"
127.0.0.1:6379> GETRANGE key1 0 -2
"v1hello,lx"
127.0.0.1:6379> GETRANGE key1 0 -0
(error) ERR value is not an integer or out of range
127.0.0.1:6379> GETRANGE key1 0 -1 #获取全部的字符串和getkey是一样的
"v1hello,lxk"

#替换
127.0.0.1:6379> set key2 abcdefg
OK
127.0.0.1:6379> SETRANGE key2 1 xx  #替换指定位置开始的字符串
(integer) 7
127.0.0.1:6379> get key2
"axxdefg"
######################################################
setex(set with expire) #设置过期时间
setnx(set with expire)# 不存在设置
127.0.0.1:6379> setex key3 30 "hello"  #设置key3的值为hello,30秒后过期
OK
127.0.0.1:6379> ttl key3
(integer) 21
127.0.0.1:6379> get key3
"hello"
127.0.0.1:6379> setnx mykey "redis" #如果mekey不存在,创建mykey
(integer) 1
127.0.0.1:6379> keys *
1) "key1"
2) "name"
3) "key2"
4) "mykey"
5) "key:__rand_int__"
6) "key"
7) "views"
127.0.0.1:6379> setnx mykey "MonogoDB"#如果mykey存在,创建失败
(integer) 0
127.0.0.1:6379> get mykey
"redis"
######################################################
#mset
#mget
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3  #同时设置多个值
OK
127.0.0.1:6379> keys *
1) "k1"
2) "k3"
3) "k2"
127.0.0.1:6379> mget k1 k2 k3 #同时获取多个值
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> msetnx k1 v1 k4 v4  #msetnx是一个原子性的操作,要么一起成功,要么一起失败
(integer) 0
127.0.0.1:6379> get k4
(nil)

#对象
set user:1 {name:zhangsan,age:3}#设置一个user:1对象值为json字符来保存一个对象!

#这里的key是一个巧妙的设计:user:{id}:{filed},如此设计在Redis中是完全OK的

127.0.0.1:6379> mset user:1:name zhangsan user:1:age 2
OK
127.0.0.1:6379> mget user:1:name user:1:age
1) "zhangsan"
2) "2"

######################################################
getset#先get然后再set
127.0.0.1:6379> getset db redis  #如果不存在值,则返回nil
(nil)
127.0.0.1:6379> get db
"redis"
127.0.0.1:6379> getset db mongodb #如存在值,获取原来的值,并设置新的值(可以用于更新数据)
"redis"
127.0.0.1:6379> get db
"mongodb"
相关推荐
白鲸开源1 小时前
收藏!史上最全 Apache SeaTunnel Source 连接器盘点 (2025版),一篇通晓数据集成生态
大数据·数据库·开源
MonKingWD1 小时前
MySQL事务篇-事务概念、并发事务问题、隔离级别
数据库·后端·mysql
我科绝伦(Huanhuan Zhou)2 小时前
银河麒麟V10一键安装Oracle 11g脚本分享
数据库·oracle
秋千码途3 小时前
一道同分排名的SQL题
数据库·sql
lssjzmn3 小时前
🚀如何基于Redis的ZSet数据结构设计一个通用的,简单的,可靠的延迟消息队列,以RedisTemplate为例
redis
jakeswang4 小时前
应用缓存不止是Redis!——亿级流量系统架构设计系列
redis·分布式·后端·缓存
秋难降5 小时前
零基础学SQL(八)——事务
数据库·sql·mysql
Starry_hello world5 小时前
MySql 表的约束
数据库·笔记·mysql·有问必答
RestCloud5 小时前
ETLCloud中的数据转化规则是什么意思?怎么执行
数据库·数据仓库·etl
一个天蝎座 白勺 程序猿6 小时前
Apache IoTDB(4):深度解析时序数据库 IoTDB 在Kubernetes 集群中的部署与实践指南
数据库·深度学习·kubernetes·apache·时序数据库·iotdb