Redis string操作

 一、和python交互

import redis
r=redis.Redis(host='192.168.5.132', port=6379)
r.set("foo","bar")
print(r.get("age"))

#连接池 
#redis-py 使用connection pool来管理对一个resisserver的所有连接,避免每次建立、释放连接的开销,默认,每个redis实例都会维护一个自己的连接池,这样可以实现多个redis实例共享一个连接池。

import redis
pool=redis.ConnectionPool(host="192.168.5.132",port=6379)
r=redis.Redis(connection_pool=pool)
print(r.get("name"))

二、操作

redis中的String在在内存中按照一个name对应一个value来存储。如图:

具体操作方式如下:

1、set(name, value, ex=None, px=None, nx=False, xx=False)

在Redis中设置值,默认,不存在则创建,存在则修改
参数:
     ex,过期时间(秒)
     px,过期时间(毫秒)
     nx,如果设置为True,则只有name不存在时,当前set操作才执行
     xx,如果设置为True,则只有name存在时,岗前set操作才执行

 redis命令操作:

127.0.0.1:6379> set age 22   #设置age为22
OK
127.0.0.1:6379> set age 22 ex 2  #设置age为22,过期时间为2秒
OK
127.0.0.1:6379> set age 23
OK
127.0.0.1:6379> set age 24 nx #当age的值已经存在,则无法重新设置新的值
(nil)
127.0.0.1:6379> get age
"23"
127.0.0.1:6379> set age 24 xx #当age的值已经存在,则才能重新设置新的值
OK
127.0.0.1:6379> get age
"24"

 2、setnx(name, value)

设置值,只有name不存在时,执行设置操作(添加),相当于set name junesu nx

 3、setex(name, time,value)

# 设置值
# 参数:
    # time,过期时间(数字秒 或 timedelta对象)
#相当于 set name junesu ex 2
127.0.0.1:6379> setex sex 5 boy
OK

 4、psetex(name, time_ms, value)

# 设置值
# 参数:
    # time_ms,过期时间(数字毫秒 或 timedelta对象)
#相当于 set name susu px 2

 5、mset(*args, **kwargs)

批量设置值
如:
    mset(k1='v1', k2='v2')
    或
    mget({'k1': 'v1', 'k2': 'v2'})
127.0.0.1:6379> mset a 1 b 2 c 3
OK

 7、mget(keys, *args)

批量获取
如:
    mget('a', 'b')
    或
    r.mget(['a', 'b'])

 8、getset(name, value)

设置新值并获取原来的值,没有就设置新值
127.0.0.1:6379[1]> set age 23  #设置age的值为23
OK
127.0.0.1:6379[1]> getset age 18  #重新设置age的值为18,并返回原来的值23
"23"
127.0.0.1:6379[1]> get age  #获取age当前的值
"18"

 9、getrange(key, start, end)

127.0.0.1:6379[1]> set name sujun
OK
127.0.0.1:6379[1]> getrange name 0 1 #获取0到1的字符串,这边相当于切片,但是是顾头又顾尾
"su"

10、setrange(name, offset, value)

127.0.0.1:6379[1]> get name
"junesu"
127.0.0.1:6379[1]> setrange name 3 s  #把字符串中的第3个字符替换成m
(integer) 10
127.0.0.1:6379[1]> get name
"junssu"

 11、setbit(name, offset, value)

  
# 参数:
    # name,redis的name
    # offset,位的索引(将值变换成二进制后再进行索引)
    # value,值只能是 1 或 0
# 注:如果在Redis中有一个对应: n1 = "foo",
        那么字符串foo的二进制表示为:01100110 01101111 01101111
    所以,如果执行 setbit('n1', 7, 1),则就会将第7位设置为1,
        那么最终二进制则变成 01100111 01101111 01101111,即:"goo"
  
# 扩展,转换二进制表示:
  
    # source = "武沛齐"
    source = "foo"
    for i in source:
        num = ord(i)
        print bin(num).replace('b','')
  
    特别的,如果source是汉字 "武沛齐"怎么办?
    答:对于utf-8,每一个汉字占 3 个字节,那么 "武沛齐" 则有 9个字节
       对于汉字,for循环时候会按照 字节 迭代,那么在迭代时,将每一个字节转换 十进制数,然后再将十进制数转换成二进制
        11100110 10101101 10100110 11100110 10110010 10011011 11101001 10111101 10010000

  *用途举例,用最省空间的方式,存储在线用户数及分别是哪些用户在线

bitcount 统计二进制有多少个1
setbit n4 111 1
127.0.0.1:6379> setbit name 111 1
(integer) 0
127.0.0.1:6379> get name
"junesu\x00\x00\x00\x00\x00\x00\x00\x01"
假如有2亿用户,有1亿在线
假如一个
ID1000用户,那么我就setbit n5 1000 1
ID555用户,那么我就setbit n5 555 1
在线用户数:bitcount n5
判断555用户在线:
127.0.0.1:6379> getbit n5 555
1

 12、getbit(name, offset)

# 获取name对应的值的二进制表示中的某位的值 (0或1)

 13、bitcount(key, start=None, end=None)

# 获取name对应的值的二进制表示中 1 的个数
# 参数:
    # key,Redis的name
    # start,位起始位置
    # end,位结束位置

 14、strlen(name)

# 返回name对应值的字节长度(一个汉字3个字节)

 15、incr(self, name, amount=1)

# 自增 name对应的值,当name不存在时,则创建name=amount,否则,则自增。
# 参数:
    # name,Redis的name
    # amount,自增数(必须是整数)
# 注:同incrby
127.0.0.1:6379[1]> INCR user_name
(integer) 1
127.0.0.1:6379[1]> INCR user_name
(integer) 2
127.0.0.1:6379[1]> INCR user_name
(integer) 3

 *用途举例,这个一般用于计算用户的登录的总量的。

 16、incrbyfloat(self, name, amount=1.0)

# 自增 name对应的值,当name不存在时,则创建name=amount,否则,则自增。
  
# 参数:
    # name,Redis的name
    # amount,自增数(浮点型)

127.0.0.1:6379[1]> incrbyfloat user_login 1.2
"1.2"
127.0.0.1:6379[1]> incrbyfloat user_login 1.4
"2.6"

 17、decr(self, name, amount=1)

127.0.0.1:6379> decr name
(integer) 7
127.0.0.1:6379> decr name
(integer) 6
127.0.0.1:6379> get name
"6"
127.0.0.1:6379>

  *用途举例,用于如果用户账户失效,则减去

18、append(key, value)

127.0.0.1:6379[1]> get name
"susu"
127.0.0.1:6379[1]> append name xiao #在name值后面追加xiao字符串
(integer) 14
127.0.0.1:6379[1]> get name
"susuxiao"

 19、help 变量名

#查看操作的使用方法
127.0.0.1:6379[1]> help set     #help  命令
 
  SET key value [EX seconds] [PX milliseconds] [NX|XX]  #set命令的用法
  summary: Set the string value of a key   #作用
  since: 1.0.0
  group: string    #所属类型,是string

转载于:https://www.cnblogs.com/xiangjun555/articles/8000615.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值