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"
相关推荐
全栈师13 分钟前
SQL Server中关于个性化需求批量删除表的做法
数据库·oracle
Data 31721 分钟前
Hive数仓操作(十七)
大数据·数据库·数据仓库·hive·hadoop
BergerLee1 小时前
对不经常变动的数据集合添加Redis缓存
数据库·redis·缓存
gorgor在码农1 小时前
Mysql 索引底层数据结构和算法
数据结构·数据库·mysql
Dylanioucn1 小时前
【分布式微服务云原生】掌握分布式缓存:Redis与Memcached的深入解析与实战指南
分布式·缓存·云原生
huapiaoy1 小时前
Redis中数据类型的使用(hash和list)
redis·算法·哈希算法
bug菌¹2 小时前
滚雪球学Oracle[6.2讲]:Data Guard与灾难恢复
数据库·oracle·data·灾难恢复·guard
一般路过糸.2 小时前
MySQL数据库——索引
数据库·mysql
Cengineering2 小时前
sqlalchemy 加速数据库操作
数据库
【D'accumulation】2 小时前
令牌主动失效机制范例(利用redis)注释分析
java·spring boot·redis·后端