Redis中的String(字符串)类型的基本使用与基本命令
a.一些关于字符串类型的基本命令
90%的java程序员使用redis只会使用一个String类型!
String类型的value值,不仅可以是字符串还可以是我们的数字,这在下面的自增例子中可以解释这点。
###############################################################################################
#字符串的基本追加,与获取字符串长度
127.0.0.1:6379> set name xuan #set key 值:此命令可以设置键值对
OK
127.0.0.1:6379> keys * #keys *:此命令可以查看所有的键
1) "name"
127.0.0.1:6379> get name #get key:此命令可以查看指定键的value值
"xuan"
127.0.0.1:6379> append name yuan #append key 内容:此命令可以在原来的字符串基础上追加内容,如果key不存在则创建新的key
(integer) 8
127.0.0.1:6379> get name
"xuanyuan"
127.0.0.1:6379> strlen name #strlen key:此命令可以查看指定key所对应的字符串的长度
(integer) 8
127.0.0.1:6379> append age 21 #使用append命令的时候,如果key不存在则作用类似set命令,会创建一个新的键值对
(integer) 2
127.0.0.1:6379> keys *
1) "name"
2) "age"
127.0.0.1:6379> get age
"21"
127.0.0.1:6379> append age 21
(integer) 4
127.0.0.1:6379> get age
"2121"
127.0.0.1:6379>
###############################################################################################
#数据库中字段的自增设置
127.0.0.1:6379> set num 0
OK
127.0.0.1:6379> keys *
1) "name"
2) "num"
3) "age"
127.0.0.1:6379> incr num #incr key:此命令可以让key自增1
(integer) 1
127.0.0.1:6379> incr num
(integer) 2
127.0.0.1:6379> get num
"2"
127.0.0.1:6379> incrby num 10 #incrby key 步长:此命令可以让key自增我们设置的步长数
(integer) 12
127.0.0.1:6379> get num
"12"
127.0.0.1:6379> incrby num 20
(integer) 32
127.0.0.1:6379> get num
"32"
127.0.0.1:6379> decr num #decr key:此命令可以让key自减1
(integer) 31
127.0.0.1:6379> get num
"31"
127.0.0.1:6379> decrby num 10 #decrby key 步长:此命令可以让key自减我们设置的步长数
(integer) 21
127.0.0.1:6379> get bun
(nil)
127.0.0.1:6379> get num
"21"
127.0.0.1:6379>
###############################################################################################
#截取字符串中的部分内容
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> set name xuanyuanzhenying #设置name的值
OK
127.0.0.1:6379> keys * #keys *:查看redis数据库中所有的键
1) "name"
127.0.0.1:6379> get name #get key:得到指定的键的值
"xuanyuanzhenying"
127.0.0.1:6379> getrange name 0 3 #getrange key 下标1 下标2:此命令可以截取指定字符串的某段
"xuan"
127.0.0.1:6379> getrange name 0 7
"xuanyuan"
127.0.0.1:6379> getrange name 0 -1 #getrange key 0 -1:此命令可以截取字符串的全部
"xuanyuanzhenying"
127.0.0.1:6379>
###############################################################################################
#替换字符串中的部分内容
127.0.0.1:6379> keys * #查看redis数据库中所有的key
1) "name"
127.0.0.1:6379> get name #得到指定的key对应的value值
"xuanyuanzhenying"
127.0.0.1:6379> setrange name 8 piaoxue #setrange key 下标 替换内容:此命令可以从指定下标处替换字符串中的内容
(integer) 16
127.0.0.1:6379> get name
"xuanyuanpiaoxueg"
127.0.0.1:6379> setrange name 8 piaoxuepiaoyv
(integer) 21
127.0.0.1:6379> get name
"xuanyuanpiaoxuepiaoyv"
127.0.0.1:6379>
###############################################################################################
# setex(set with expire) #设置键的时候,可以设置上过期时间
# setnx(set if not exist) #如果键不存在才会设置,存在的话不会设置,在分布式锁中会常用!
# msetnx #用msetnx设置多个键值对的时候,只要有一个key存在,那么整体就会设置失败,这体现的是redis数据库的原子性
127.0.0.1:6379> keys * #查看redis数据库中所有的键
(empty array)
127.0.0.1:6379> setex name 30 "xuanyuan" #setex key 过期时间单位秒 value:此命令可以在设置键值对的时候设置上过期时间
OK
127.0.0.1:6379> ttl name #ttl key:此命令可以查看键的过期时间
(integer) 26
127.0.0.1:6379> get name #get key:得到指定的键对应的value值
"xuanyuan"
127.0.0.1:6379> keys * #keys *:得到redis数据库中的所有的键
1) "name"
127.0.0.1:6379> setnx mykey "redis" #setnx key value:此命令在设置键值对的内容时会先检测此键是否存在,只有在
(integer) 1 #当前redis数据库中不存在此键的时候,才会创建键值对,若存在则不会创建键值对
127.0.0.1:6379> keys *
1) "mykey"
127.0.0.1:6379> get mykey
"redis"
127.0.0.1:6379> setnx mykey "MongoDB" #此时redis中已经存在mykey键了,因此不会再创建此键值对了,mykey值仍是redis
(integer) 0
127.0.0.1:6379> get mykey
"redis"
127.0.0.1:6379>
###############################################################################################
b.redis中怎样存储对象?
redis中存储对象,如下图:
两种方式存储对象之后,在redis数据库中的键如下图:
这样就可以解释为什么用json字符串设置的对象,只能够通过键user:1去获取,而通过逐个属性去设置的对象,只能通过键user:2:name和user:2:age逐个获取值?因为在redis数据库中不同的设置对象的方式,在数据库中存储的键是不一样的,而在redis数据库中,只有通过键才能获取值;