redis 读取mysql数据类型_缓存数据库-redis数据类型和操作(string)

Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)

一:String(字符串)

string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。

string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。

string类型是Redis最基本的数据类型,一个键最大能存储512MB。

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

4a8ca3c70bc9fe636e9dcd68769e0062.png

-------------------------------------------------------------------------------------

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

在Redis中设置值,默认不存在则创建,存在则修改

ex:过期时间(秒)

px:过期时间(毫秒)

nx:如果设置为True,则只有name不存在时,当前set操作才执行

xx:如果设置为True,则只有name存在时,岗前set操作才执行

2)setnx(name,value)

设置值,只有name不存在时,执行设置操作(添加)

= set(name value,nx=True)

3)setex(name,value,time)

# time,过期时间(数字秒 或 timedelta对象

=set(name,value,ex=time)

4)psetex(name, time_ms, value)

# time_ms,过期时间(数字毫秒 或 timedelta对象

=set(name,value,px=time)

5)mset(*args, **kwargs)

批量设置值

如:mset(k1="v1",k2="v2")

-----------------------------------------------------------------------------------

6)get(name) 获取值

7)mget(keys,*args) 批量获取

mget(k1,k2)

8)getset(name,value) 设置新值并获取原来的值

9)getrange(key,start,end)   获取子序列(根据字节获取,非字符)

# name,Redis 的 name

# start,起始位置(字节)

#end,结束位置(字节)

比如:“中国” 0-3表示“中”

10)setranage(name,offset,value) 修改字符串内容,从指定字符串索引开始向后替换(新值太长时,则向后添加)

11) setbit(name,offset,value) 对name对应值的二进制表示的位进行操作

#对name对应值的二进制表示的位进行操作

#参数:

#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 insource:

num=ord(i)print bin(num).replace('b','')

特别的,如果source是汉字"武沛齐"怎么办?

答:对于utf-8,每一个汉字占 3 个字节,那么 "武沛齐"则有 9个字节

对于汉字,for循环时候会按照 字节 迭代,那么在迭代时,将每一个字节转换 十进制数,然后再将十进制数转换成二进制11100110 10101101 10100110 11100110 10110010 10011011 11101001 10111101 10010000

-------------------------- ----------------------------- -----------------------------武 沛 齐*用途举例,用最省空间的方式,存储在线用户数及分别是哪些用户在线 每个用户都用个ID,用户ID号是多少,就设置第多少位为1,通过bitcount()统计1的个数,就代表有了多少个在线用户

优点统计速度快,点用空间少:1亿用户只需要占用100M空间 1M=1024*1024

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

13) bitcount(key, start=None, end=None) 获取name对应的值的二进制表示中 1 的个数

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

15)incr(self, name, amount=1)自增 name对应的值,当name不存在时,则创建name=amount,否则,则自增。

16)incrbyfloat(self, name, amount=1.0) 增 name对应的值,当name不存在时,则创建name=amount,否则,则自增。

17)decr(self, name, amount=1)自减 name对应的值,当name不存在时,则创建name=amount,否则,则自减。

18)append(key, value) 在redis name对应的值后面追加内容

练习查看

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

#-*- coding:utf-8 -*-

__author__ = 'shisanjun'[BEGIN]2017/7/29 15:51:31[root@kvm2~]#redis-cli

127.0.0.1:6379> set name1 shi #设置个key-value

OK127.0.0.1:6379>set name2 san

OK127.0.0.1:6379> set name3 jun ex 3 #设置name3过期时间为3秒

OK127.0.0.1:6379>get name3

(nil)127.0.0.1:6379> KEYS * #查看所有key

1) "name1"

2) "name2"

3) "foo"

127.0.0.1:6379> set name2 jun nx #不存在则创建,存在则不创建

(nil)127.0.0.1:6379> set name3 jun nx #不存在则创建,存在则不创建

OK127.0.0.1:6379> set name1 111 xx #存在则创建,不存在不创建

OK127.0.0.1:6379> set name4 111 xx #存在则创建,不存在不创建

(nil)127.0.0.1:6379> SETNX name5 222 #不存在则创建,存在则不创建

(integer) 1

127.0.0.1:6379> SETNX name5 222(integer) 0"10"

127.0.0.1:6379> SETEX name6 3 333 #设置过期时间为3秒 setex key time value

OK127.0.0.1:6379>get name6

(nil)127.0.0.1:6379> PSETEX name7 1 777 #设置过期时间为1毫秒 setex key time value

OK127.0.0.1:6379> MSET k1 "v1" k2 "v2" #批量设置

OK127.0.0.1:6379> keys *

1) "name1"

2) "k1"

3) "name5"

4) "k2"

5) "name2"

6) "name3"

7) "foo"

127.0.0.1:6379> mget k1 k2 #批量查看

1) "v1"

2) "v2"

127.0.0.1:6379> GETSET k1 "v3" #设置新值还回旧值

"v1"

127.0.0.1:6379>get k1"v3"

127.0.0.1:6379> set k3 "中国"OK127.0.0.1:6379> GETRANGE k3 0 3 #从那个字节获取,一个中文3个字节

"\xe4\xb8\xad\xe5"

127.0.0.1:6379> SETRANGE k3 6 1111 #从那个字节设置

(integer) 10

127.0.0.1:6379>get k3"\xe4\xb8\xad\xe5\x9b\xbd1111"

127.0.0.1:6379> set n1 "foo"OK127.0.0.1:6379> setbit n1 7 1 #从左到右第7位设置1

(integer) 0127.0.0.1:6379>get n1"goo"

127.0.0.1:6379> getbit n1 7 #获取第7位是1还是0

(integer) 1

127.0.0.1:6379> BITCOUNT n1 0 3 #获取从0-3个字节中转二进制1的个数

(integer) 17

127.0.0.1:6379> STRLEN k3 #统计字节个数

(integer) 10

127.0.0.1:6379> set n2 1OK127.0.0.1:6379> INCR n2 #自增

(integer) 2

127.0.0.1:6379>INCR n2

(integer)3

127.0.0.1:6379>INCR n2

(integer)4

127.0.0.1:6379> DECR n2 #自减

(integer) 3

127.0.0.1:6379>DECR n2

(integer)2

127.0.0.1:6379> INCRBYFLOAT n2 1.0 #按浮点数自增

"3"

127.0.0.1:6379> INCRBYFLOAT n2 1.0

"4"

127.0.0.1:6379> set n3 4.0

127.0.0.1:6379> INCRBYFLOAT n3 2.1

"6.1"

127.0.0.1:6379> APPEND n3 2222 #追加

(integer) 7

127.0.0.1:6379>get n3"6.12222"[END]2017/7/29 16:05:41

View Code

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值